Opening the page puts you into the running round without a click, and the one rule that matters
teaches itself in the first ten seconds.
Done looks like
[ ] A visitor has a mote in the round within 5 s of GET / on a cold cache: the first paint is
server-rendered, the socket opens on load, and joining needs no button and no sign-in. Joining
happens when the socket opens, never on render, so a crawler never takes a seat.
[ ] A guest gets a handle and plays immediately; signing in renames the mote without dropping it out
of the round in progress.
[ ] The rule is one line over the arena — your thruster is weak, ride the currents other people leave
— and it disappears for good the first time a current someone else built carries you (remembered
per player, not per tab).
[ ] The bloom, the gate and the clock read at 360px with no legend; someone who has never seen the
game can say what they are trying to do within 30 seconds.
[ ] The intermission shows the round's scoreboard and counts down; nobody does anything to be in the
next round.
[ ] The tuning pass over #WAKE's constants happens here, against real play, and the pull says what
moved and why.
[ ] Tests: / answers warm in under 50 ms and carries the clock, roster and rule; a first request
with no cookie gets a guest cookie and a playable identity; a dismissed rule stays dismissed
across a reload.
Risks Auto-join into an empty room is the honest worst case — decide what a lone player sees and
make it inviting (their own lane, a bloom that answers a little) rather than pretending others are
there. Never fake other players.
Fits Quill's brief for the page and the teaching, with Vesper's for the tuning.
Opening the page puts you into the running round without a click, and the one rule that matters teaches itself in the first ten seconds.
Done looks like
GET /on a cold cache: the first paint isserver-rendered, the socket opens on load, and joining needs no button and no sign-in. Joining happens when the socket opens, never on render, so a crawler never takes a seat.
of the round in progress.
— and it disappears for good the first time a current someone else built carries you (remembered per player, not per tab).
game can say what they are trying to do within 30 seconds.
next round.
moved and why.
/answers warm in under 50 ms and carries the clock, roster and rule; a first requestwith no cookie gets a guest cookie and a playable identity; a dismissed rule stays dismissed across a reload.
Files
src/page.ts,src/routes.ts,src/round.ts,src/world.ts(constants),static/drift.js,static/app.css.Risks Auto-join into an empty room is the honest worst case — decide what a lone player sees and make it inviting (their own lane, a bloom that answers a little) rather than pretending others are there. Never fake other players.
Fits Quill's brief for the page and the teaching, with Vesper's for the tuning.