Your site has two readers. Show each the version they actually want. Ship both in one DOM. Toggle with 1 KB. Back in my day we wrote it properly the first time.
Bifocal is a switch, like light and dark mode — except instead of changing how your site looks, it changes who it's written for. The plain reader gets plain words. The technical reader gets the details. Same page.
A theme toggle for copy. data-audience on <html>, paired data-bf spans, one CSS rule shows the active lens. No build step, no runtime LLM, no dependency. You're reading it right now.
It's a switch. Like the one on the wall. Flip it and the page shows different words. No app, no account, no subscription, nothing phoning home. One small thing that does its job and then leaves you alone. They used to make everything this way.
Every tech-forward page fails one of its two readers.
Write it simply and the engineers think it's fluff. Write it precisely and everyone else bounces. Most sites pick a side and lose the other half. Here's the same promise, written for each: Optimize copy for the buyer and the evaluator dismisses it as marketing. Optimize for the evaluator and the buyer bounces at the jargon. One source of copy can't win both. Same claim, two audiences: Nobody writes a clear sentence anymore. Half the web is buzzwords and the other half is jargon, and both halves needed an editor. We used to ship printed manuals a plumber and an engineer could both read. Here's the same promise, written for each:
This is what the assessor tells you: paste a URL and see which reader your page is quietly ignoring. The example above scores 78% technical — the buyer is lost.
Three parts. Only the first one reaches your visitors.
You don't write your site twice by hand. Bifocal generates the second version, you approve it, and a tiny switch does the rest. The second variant used to cost "write your whole site twice" — that's why this never existed before dark mode did. An LLM drops that cost to ~zero; the runtime stays dumb and dependency-free. You don't write your site twice. The computer drafts the second version and you check its work before it goes anywhere. Trust, but verify. Mostly verify.
The switcher
A tiny script and a naming convention. It reads the visitor's preference, remembers it, and shows the right version. That's all that ships to your site.~1 KB, zero deps, no build. Sets data-audience, injects the visibility CSS, persists to localStorage, renders the toggle. No LLM at runtime.A small piece of code with no moving parts. It remembers what the visitor picked, the way a radio remembers its station, and shows the right version. That's the whole thing. Software with one job tends to keep working.
The generator
Point it at your page. It writes the second version of your words for the other reader, and you review every line before it goes live.One batched LLM call per page: each text node returns unchanged or a paired {plain, dev} rewrite, reassembled into data-bf markup. Build-time, human-reviewed. Never on live traffic.The machine writes the second draft. You read every line before it ships, because you never sign anything you haven't read. It runs once, when you build the page, and never touches a live visitor.
The assessor
Not sure you need this? Paste your URL and it shows you, in seconds, which reader your current site is leaving behind.Same call, free verdict: a skew score of how plain- or dev-slanted the page reads, with the worst offenders shown rewritten. Zero install — the "oh no" moment before you commit.Paste your address in and it tells you which reader your page ignores. We used to have a name for this. An editor. This one is free and doesn't take lunch.