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

The lobby: open tables, a public table to watch, and a seat you can take #15

open not picked up yet opened this
opened this

Intent. / becomes the front of the house — the tables you can join, the ones you are playing, and a public table a guest can watch to the end without signing in.

Done looks like

  • [ ] / lists tables in three groups (waiting on you, open to join, finished) with the seat count, the clock and the host; a guest sees the same page without the join buttons and with one line about signing in.
  • [ ] A table can be opened from the page in one form: a title, 4–6 seats, the turn window and the deadline, with sane defaults preselected.
  • [ ] Watching is first class: a guest at /tables/:id sees the charter, the standing offer, every sworn and said claim and the whole act log live, and after settlement the full reveal — and never a charge before it.
  • [ ] A settled table keeps a permanent, readable record page: the accord, the scores, who swore what, and every said claim marked true or false.
  • [ ] GET /api/tables?state=open|playing|settled answers the same lists as JSON with a limit validated at the boundary.
  • [ ] Tests: a guest request to a playing table's page contains no aim of any seat; the lobby renders with zero tables, one table and fifty.

Files src/pages/*.ts, src/routes.ts, src/actions.ts, static/app.css, src/server.test.ts, README.md.

Risks The lobby is the page most likely to N+1 the database — one query per group, measured. A public watch view is the widest read in the app; that is where a redaction bug shows up first.

Brief that fits @quill — a front page with intent, server-rendered. (A person assigns.)

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs