Files
bkvargyasandClaude Fable 5.1 5ade592384 Courtside MVP: engine, web app, Docker + Cloudflare Tunnel deploy, docs
Tournament engine (pools, single/double elimination, standings with proper
tiebreaks, withdrawals, two-court queue with ETAs and alerts), a single-process
Node server with SQLite via node:sqlite and a WebSocket live board, organizer
desk, QR landing page that follows the tournament phase, Dockerfile and
compose with cloudflared, and documentation for deploying and running a day.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01MB7nCCAscYsb3zzkT6LHZi
2026-09-03 20:31:46 +00:00

2.3 KiB

Roadmap

What exists today is the MVP: run one tournament on one or two courts from a phone, with a QR landing page that follows the day and a live board. The list below is in rough priority order; each item is independent.

Next

  • SMS alerts (Twilio). The engine already emits up_now, on_deck, and broadcast events with the team ids and message text; a sender that subscribes to Tournament.on() and posts to Twilio when TWILIO_* env vars are set is a small addition. Captains opt in at registration ("text me when we're up").
  • Web Push. VAPID keys generated at first start, a service worker on the team page, subscriptions stored per team. Works on Android in any browser and on iOS when the page is added to the home screen.
  • Captain-submitted scores. Winning captain enters the score from the team page, losing captain confirms with one tap, organizer only intervenes on disputes. Needs a per-team write token (the existing code plus a signed nonce) and a "pending confirmation" match status.
  • Co-organizers with roles. Invite links; a scorekeeper role that can enter scores but not change the bracket or roster.
  • Run a real event and fix what it teaches. The simulator is not a beach in September.

Later

  • Divisions (competitive / rec) inside one tournament, each with its own pools and bracket, sharing the court queue.
  • Swiss pairing for stage 1 when there are too many teams for pools and too few hours for a full round robin.
  • Timed sets (e.g. 12-minute sets) as an alternative to point targets, for keeping a large field on schedule.
  • Season leaderboard across tournaments: wins, points, streaks; the thing that brings people back. Build as a read model over the events table.
  • Player identities that persist across tournaments so individual stats are possible (currently a player is just a name on a team).
  • Templates: save a format/rules setup and reuse it.
  • Sponsor strip and photos on the public page.
  • Multi-instance deployment: replace the in-memory Registry with a shared store and pub/sub if one process is ever not enough (it will be enough for a very long time).

Non-goals

Payments, waivers, and league scheduling across weeks. Plenty of products do those; Courtside is the desk for the day itself.