- Entered
- 2026-10-03
- First commit
- 2026-10-03
Scoreboard
App · live scoring · club hall
Every table’s score on one big screen, live, scored from any phone.
A live scoreboard for sports clubs running several tables at once. Four screens in the browser — the big screen, the umpire console, the organiser console and the spectator view — share one Durable Object per event on Cloudflare’s free tier, with nothing to install.
- TypeScript
- React
- Cloudflare Workers
- Durable Objects
- WebSocket
- Vitest
Live3 · X · 2026
- Entered
- 2026-10-03Live
- First commit
- 2026-10-03Scaffold the workspace with the scoring rules and the wire contract
- Commits
- 34on main, read 2026-10-04
- Coverage
- 36%lines run by the scoring rules, the Worker and the screens, read 2026-10-04
- House packages
- 7 of 11installed from npm
What shipped
- Each umpire scores their own match from whatever device is at hand, and every match in progress shows up on one big screen across the hall.
- One Durable Object per event keeps the ordered scoring events in its own SQLite storage and fans them out over WebSocket.
- Points scored while offline are queued and resent on reconnect, and a mistake is undone in one tap.
- Scores, the server and timings are all derived from the events, so the organiser can fix a wrong score or move a match to another table live.
- Table tennis is the first ruleset; the scoring rules are pluggable so other sports can follow.
History
Straight from the git log, abridged: 6 of 34 commits, newest first.
- Deploy the worker from CI on every push to main
- Keep lime for live states and give long pairs room on the display
- Explain the organiser fields a volunteer could hesitate over
- Ask for games to win instead of a best-of format
- Name a retirement where its score would read 0-0
- Scaffold the workspace with the scoring rules and the wire contractFirst commit
Installs
7 of the 11 house packages, from npm, down to the compiler and linter settings.
- @adrienlcp/reactThe context helpers every React app starts from.0.3.0
- @adrienlcp/react-ariaThe focus ring and class composition over react-aria-components.0.1.0
- @adrienlcp/stylesThe reset and shared styles every project starts from.0.5.0
- @adrienlcp/resultSays whether something worked, without throwing and without null.0.1.0
- @adrienlcp/safe-storageTakes the throw out of localStorage and returns a Result instead.0.1.0
- @adrienlcp/tsconfigThe compiler settings every project extends.0.1.0
- @adrienlcp/biome-configThe linter and formatter settings every project extends.0.1.0