00Tournaments

Describe the schedule.
Get one that holds.

Tell the assistant what you want in plain language. It sets the constraints and nothing else — a deterministic engine places every match, a validator checks the plan, and the app reports the counts. You review it before it saves.

Pickleball, tennis and squash. Five formats. First tournament free.

01The scheduling assistant

The assistant can't get the maths wrong.

Because it never does the maths. The language model's only job is to turn a sentence into constraints. Everything after that is deterministic and checked.

“Put the seniors in the mornings, give everyone 30 minutes of rest between matches, and keep the finals on the show court.”

01

You describe it

A sentence, not a settings screen. Type what you would have told a volunteer with a whiteboard.

02

The model sets constraints

It translates your sentence into rules. It cannot place a match, and it cannot report an outcome.

03

The engine places

A pure function takes the brackets, your play windows, division preferences and court designations, and produces the plan.

04

The validator checks

The plan is verified, and the app — not the model — reports the counts. Then you save it, or you don’t.

If the assistant could not express something you asked for, it has to say so. Naming the gap is required; quietly dropping it is not an option the design allows.

02When the day moves

The schedule holds when the field changes.

A schedule that falls apart the first time a match runs long is the thing directors actually dread. Three behaviours stop it.

Finals cluster
Every division's final — and optionally its semis — lands on the finals day on the championship courts. The engine reserves those slots before it knows who is in them: “winner of…” until it isn't.
One person, one court
Doubles partners are expanded to people, so the conflict check refuses to put the same human in two overlapping matches across every division — not just the same team registration in one.
Pins don't move
Pin the match the club president is playing in, or the one with the loaned show court. Placement fills in around it. No court is ever double-booked, and no match starts before its feeders finish.

Play windows, per day

Recurring day-of-week windows, specific-date overrides, and closures. An evening-plus-weekend club tournament over two weeks is something you describe, not something you fight.

Separation, per division

Honour a division's time-of-day preference, compress it to fit, or force it to run exclusively and never alongside another. Then bulk-reschedule, and every affected registrant gets old time, new time and a fresh calendar file.

03Scoring

Three ways a score reaches the bracket.

The people holding a clipboard on court six are volunteers. Two of these three paths never ask them to make an account.

01

Staff entry

Your directors and score-keepers enter results from the match page, gated on the record-results permission.

02

A link, one match

A match-scoped token is the whole authorisation. Whoever holds the link can score that one match and nothing else. Revocable, expiring, no sign-in.

03

The QR on the sheet

Every printed scoring sheet carries a QR that resolves by who scans it: a director lands on score entry, a player lands on their own match view.

Three engines, not one with three labels.

Pickleball, tennis and squash each have their own scoring engine — the same ones inside the CourtSauce apps. Squash runs PAR-11 and PAR-15; tennis has its final-set modes; squash conduct events travel from the match all the way into a standings tiebreaker.

Retire, forfeit, walkover.

First-class outcomes, not a note in a comment field. Corrections are recorded with an audit trail, and the correction email's subject line says it supersedes the one before it.

04Verification & disputes

A wrong score doesn't need a phone call.

Send a recorded score to its participants for confirmation and every named player has to confirm it. If someone disagrees, they raise it from their own match page.

What happens next

Lands in your queue
Disputes collect in one place, per tournament, with the match and both sides attached.
Upheld or dismissed
You resolve it either way. Both parties are emailed at each step, so nobody is chasing you for an answer.
The bracket follows
A corrected result cascades forward, and placements stay gated on a genuinely complete bracket — an unfinished draw cannot crown a champion.

05Partner finding

A logged-out visitor sees a count.

A solo entrant in a doubles division can opt in to being findable. What that exposes is deliberately less than you would expect.

Not signed in

“4 players looking for a partner in Mixed 4.0”

A number per division. No names, no attributes, nothing to scrape.

Signed in

First name, last initial

Plus only the attributes that division actually uses — rating always; gender if it is gendered or mixed; age if it is age-bracketed. Contact details never.

“Request to partner” opens a message thread. It is an ask, not an automatic pairing — a formal pair is a separate mutual step. Alongside it: subject-access data export, a retention policy, and report-and-block on every thread.

06Delegation

Stop being the only person who can change anything.

Seven permissions, granted two ways: to a member of your organisation, or to staff scoped to a single event. Same list, same enforcement, invited by email.

Manage courtsManage paymentsManage divisionsManage registrationsManage scheduleRecord resultsManage communications

Presets, so you don't design a role

Co-director, score-keeper, treasurer. Start from one and adjust.

Money and structure stay yours

Payment routes are owner and admin only. Inviting members, managing the organisation and deleting a competition are owner-only.

Every action is attributed

The organisation audit log records the delegate's own identity on their actions, not yours.

07Players & spectators

Everything they need, open.

Players get their own view of the event — my registration, my matches with the court and the time, calendar buttons for Apple and Google — reachable from an email link whether or not they ever made an account. Everything below is open too: one address per event, no sign-in behind any of it.

/e/…

The event page: divisions with live capacity, fees, find-a-partner, schedule, venue with a map, sponsors, announcements.

/live

Courts as cards with running scores, a live match count and an up-next rail, updating without a refresh.

/results

Results and standings per division, plus a CSV export.

/print

A print-optimised schedule with a QR back to the event page.

display

A wall display for the venue: your active courts in a grid, live matches mapped onto them, sponsors on the bottom rail.

og.png

A generated link preview, rendered server-side as a real raster so a shared event unfurls properly in a group chat.

And when it's over: results, a placement in their own history, and a full-screen page for whoever won it.

Your first tournament is free.

Set it up, run the readiness checklist, and publish when it says you're ready.

Create a tournament →

Or browse competitions near you.