tourney-app
Multi-tenant SaaS for running volleyball tournaments. Organisers self-serve a tournament via Stripe checkout, then run it live — score entry, standings, brackets, schedules and a public spectator view, all on path-based tenancy.
tourney-app runs amateur volleyball tournaments end to end: an organiser signs up, pays through Stripe checkout, and gets a tournament they can operate the same day — team registration, match schedule, live score entry, standings and bracket, plus a public page spectators can follow without an account.
The structural decision was tenancy. Rather than one deployment per club, tenants are path-based (/t/<slug>), so a single instance serves every tournament and a new one costs nothing to stand up. Old single-tournament URLs 301 to their tenant path for six months before returning 410, so early links do not rot silently.
Billing is a weekly pass rather than a subscription, because a tournament is an event, not an ongoing service — nobody wants to remember to cancel. Tenants created but never paid for are removed by a Vercel cron job after seven days, which keeps the slug namespace clean without anyone policing it manually.
The landing page deliberately borrows a dark HUD aesthetic that is off-genre for amateur sport, while every operational screen keeps a plain, high-legibility theme. Admins type scores fast in a noisy gym and spectators check results on phones; mood belongs on the front door, not in the scoreboard. Playwright end-to-end tests cover the auth, billing and scoring paths, and the commerce disclosures Japanese law requires ship as first-class pages rather than a footer afterthought.
Stack




