<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: mwheelz</title><link>https://news.ycombinator.com/user?id=mwheelz</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 16 Jul 2026 00:42:38 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mwheelz" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Show HN: A page that hides a sentence for AI and lets you check if it came back]]></title><description><![CDATA[
<p>The premise is web pages have two readers, people and the AI reading for people. Web pages can now be written more for the AI and less for people. It’s a companion to an earlier page about browser fingerprinting. 
(<a href="https://news.ycombinator.com/item?id=48062178">https://news.ycombinator.com/item?id=48062178</a>)<p>On my page, the there’s a planted phrase for AI. As the site gets crawled, you can see if this phrase is ever returned by any AI summarizing the page. So there’s a couple things you can do on my page:<p>1. Ask any AI to summarize the URL, and check if the planted phrase has been read. 
2. Create a short-lived link and paste into any chat. You will see which crawler reads it first, before anyone ever actually opens or clicks on the link. 
3. Generate your own planted phrase and leave it for the next crawler.<p>On this page, I also look at one example, composio.dev/hermes which serves a block of instructions specifically for AI agents. It’s not malicious, and it’s good marketing but shows that web pages can now be created and written for two very different audiences.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48326123">https://news.ycombinator.com/item?id=48326123</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 29 May 2026 17:10:07 +0000</pubDate><link>https://sinceyouarrived.world/taken/agents</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48326123</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48326123</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>This is a real version of the critique and I've been thinking about it. The page leans on an IP-to-geo lookup that's known to be approximate (city-level on a good day, region-level often, wrong-city sometimes); accuracy isn't the point, any location, given without asking, is the point. But you're right that leading with a wrong answer gives readers permission to dismiss the whole. Considering opening with timezone instead and demoting geo to later, where it lands as "we tried, here's how close we got." Open to better suggestions.</p>
]]></description><pubDate>Fri, 08 May 2026 19:58:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=48067950</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48067950</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48067950</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>Fair point, and you're right. On iOS the stock font set is essentially uniform across devices in the same OS version, so the "nearly unique" claim doesn't hold there. Just pushed a hedge: prose now distinguishes between desktop (where fonts accumulate via apps and OS over time, and the bundle is genuinely identifying) and iOS/Android (where it isn't, on its own). Combined with screen + GPU + language + timezone the iOS version still narrows the field, but the prose shouldn't overclaim. Thanks.</p>
]]></description><pubDate>Fri, 08 May 2026 19:57:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=48067930</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48067930</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48067930</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>Thanks for that. The page isn't trying to tell anyone something they don't already know, it's trying to put it in front of the people who haven't been told. The bug reports today have been gold and the volume is meaningfully better for them.</p>
]]></description><pubDate>Fri, 08 May 2026 19:56:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=48067918</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48067918</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48067918</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>Yeah, the bottom counter on the page is meant to make exactly that point. Mouse movements, scroll velocity, tab switches, reading pauses are all features in modern fraud / "trust" scoring systems alongside the static fingerprint. Biometrics is the next layer, and it's already happening on the back of "passive" liveness detection most people never see.</p>
]]></description><pubDate>Fri, 08 May 2026 16:02:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48065014</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48065014</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48065014</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>Confirmed. Firefox's privacy hardening returns "Mozilla, or similar" or just "Mozilla" as the renderer string. Chrome doesn't (yet). My parser was treating the Firefox string as if it were ANGLE format and grabbing the wrong half. Fixed.</p>
]]></description><pubDate>Fri, 08 May 2026 16:01:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=48065007</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48065007</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48065007</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>Right, IP-to-geo is approximate and gets a lot of cases wrong (yours among them). Most ad networks use it as a region/DMA hint, and not precise positioning. The point of including it isn't precision. It's that any location is more than nothing, and the visitor never opted in.</p>
]]></description><pubDate>Fri, 08 May 2026 16:00:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48064988</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48064988</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48064988</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>Pedantic but right. The JS queries them; the browser returns them without prompting the user. "Volunteered" is the editorial verb for that round-trip but it does paper over a layer.</p>
]]></description><pubDate>Fri, 08 May 2026 15:59:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=48064973</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48064973</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48064973</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>The 100% charging readout is the desktop-with-no-battery phantom. I pushed a stricter filter for that earlier, you may be on a cached copy (try a hard refresh). On the light-mode call: the page detects your preference but doesn't honor it, intentionally. The irony being that the demo ignores the same signal it points out. I take the cost of the annoyance.</p>
]]></description><pubDate>Fri, 08 May 2026 15:58:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=48064959</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48064959</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48064959</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>The Referer header is the one that's hardest to opt out of cleanly, strip it at the network level and too many things break. Referrer-Policy lets the origin set the rule, but the visitor doesn't get to choose. There's a quiet move toward Referrer-Policy: strict-origin-when-cross-origin as a sane default in modern browsers but it's still origin-dictated, not visitor-dictated.</p>
]]></description><pubDate>Fri, 08 May 2026 15:57:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=48064943</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48064943</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48064943</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>Correct on rigor. Proving a fingerprint requires the two-visit protocol you describe. The page doesn't actually compute a stable fingerprint or attempt to track returning visitors, it shows you the signals that go into one. The barcode at the bottom is deterministic from the data shown but isn't compared against anything stored. Sloppier than a real fingerprinting tool, by design.</p>
]]></description><pubDate>Fri, 08 May 2026 15:56:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=48064935</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48064935</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48064935</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>Right that most of these aren't surprises individually, and right that nobody wants a permission prompt for Accept-Language. The argument isn't that you should, it's that the combination is enough to identify you across sites without your awareness, and that the wider tracking ecosystem trades on that bundle. The piece is editorial about the thing existing, not a proposal to gate every header. Reasonable to push back if you find the bundle isn't the point.</p>
]]></description><pubDate>Fri, 08 May 2026 15:55:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48064914</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48064914</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48064914</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>Fair pushback, and partially right. Most of these data points are individually defensible. Accept-Language helps with localization, Referer is just how links work, timezone is universally useful. The page's argument isn't that any single one is bad; it's that the bundle is identifying. Panopticlick / Cover Your Tracks measures combinatorial uniqueness, not any single point. The piece could be sharper about the distinction. Noted.</p>
]]></description><pubDate>Fri, 08 May 2026 15:54:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=48064901</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48064901</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48064901</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>Update: I pushed two rounds of fixes for things people caught.<p>1. GPU "or similar" stranded prose. Firefox returns "Mozilla, or similar" as the masked renderer string and my parser was grabbing the second half. Masked-GPU case now gets its own observation.<p>2. Desktop battery showing NaN/100%. Chromium reports a phantom 100%-charging battery on machines without one; my filter was too narrow. Stricter check, falls through to "kept back."<p>3. Storage quota of 39+ GB reading as implausible. Now expressed in GB, and the prose was reworded ("would let this page write up to" rather than "allocated to").<p>4. Screen size matching window size (Firefox letterboxing / Brave farbling). Page now names it: "your browser appears to be returning the viewport in place of the real screen — anti-fingerprinting at work."<p>5. "Recent, high-end display" being claimed on old retina devices (iPhone 5-class). Tightened the heuristic.<p>6. No-JS hangs at "reading." <noscript> block added.<p>Worth saying directly since it came up. The prose is hand-written. Each observation has a small set of templated registers and the code selects among them based on what the data returns. There is no LLM in the runtime path. AI helped me iterate on the spec like it does for most projects now. The sentences on the page are mine. If that's not the kind of work you're in the mood for, fair, but the slop charge is wrong.</p>
]]></description><pubDate>Fri, 08 May 2026 15:53:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48064884</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48064884</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48064884</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>The 39 GB number is a bug. I was reading quota (browser allow-up-to ceiling) and calling it "allocated." Fixed; pushing now. Contrast is intentional but I hear you. not changing it but noted, and a cleaner reading mode is on the to-do later.</p>
]]></description><pubDate>Fri, 08 May 2026 15:29:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48064564</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48064564</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48064564</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>Both linked in the Sources & Confessions modal at the bottom. Cover Your Tracks is the spiritual ancestor of this whole piece. amiunique is more rigorous; this is the editorial cousin.</p>
]]></description><pubDate>Fri, 08 May 2026 15:28:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48064552</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48064552</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48064552</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>Real bug. Firefox returns "Mozilla, or similar" for the renderer string and my parser was grabbing the second half. Fixed; pushing in a minute. Your GPU is fine. Your browser is doing the right thing.</p>
]]></description><pubDate>Fri, 08 May 2026 15:26:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=48064518</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48064518</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48064518</guid></item><item><title><![CDATA[New comment by mwheelz in "A web page that shows you everything the browser told it without asking"]]></title><description><![CDATA[
<p>The GPU string really is the spicy one combined with screen + fonts it's enough to single you out across most of the open web. The card itself is a tank.</p>
]]></description><pubDate>Fri, 08 May 2026 15:25:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48064510</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48064510</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48064510</guid></item><item><title><![CDATA[A web page that shows you everything the browser told it without asking]]></title><description><![CDATA[
<p>Article URL: <a href="https://sinceyouarrived.world/taken">https://sinceyouarrived.world/taken</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48062178">https://news.ycombinator.com/item?id=48062178</a></p>
<p>Points: 625</p>
<p># Comments: 294</p>
]]></description><pubDate>Fri, 08 May 2026 12:37:05 +0000</pubDate><link>https://sinceyouarrived.world/taken</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=48062178</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48062178</guid></item><item><title><![CDATA[What Color Was The Sky – yesterday's sky above your city, from real data]]></title><description><![CDATA[
<p>Article URL: <a href="https://sinceyouarrived.world/sky">https://sinceyouarrived.world/sky</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47894841">https://news.ycombinator.com/item?id=47894841</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 24 Apr 2026 19:39:06 +0000</pubDate><link>https://sinceyouarrived.world/sky</link><dc:creator>mwheelz</dc:creator><comments>https://news.ycombinator.com/item?id=47894841</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47894841</guid></item></channel></rss>