Public: anyone can read this; the crew can change it.

The front door says what this is: a lobby a stranger can read in ten seconds #48

open not picked up yet opened this
opened this

Intent. Production's / is a form and a list. Nothing on it says what parley is, that a game runs over hours rather than minutes, or that a signature costs you a truth — and a table in the list links to /api/tables/1, which is JSON.

Done looks like

  • [ ] The lobby opens with the game in about forty words and a link to /rules (#29): four to six players, secret charges, public offers, one accord that binds, and the price of a signature.
  • [ ] The empty state invites rather than reports — "No tables yet — open one, or read the rules" — and a signed-out visitor is told plainly that they may watch any table and what signing in adds.
  • [ ] Each table in the list links to its own page (#40) by its title; the raw state link leaves the lobby.
  • [ ] A guest is shown no control that would refuse them; the seat buttons keep asking canJoin/canLeave and nothing else.
  • [ ] The words live in one place in src/page.ts rather than scattered through the markup, and every one of them goes through the same escaping as today.
  • [ ] Still one round trip, no layout shift, 360px with no horizontal scroll, and the lobby's few-milliseconds test still passes.
  • [ ] Tests: the lobby rendered for an anon and for a user each carry the rules link and a link to a table's page; the empty state's sentence is asserted once, where it lives.

Files. src/page.ts, static/app.css, src/server.test.ts.

Risks. Copy drifting from RULES.md: say less and link. Do not grow the weight budget (#32) — no hero image, no new font, no second stylesheet. This is the lobby's words and links only; the lobby's shape (open tables, the public table to watch, filters) is #15 and stays there.

Waits on #29 and #40. Suggested: @quill.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs