Running your league

For owners, box admins, and players — plus how the live demo works.

Three roles, one site: the league owner sets up seasons and boxes and can do anything; a box admin runs one box's roster and scores; a player just enters and confirms their own matches. There's also a separate, much simpler solo tracker for anyone who wants one box with no logins at all — see the end of this page.

Put it on your phone

Do this before you sign in — it's what stops iPhone Safari quietly signing you back out.

! If you only ever open this as a browser tab on an iPhone, iOS can clear your sign-in after about a week of not visiting — you'd just need to tap your box or invite link again, nothing is lost, but it's one less thing to think about. Adding it to your home screen stops that. Fifteen seconds.
iPhone / iPad
  1. Open the site link in Safari. It has to be Safari — Chrome on iOS cannot install it. And if you tapped the link in WhatsApp, you are in its built-in browser: tap the share or menu and choose Open in Safari first.
  2. Tap the Share button — the square with an arrow coming out of the top.
  3. Scroll down the list and tap Add to Home Screen.
  4. Tap Add. The icon appears with your other apps.
  5. Open it from that icon from now on, and sign in from inside it — the installed app keeps hold of your sign-in far better than a browser tab does.
Android
  1. Open the site link in Chrome. If you tapped it in WhatsApp, tap the menu and choose Open in Chrome first — the built-in browser cannot install apps.
  2. Either tap the Add to home screen button in the site's own toolbar, or use Chrome's menu → Add to Home screen / Install app.
  3. Confirm. The icon appears in your app drawer.
Windows / Mac computer
  1. Open the link in Chrome or Edge.
  2. Click the install icon in the address bar — a small screen with a downward arrow, at the right-hand end. Or use the menu → Cast, save and shareInstall page as app.
  3. It opens in its own window and pins to your taskbar or dock.

On Safari for Mac: FileAdd to Dock. A plain bookmark works fine on a computer too — the week-long expiry is an iPhone problem.

Signed in already and not installed? There's a banner offering to walk you through this any time — tap How on it.

Who does what

Everything else on this page makes more sense once these three are straight.

None of this needs a password, ever. Owners and box admins sign in with an emailed link; players sign in by tapping their name from a link posted in their box's WhatsApp group.

i A league owner can turn player self-entry off entirely (Settings → Players can enter their own scores). With that off, the whole site — including every box, standings and history — is just publicly viewable, with nothing to sign in to.

Signing in

Different for each role — none of it needs a password.

Owners and box admins

Tap sign in and enter your email. If that address has been made an owner or box admin, a one-time link arrives within seconds, valid for 15 minutes. No account exists until someone invites you this way — there's no self-serve sign-up for these roles.

Been invited but never got the email? Check spam, and check it's the exact address you were invited with — the league owner can see and resend from the People screen.

Players

Your box admin posts one link per box in the WhatsApp group — the same link all season. Tap it, tap your own name from the list, and you're in on that device. If you get signed out later, tap the same link again; it still works.

Opened the link inside WhatsApp's own browser? You'll see a warning — sign-ins made there often don't stick. Use the menu to open it in Safari or Chrome first, then claim your name there.

Moving to a second device

Signed in already and need the same account on another phone or a laptop? Use Use on another device in the tools row — it copies a one-hour, one-time link. Open it on the new device within the hour and it signs that device in as you, no re-claiming needed.

Sessions otherwise last about six months before you'd need to sign in again the normal way.

Running the league (owners)

Everything here lives behind the League console button, owner-only.

Seasons

New season — name, start/end dates, how many boxes, a match format, and the points for a win / a loss with a set / a loss with none / an unplayed match (see Points & format). It starts as a draft — roster the boxes (yourself, or hand boxes to admins), then hit Go live. An archived season stays viewable forever; Reopen brings it back if you archived too early.

Roll over builds next season from this one's final standings, using the "promoted/relegated per box" numbers in Settings: the top few go up, the bottom few go down, everyone else stays. Box 1 only sends players down and the bottom box only sends them up.

It arrives as a plan, not a decision. Drag players between boxes or tap a name to move it, add anyone who has joined, and sit out anyone who is away. Before you commit it tells you what it noticed: matches still unplayed, someone going down who never played a match, and if two players finished level on points at the promotion cut, which tie-break separated them. Once you have moved somebody it stops re-proposing over your work, so changing the up/down numbers is an explicit Re-propose. The new season is created as a draft for you to check, then take live.

People

Invite owners, box admins (assigned to specific box numbers), or generate a player link for a box. Owner and box-admin invites can go by email (their address becomes their permanent sign-in from then on) or as a plain link if you'd rather hand it over yourself — a link-only admin invite has no self-recovery if they lose it, since there's no email attached.

From here you can also see who's claimed which player slot, sign out someone's devices without removing them, revoke anyone outright, and rotate a box's player link if it's leaked or the season's moved on (existing signed-in players are unaffected — only the link itself changes).

Members, History & Snapshot

Members is your master player list across every season — rename someone, or merge two entries if the same person was added twice under slightly different spellings (their whole history moves with the merge).

History shows every score ever entered in a box, including corrections and anything cleared — cleared scores are never really gone, and only the owner can Restore one.

Snapshot, in the tools row, downloads the entire league — every season, box, player and result — as one JSON file. Worth doing now and then as your own backup.

Enter a score

The bit that happens most often.

  1. Tap the cell where the two players cross on the sheet, or a row in Results to correct one already entered.
  2. Type the set scores, from the left-hand player's side — the initials above each column say which is which. How many sets you're asked for depends on this season's format (see Points & format).
  3. Extra boxes appear when needed. Enter a set as 7-6 and an optional tiebreak-loser's-points box appears. Split one set each in a two-set format and a championship tiebreak becomes required, because otherwise nobody's won.
  4. Check the panel at the bottom — it spells out who won and what each player gets before you save.
  5. Save score.

If it queries your score

An unusual score — 8-6, say — tints amber with a note. It does not stop you; save it anyway if that's genuinely what happened. The only things that actually block saving are a set tied at the same score, or a two-set format left at one set all with no championship tiebreak entered — in both cases there's truly no winner yet.

If a player enters it

A box admin's entry is final immediately. A player's own entry goes in as pending until their opponent confirms it — or it confirms itself automatically after a few days if nobody objects (the league owner sets how many, default 3). Either player can also correct an already-confirmed score themselves; the old score stands until the opponent confirms the change.

Read the tables

Several views of the same box.

The Sheet

Every pairing in the box at a glance. Each row reads from that player's side, so their wins are green and their defeats are red or amber. Every match shows up twice — once in each player's row — but it's one fixture underneath. A diagonal-striped cell awaiting confirmation, and the blocked-out diagonal is where a player would meet themselves.

On a phone the grid scrolls sideways and the names stay pinned to the left edge.

Standings

Bonus set counts matches lost after winning a set. Ties are settled by head to head first, then set difference, then game difference. Pending scores don't count until confirmed. Games and Sets columns are hidden on a phone; tap a player's name for the detail, or turn a laptop on it. Copy as image renders the table as a picture, ready to paste straight into WhatsApp.

Still to play

Sorted by who owes the most matches. Tap a player to see exactly who they still have to play — tap one of their opponents and it opens the score form for that match directly. Usually the fastest way in: someone posts a result in the group, tap their name, tap their opponent, type the score.

Results

Newest-first log of every confirmed and pending score. Pending rows carry a Confirm/Reject pair right there for whoever's entitled to act on them — the opponent, or a box admin.

Points & format

Both are set per season by the owner — what's below is the usual default.

ResultPoints
Won the match3
Lost the match but won a set2
Lost without winning a set1
Did not play the match0

The exact numbers for the season you're viewing are always spelled out in the Standings footer, since an owner can change them when creating a season.

Match formats on offer

A recorded tiebreak set shows in proper notation, e.g. 7-6(5).

Trying the live demo

If you landed here from the demo site, this is the section for you.

The demo is a public, shared sandbox league — real functionality, fake data, no setup. A banner across the top offers Try as owner, Try as box admin, and Try as player: tap any of them and you're signed in as that pre-made person, immediately, with no email and nothing to type. Switch role replaces those buttons once you're signed in, so you can hop between perspectives.

Convinced? Deploying your own real, private league takes about the same infrastructure as the demo, just pointed at your own database — see the project's README for that.

The solo tracker

A separate, much simpler mode — one box, no server, no logins.

Just track one box on this device, on the site's start screen, opens it. It's the original single-box tracker: type in your players, it builds every fixture for you, and you score matches the same way described above — but there's no owner, no invites, and nothing to sign in to.

! Its data lives only in this browser, on this device — not on a server, and not shared with the main league site. One admin, one device, per box. Clearing your browsing data (or, on some phones, deleting the home-screen icon) deletes it. Export backup downloads a file with everything in it — do that regularly, and always before clearing scores or switching phones; Import backup reads it back in, which is also how you move to a new device.

Open the solo tracker Open the tracker