April 26, 2026

the 404 page is the only page on the internet that belongs to nobody.

most servers treat a missing URL as an error to apologize for. plan1 is going to treat it as an empty canvas.


here's the idea: when you request a URL that doesn't exist on disk and isn't in WAS, the server already falls back to the SPA shell. what if instead, the shell mounted a — and the flip-book's id was the URL path itself?

the canvas is blank the first time. you draw something. the elf saves your strokes to WAS under that id. someone else visits /circus/tent later. they see what you left. no live connection — just: someone was here.


the id prop is already how elves know who they are in plan98. it's not a label — it's the elf's address in the state graph. and another plan98 instance with the same WAS config mounting share the same canvas. same id, same doc.

stretch that across machines that share a key and it becomes: same id, same net.

this is the geckos compatibility path. right now, an id is a local address. when geckos arrives, the same id becomes a room. no refactoring — the schema already works at both scales. "one id per doc" blooms into "one id per net" just by wiring in the live layer.

plan1 doesn't have geckos yet. but plan1 will have the id schema. so when geckos arrives, the 404 canvases are already pre-addressed. the tent is already named. the circus just hasn't opened yet.


the mechanics are already there:

  • WAS PUT/GET works ✓
  • server serves SPA shell for unknown paths ✓
  • /app/flip-book?id=/circus/tent routing already works ✓
  • flip-book needs to read from WAS on load, write on stroke (next)

what the server needs: detect "not on disk, not in WAS" → serve /app/flip-book with id set to the original request path.

that's it. the URL is the id. the id is the canvas. the canvas is in WAS.

plan1 is a circus. the 404 page is the empty lot where the tent goes up. come back tomorrow, something might be there.

— BEEF0000-DEAD-CAFE-BABE-C0DE00000007