full-stack · Next.js · event ops2026

Chesstivus

Built for Acid Chess Club — a tournament OS that lets them run their whole comp over the phone.

Chesstivus — public bracket viewer for the Chill tournament, overlaying live results on hand-drawn tournament-sheet artwork

Acid Chess Club runs live chess tournaments for a crowd, and needed a way to manage two concurrent 64-player brackets without a laptop and a check-in desk slowing the room down. I built them Chesstivus — a tournament OS that lets the whole competition run off a phone: seeding, live bracket propagation, mobile result-reporting for hosts, and a public viewer overlaying match data onto the club's own hand-drawn tournament-sheet artwork. Built on Next.js and Supabase, and rehearsed end-to-end at full scale (128 players, real hosts, real results) before the actual night.

The brief

Acid Chess Club needed to run two chess tournaments, Chill and Hectic, back to back, on one night, with volunteer hosts who'd never used the tool before and no time to explain it twice. The brief was to get the entire competition running over the phone — no laptop, no check-in desk — seeding players, generating a fair bracket, letting hosts report results from their phones one-handed, and showing a live public bracket that made sense to a room full of spectators — while staying resilient to the things that actually happen at a live event: late arrivals, disputed results, and a host mis-tapping a button in a loud room.

The approach

Three surfaces, one Supabase-backed source of truth: an admin console for seeding, overrides, and host management; a mobile-first host view built and tested at real phone widths (390×844) rather than just resized in a desktop browser; and a public viewer that renders the live bracket directly on top of the tournament's own poster artwork. Before the real event, both brackets were run to completion end-to-end through the actual UI at full scale — 128 players, real hosts reporting real results — which caught bugs (like a table quietly hosting two simultaneous matches, or a "waiting for next round" message that was actually permanent) that a smaller test never would have.

128
players seeded across two live brackets
2
boards hosted concurrently at a single table in round 1
0
missed or double-booked matches after the full-scale rehearsal
390px
narrowest real phone width the host UI was tested and fixed at
The public viewer for the Chill bracket, showing a completed tournament with a champion crowned
The public viewer for the Chill bracket, overlaying live results on the event's own tournament-sheet artwork — this run finished with a champion crowned.
The public viewer for the Hectic bracket, mid-tournament with round 1 in progress
The same viewer mid-tournament on the Hectic bracket — round 1 in progress, 29 matches still awaiting a result.
Chesstivus public-facing landing page, linking into the live bracket
Admin dashboard showing player counts, remaining players, and current round for both competitions
Host's real mobile view at 390px width, showing a table hosting two concurrent round-1 boards
NEXT
Grillz Queen Configurator