A table that has ended sends you to the lobby, with the news

Featurekamo-internal
Shipped
September 9, 2026 at 1:21 AM UTC
Author
Kamo
Commit
ea8f94d

An invitation card outlives the table it points at. Somebody follows one ten minutes later, the game is over, and the window answered with a red error bar over an empty list — the truth, and nothing anybody could act on. It lands them in the lobby now, with the list already loaded and a line saying which of the two things happened: the table ENDED (it existed, everybody stood up), or it is GONE (the server will not answer for it at all, which from an invitation card is the same news said less precisely). Underneath that are the only two things still available — open one yourself, at a price it names, or take a seat at something already running. Three bodies rather than one, because "or take a seat at one below" is a lie when the list is empty and "open a new one" is a lie when they cannot afford it. In that last case the notice offers no button at all and says what a table costs against what they have, which is the answer to the question they were about to ask. A SPECTATOR IS THE CASE THIS EXISTS FOR. Somebody watching from the rail has no seat to be removed from, so when the table closes the frame is the only thing that can tell them — and it is the last frame that table ever sends. Every reader of that frame now checks the status: the socket message, the refresh on focus and on reconnect, the re-read after a result lingers, and the open-by-id on mount. Checked BEFORE the frame is applied, because a terminal state is not something the ordering rules should be allowed to reject as stale, and latched so several frames announcing it produce one exit. Opening a table costs the buy-in now, so the button says so — "New table · 20,000" — and is disabled when the reader demonstrably cannot afford one. That needed the balance, which the lobby's rows have never carried: a row is a summary and deliberately pays for no wallet round trip of its own, so it rides on the ENVELOPE instead. It is optional in the type: a client can deploy before the server, and a missing balance is unknown rather than nothing. While the notice is up the header's own New table button goes quiet — the notice is asking the same question, and two identical brass buttons one above the other is one decision too many. Measured in a browser at 560 and 420, in all four states (no notice, ended with tables, gone with none, ended-and-broke): no page overflow, nothing off an edge, no page errors, and exactly one primary action on screen at a time.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing