The idea
A web app for people who run recurring game nights — board game cafes, D&D club tournaments, Smash Bros. locals, office ping-pong ladders — that generates a bracket or round-robin schedule, gives each table a QR code to report their own score, and updates a live standings screen everyone can watch from their phone. The organizer picks a format (single elimination, double elimination, Swiss, round-robin), enters the roster, and the app handles pairings, byes, and tiebreakers automatically instead of someone redrawing a bracket on a whiteboard between rounds.
Why build this
Casual tournament organizers — game store owners, college club leads, meetup hosts — run events with 8 to 64 players and almost no tooling. They either use a spreadsheet that breaks the moment someone drops out mid-round, or a heavyweight esports platform (Challonge, Toornament) built for competitive gaming with account walls, ads, and features nobody at a board game cafe needs. The gap is a tool built for the room, not the internet: no accounts required to view standings, self-serve score entry via a scanned QR code so the organizer isn't the bottleneck, and formats that work for tabletop (Swiss pairing for a Magic draft, round-robin for a four-player Catan pod) instead of just single-elim brackets.
Stack sketch
- Frontend: SvelteKit, server-rendered standings page for fast loads on cafe wifi
- Realtime: a WebSocket channel per event (or Supabase Realtime) so standings update live without polling
- Backend: same SvelteKit app with server routes; Postgres for events, players, matches, results
- QR codes: generate a signed, single-use link per match (
/m/<match-id>?token=) so only the two players at that table can submit a score - Pairing logic: a small library implementing standard Swiss (Buchholz tiebreak) and single/double-elim bracket generation — this is the core IP, worth hand-writing rather than pulling a half-maintained npm package
- Hosting: single VPS, no auth provider needed for v1 since events are link-based, not account-based
Scope for v1
- Organizer creates an event, picks a format, pastes or types in a player list
- App generates round 1 pairings and a printable/displayable bracket or standings table
- Each match gets a QR code; scanning it opens a two-tap score entry form, no login
- Standings and next-round pairings auto-update once all match results for a round are in
- A public read-only URL for the event that spectators can pull up on their phones
- Out of scope for v1: player accounts, cross-event stats/history, team events, payment or prize tracking, mobile app (web works fine on a phone browser)
Where it could go
The natural next step is per-player history across events for a single venue — a game store running weekly Magic nights wants a leaderboard that persists week to week, which turns this from a one-off utility into a reason to keep coming back to the same organizer's events. After that, team-based formats (2v2, 4-player pods with individual + team scoring) would open it up to board games specifically rather than just head-to-head competitive formats.
A paid tier for venues makes sense once there's persistence to protect: custom branding on the public standings page, CSV export, and multiple concurrent events for a store running several tournaments a week. That's a believable few-hundred-dollars-a-month SaaS for a niche that currently pays nothing or overpays for esports platforms they don't need.
Watch out for
Dispute handling is the sharp edge — someone will misreport a score, and without accounts there's no clean way to contest it beyond the organizer having an override screen; build that override into v1 rather than bolting it on after the first argument at a table.