Every screen a person would see, painted with index.html's own stylesheet and its own class
names — an .act in here is an .act.
Proposal: PROPOSAL.md, beside this file. Nothing here is built.
The stylesheet is stamped by stamp.mjs. If this looks unlike the
site, restamp it rather than editing the CSS.
Yer Stuff → Settings. One new .stuff-group, between the two controls that are already there and the Start over block that is already below them. No new tab, no new section, no new idiom: the heading is the h3 a .stuff-group already has, and every control in it is an .act or a .seg.
There’s a copy of what you’ve marked, kept under a code and nothing else — no name, no email, no account. We can’t read it: it’s scrambled on this device before it goes anywhere. Last saved a moment ago.
Start over
Bookmarks, itineraries, any trip you’re halfway through, and your Settings above — all of it, back to how the page arrives.
Why here. It is a setting, it belongs to no collection, and the panel it sits in is the one that exists whatever is saved — the same structural reason Forget everything stopped needing to render in two branches. Above Start over, because the block that keeps your stuff should be read before the block that destroys it.
Every one of them is the same block with a different .n on the heading and a different sentence under it. A person should be able to tell which state they are in from the row alone, without pressing anything.
Keeping up with what you just marked.
No spinner. The push is debounced three seconds and usually finishes before anybody looks. A spinner would be a thing that flashes on a page where nothing is waiting on it.
It says what it does not mean. The failure people fear here is losing their marks, and that is the one thing that has not happened. Same reason stuffSaved already earns a sentence of its own.
Nothing is being kept anywhere but this device. Clear your browser and it’s gone.
Restore still works when it is off. Coming back to a copy and choosing to keep making one are two different decisions, and somebody restoring onto a borrowed laptop wants exactly one of them.
Bookmark somewhere and a copy starts keeping itself. Got a code from another device?
No code exists yet, because nothing has been saved and a code with nothing behind it is a thing to write down for no reason. The derive — a second and a half of it — has not run either.
Hidden until asked for. A code on screen is a code in a screenshot, in a screen share, and over the shoulder of whoever is sitting next to you — and unlike a password there is nothing to change it to afterwards.
Yer code
Five words, and the last character is a check. It is a weighted sum of the five, so a mistyped or swapped word is caught on the device before anything is asked of the network — that isn’t a code rather than no copy found.
Yer code
The pressed .act is the only "on" idiom on this page — the filled accent an un-bookmark already wears. No toast, no new component.
The link is the code, in a form a phone can open. It is a fragment, which never reaches a server — not our Worker’s request line, not Cloudflare’s logs, and not the Referer of whatever gets clicked next.
This makes a link. Where it goes is up to you — text it to yourself, put it in a note, email it. We don’t send anything and we never see the address.
The link
Share… is the OS sheet (navigator.share), which puts the link into whatever the person already uses and keeps us out of it entirely. Email it to myself is a mailto: with an empty to: — their mail app, their address, no server of ours in the path. Neither one is a form that collects anything.
One field, one button, one line of result. The field takes the words however anybody plausibly wrote them down — hyphens, spaces, commas, capitals, a stray blank at the end — because the copy was made on a phone and typed back in on a different one.
Five words from another device.
input[type=search], the same control the town and ZIP boxes use. Nothing new to style and nothing new to learn.
Caught on the device, with no request made. Every word is on the list or it isn’t, and the nearest one is a lookup. This is why the wordlist forbids two words within one edit of each other: the suggestion can only ever be one word.
A different sentence, because it means a different thing. One says you typed it wrong; this one says you typed it right and there is nothing here, and somebody standing in a parking lot needs to know which.
What was found is on screen before the decision is made. That is what makes the extra tap cost nothing — it is a decision with its answer already in front of you, not a speed bump.
Someone taps texasfindem.com/#restore=…. The page loads normally, the fragment is read and stripped from the address bar with replaceState, Yer Stuff opens on Settings, and this is waiting. It fills the code in. It does not restore.
Not now leaves this device exactly as it is and forgets the link. The code stays in the box if you want to look again.
Why it doesn’t just do it. The link is the credential. It will end up forwarded, screenshotted, and pasted into a group chat, and a link that silently rewrites a phone when somebody taps it out of curiosity is a bug there is no apologising for. One tap, with the answer already on screen.
This device’s current code — write it down if you want to keep the two apart
Three things this screen has to say and no fewer. That the word "restore" means merge here and nothing local is lost; what the result will actually be, as a number rather than a promise; and that a code is being retired — because the copy it points at may still be somebody else’s phone, and orphaning it silently is the failure. The button says Join them, not Restore, for the same reason.
The confirmation stands where the panel was — the same rule Save itinerary already follows. It names what came back, and it names what didn’t.
It lands on a real anchor and nothing more. The browser scrolls; the Bookmarks tab is selected; nothing is auto-opened. Same call the saved-itinerary panel already made.
Six rendered with no mention of the seventh looks exactly like seven. This is the rule CLAUDE.md wrote down for the one permitted use of a uid in a URL, before the code that needed it. This is that code.
Forget everything on this device means this device. The copy is not on this device. So either the button grows a second control or its caption starts lying, and the caption is the thing answering for the most destructive control on the site.
Start over
And the copy?
Leave it and the copy stays where it is — but this device is about to forget the code, so unless you’ve written it down or another device has it, nobody will ever open it again. It deletes itself after a year untouched either way.
Nothing destructive is pre-selected, and the default is the less destructive of the two — but the caption says plainly what "less destructive" buys, which is usually nothing, because the code is going. That sentence is the one that stops Leave it from reading as a safe choice when it mostly isn’t. Caption is --dim, not --faint, the scoped exception this block already holds.
Three lanes, so which side of the wire each step happens on is visible. The middle lane is the only thing that ever crosses the network, and it never carries the code or anything readable.
A — The first bookmark, on a device that has never saved anything
B — The laptop, opened at the kitchen table with the same code already restored
C — Two devices push at once
D — Where this is honest about KV
If it ever bites, the escalation is written down rather than improvised: a Durable Object in front of the namespace makes the CAS real. One file, no schema change, no migration, and none of the four flows above alters. It is not being built now because a bounded convergence delay on one person’s own two devices is not a problem anybody would notice.
The things a specimen can’t show. Phrased as the thing to do, the way the styleguide's own section 10 is; the reasoning behind each one is in PROPOSAL.md.
Show yer code is the only thing that
reveals it.#restore= — and it is stripped with
replaceState on the same tick it is read..act and .seg, notes are
.stuff-note, warnings are .stuff-warn, the calm boxes are
.stuff-retired. If this needs a component the page hasn’t got, that is a reason
to look again at the design.og: tag or
llms.txt. There is nothing here for a crawler and there never will be.