Open Courtclub badminton tournaments

Club badminton tournaments

Tournaments that don't feel like spreadsheets.

For the person who runs the club night. Create an event, drop the short link in the group chat, tap players into teams, and score the whole bracket from courtside on a phone.

  • Next.js 16 + Supabase
  • Free, no ads
  • Mobile-first PWA
  • Public source
Live tournament overview with semifinal scores and two teams advancing to the final
/e/SMASH1 · Overview

What it is

A tournament that survives past Tuesday

A club tournament usually runs on a shared spreadsheet, a photo of a whiteboard, and forty messages asking who is actually playing. The names were free text, the schedule link is dead by Tuesday, and nobody can remember who they played in the group stage last month.

Open Court gives each event a short URL like /e/SMASH1. Players register and check in through it, an admin taps two names to make a team, picks a format, and the app generates the matches. Scores flow through the bracket. The player rows stay put for the next tournament.

How Open Court compares with the two kinds of tool club players already use
  Link-and-go schedulers Rating-platform apps Open Court
Set up and share in minutesYesNoYes — links like /e/SMASH1
Players persist between tournamentsNoYesYes
Works when half the crowd won't sign upYesNoYes — admins add players by name
Fixed-pair teamsNoPartlyYes — tap two players
Formats that suit six teamsNoNoYes — fixed rounds plus playoffs
AdsYesNever

Two tools already exist for club badminton: the anonymous scheduler you share once and lose, and the rating platform that wants everyone to make an account first. The README names the specific ones and explains why neither fit a six-team club night.

Tour

One night, four screens

Events

Every event in one list

Ongoing and open events sit at the top, finished ones below. Each card carries the date, singles or doubles, and how many of the maximum places are taken. More than one tournament can be live at the same time.

  • A LIVE badge while an event is running
  • Registered-of-maximum on every card
  • Create Event is the first thing on screen
Events list showing two live doubles tournaments and one completed event below
/events

Teams

Tap two names, done

Team formation is the whole screen. Tap a player, tap their partner, that is a team. Players who already confirmed each other as doubles partners can be pulled in with one button. Finalise the lineup in a single save.

  • Only checked-in players are offered
  • Use confirmed pairs in one tap
  • Share link lives on the event card
Team formation screen with eight checked-in player chips and a confirmed-pairs button
/e/SMASH1 · Team formation

Bracket

Winners advance themselves

Pick one of five formats and the matches generate. Enter a score at courtside and the winning pair moves into the next round on its own. A progress bar counts how many matches are done, so nobody has to ask.

  • Groups, fixed rounds, round robin, knockout, manual
  • Overview, Matches, Standings and Players tabs
  • Losing scores strike through as results land
Live bracket with two finished semifinals feeding a final, progress bar at sixty-seven percent
/e/SMASH1 · Overview

Champions

The bit worth screenshotting

A completed event opens on a trophy banner: champions, runners-up, and the totals for players, matches and points. The finished bracket stays underneath with every score. Reopen it if something was entered wrong.

  • Champions and runners-up named on top
  • Player, match and point totals
  • The event stays readable after the night ends
Completed event with a trophy banner naming the champion pair, runners-up and event totals
/e/SMASH1 · Completed

How it works

From group chat to champions

The order an organiser actually does it in, from an empty event to a trophy banner.

01

Create the event

Date, singles or doubles, maximum players, and an optional check-in window. The event gets a short URL you can paste straight into the group chat.

02

Register and check in

Players sign in with Google and register themselves; anyone past the maximum lands on a waitlist. Admins paste in names for the people who never will.

03

Form teams, pick a format

Tap two checked-in players into a team, finalise the lineup, choose one of five formats, and the app generates the match list.

04

Score it courtside

Enter scores on a phone between games. Winners advance, standings recalculate, and the finished event keeps its champions and its bracket.

Features

What's actually in it

Short share links

Every event gets a URL like /e/SMASH1 that survives the login redirect, so a tap in WhatsApp lands on the right page.

Players that persist

Player records carry across tournaments, so next month's event starts with the people who turned up to this one.

Automatic waitlists

Registrations past the maximum player count go to a waitlist computed from sign-up order, not from who shouted loudest.

Bulk player add

Admins paste a list of names to create players in one go, for the crowd that is never going to make an account.

Confirmed doubles pairs

Two players can confirm each other as partners, and team formation pulls every confirmed pair in with one button.

Five match formats

Groups plus knockout, fixed rounds, round robin, single elimination, or fully manual — chosen per event, not per app.

Standings and results

Team standings with points difference, a results matrix, and the bracket view, all tabs on the same event page.

Skill ratings, admin-only

Players carry a one-to-five skill level that only admins can see, so tapping teams together in front of everyone stays bias-free.

Installs like an app

It ships a web manifest and registers a service worker, so you can add it to a home screen and run it full-screen.

Built with

The stack, and where the data lives

  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind CSS 4
  • Supabase Postgres
  • Supabase Auth
  • Vercel

Events, players, teams and scores live in a Supabase Postgres database; sign-in is Google through Supabase Auth. Hosting is Vercel, where Vercel Analytics and Speed Insights are switched on. No ORM, no component library, no ads, nothing sold on.

FAQ

Reasonable questions

Is it free?

Yes, and there are no ads. It runs on the Vercel and Supabase free tiers. Nobody is charged to create an event, register for one, or play in it.

Do I need an account?

To register yourself, yes — Google sign-in. If you would rather not, an admin can add you by name, and the profile links up if you ever do log in with that email.

Where does my data go?

A Supabase Postgres database, with authentication handled by Supabase. The site itself runs Vercel Analytics and Speed Insights. No ads, no third-party trackers, nothing sold.

Does it work on a phone?

It was built for one — everything above was shot on a phone. It ships a web manifest and a service worker, so you can add it to your home screen and it opens full-screen.

Can I run my own copy?

The repo is public. You need a Supabase project with the migrations in supabase/migrations/ applied and Google OAuth configured; after that it is a git push to Vercel.