Case study · a personal site’s menu and footer
A menu that is a photograph of my desk
My personal site has a second menu that is a photograph of my desk, and its footer is a drawer with a pinball table in it. The plain list of links is the default; the desk is there for anyone who asks.
Things to find, if you want to
“I wanted to make it with easter eggs for them to discover if they wanted to/ there’s games and puzzles and such, a literal arcade, …”
The same site has a second menu, behind a button marked T’s Desktop: a photograph of the desk I work at. The objects on it are the menu: the monitor holds the table of contents, the keyboard opens site search, a toad on the desk opens an arcade, a bin of memory cards opens a slideshow, the mouse changes the cursor trail. Hover anything and it tells you what it is. The footer is the other half — a drawer that slides open as you reach the bottom, with the sitemap in it, a clock running on my time, my email stored rot13 so scrapers get nonsense, and a marble that starts a pinball table.
None of that is the interesting part. The interesting part is that ignoring it costs a visitor almost nothing.
A picture that is still a menu
The plain list is the default: the button marked Menu opens it, and the desk opens only from its own button. On the desk there is a toggle back to the list, phones get their own ordinary navigation, and an Escape key closes exactly one layer at a time — drawer, then search, then the overlay itself. The picture is the reward, never the toll.
Mobile + desktop, touch + keyboard. Touch is not an afterthought.
It blamed the browser, hid the exit, and trusted the test balls
-
The browser got the blame
A shimmer that sweeps across each object on the desk was changed three times without anyone seeing it render. Two of those commits blamed Chrome, “a parsing issue some Chrome builds have”. The cause was an older style rule of the agent’s own, overriding the new animation.
Kind of miss: plausible but invented · receipts-001, R-168 -
The way out was out of reach
The “View as a plain list” button, the desk’s way out to an ordinary list of links, sat inside the monitor’s clipped area, where it couldn’t be reached.
Kind of miss: looked right but was not measured · receipts-001, R-169 -
The test balls passed; play didn’t
A pinball fix was “validated in-browser” with dropped test balls, and real play still found balls stuck at the sides. The next fix’s one failing drop was written off as “a rare flipper-base settle that real momentum clears”. The next day’s commit calls it “the recurring flipper-base trap”.
Kind of miss: looked right but was not measured · receipts-001, R-172
I used it
-
I saw nothing there
I caught it in my browser: none of the three versions showed. The fix removed the old rule and brought back the technique the commits had said Chrome couldn’t handle.
Falls under: a recommendation, a premise or a summary is a hypothesis until it is checked · receipts-001, R-168 -
I went looking for the way out
I caught it. The button moved out from under the monitor’s edge to sit below it.
Falls under: a build or a script cannot judge how something looks · receipts-001, R-169 -
I played it
“It keeps getting stuck to the right and left.” The bar that fixed those two traps was my idea: a bar “in line with the top of the blue triangles”. The trap written off as rare got a watchdog the next day: a ball that sits still for about three seconds gets a nudge.
Falls under: test the thing itself, not a proxy for it · receipts-001, R-172
| The correction | The standing rule | Enforced in |
|---|---|---|
| A bug of the agent’s own was blamed on the browser | A recommendation, a premise or a summary is a hypothesis until it is checked | CLAUDE.md · rule 13 |
| The plain-list button was unreachable, and nobody had looked | A build or a script cannot judge how something looks. Look at it rendered | CLAUDE.md · rule 4 |
| Test balls passed while real play still stuck | Test the thing itself, not a proxy for it | CLAUDE.md · rule 1 |
A desk you can ignore, and a drawer with a game in it
Nothing loads until someone asks for it. Neither the physics engine nor the renderer behind the pinball table touches the network until a visitor clicks the marble. Same for the slideshow and the desk art itself. The arcade’s game script is the exception: it still loads with every page. A visitor who never clicks pays almost nothing, which is the only honest way to put a game in a footer.
Plan for the dependency that does not arrive. The pinball table wants a WebGL renderer, but if that script fails to load it does not fail with it: it notices the missing library and boots its plain-canvas renderer instead. That habit came out of kitchens, where the delivery not showing up is not an excuse, it is Tuesday.
Open the desk on thomascheesman.ca — the button marked T’s Desktop in the bar at the top, on a computer.
The honest limits
Checked in September 2026. Only the five objects that open something can be reached with the keyboard. The other thirteen are hover cards, so their notes can’t be read without a mouse. The arcade’s script loads with every page.
The files behind every claim above
-
Why I built it, in my words
reviews/copy-review-005.md, Q-BQD2 ·
-
Every miss above in the receipts inventory, with its sources
-
The rules the corrections fall under
-
The site itself