The clean way to build a mobile reader for a news site is to ask the site for its data. Most publishers hand it right to you: an RSS feed, a JSON API, an OpenGraph card per article, a sitemap that lists every URL with a timestamp. You subscribe to the feed, you get structured headlines and links, and the “reader” is mostly a matter of typography. The publisher has already done the hard part — telling a machine what’s on the page.

The Drudge Report does none of that. It has no feed. It has no API. There is no app to fork, no partner program to join, no documented endpoint that returns today’s headlines as data. What there is, instead, is a single page of hand-arranged HTML — three columns of links, a banner headline, a siren when something breaks — edited by a person many times a day, sometimes many times an hour. It looks, structurally, like it was built in 1997, because in the ways that matter it was. And that is precisely the thing DReader had to solve: not how to style a news reader, but how to read a page that was never meant to be read by anything but a human eye.

The absence is the specification

It’s tempting to treat the missing feed as a gap — something the source should have and doesn’t. But the absence is the specification. Drudge’s whole value is editorial: a person decides what leads, what sits in the left column, what gets the flashing light. That judgment lives in the arrangement of the page, not in any field of structured data. A feed would flatten it into a timestamped list and throw the editing away. The page is the product, and the page is the only source of truth there is.

So DReader reads the page the way a reader would. It fetches the same HTML your browser would, and it works out the shape of the thing from position and prominence rather than from tags that were never there — which links are headlines and which are the column of standing links, where one section ends and the next begins, which item is wearing the siren today. None of that is annotated. All of it is inferred from how the page is laid out, because layout is the only place the editor’s intent was ever recorded.

Fidelity without cooperation

The hard constraint isn’t parsing once. It’s staying faithful to a source that offers you no help and no warning. There’s no updated field to poll, no ETag you can trust, no changelog. The page simply is different than it was twenty minutes ago, and a reader that lags is worse than useless — a stale news app is just a lie with good typography. So the work is to mirror a moving target closely enough that opening DReader and glancing at the source would show you the same headlines in the same order of importance, without ever asking the source to tell you when or what changed.

And it has to do that without adding anything. This is the discipline that makes the whole thing coherent: DReader is not a competing editor. It doesn’t re-rank by what’s popular, doesn’t inject related stories, doesn’t decide the siren item is actually boring today. Every one of those would be easy to build and would quietly turn a faithful mirror into a second opinion nobody asked for. The restraint costs real engineering — it’s harder to preserve an order you didn’t choose than to impose one you did — but it’s the only version of the product that’s honest. You picked Drudge. DReader’s entire job is to give you Drudge, on a phone, readable, and nothing else.

Why a studio takes the harder input

We could have built a reader for a source with a nice clean API and called it a day. Plenty exist. But the interesting problems almost always live where the input refuses to cooperate — where there’s no feed, no schema, no partner willing to hand you the data pre-chewed. Learning to build a fast, faithful, phone-shaped reader on top of a page that was never designed to be one is a muscle that transfers: half of the real world ships its most important information as HTML a human was meant to read, and treats a machine reading it as your problem to solve.

DReader is small on purpose. But the thing it does well — take a source that offers no cooperation and mirror it faithfully anyway — is not a small thing at all. There is no feed. There never was. That was always the point.