All work
Case studyWeb appLive, in active development

A box league app built for how Billingshurst actually plays

Billingshurst Tennis Club outgrew off-the-shelf league tools. So I built their own: players check their box and put scores in from the court, and admins run the whole season from one place.

Client
Billingshurst Tennis Club
My role
Design and build, start to finish
Platform
Web app for phone, tablet, desktop
Stack
React · Firebase · Netlify
Box league standings overview with matches played, fixtures still to play and a table for every box

160+

Club members with an account

5

Competitions: singles, doubles and mixed

2

Views: one for players, one for admins

Live

In use at the club and still growing

Box leagues are simple on paper. Put players in small groups, everyone plays everyone, then the top of each box moves up and the bottom moves down. Keeping that running for a whole club on spreadsheets, email chains and someone else's software is the hard part.

Billingshurst Tennis Club had tried the off-the-shelf route and kept hitting its limits. I designed and built them a web app of their own, shaped around how the club runs its seasons, and it is still growing as the club asks for more.

The screens on this page are from the latest version, running on a demo club with made-up players. No real member data is on show.

01 · The problem

Off-the-shelf tools ran out of road

A box league only works if the standings are current and everyone knows who they still have to play. The platforms the club tried could hold a table, but they locked Billingshurst into someone else's way of running a season.

1Admins had little control over boxes, seasons and the day-to-day running of a round.
2Someone else's roadmap decided what the club could and could not do.
3Spreadsheets and email filled the gaps. Fine for a season, not something to build on.
?Players still needed a simple answer to three questions: where do I stand, who do I owe a match, and where do I put my score?
02 · For players

From the court to the table in one form

Most scores go in on a phone straight after the match, so the player side is short and obvious. Here is a player's week.

Player view of their own box: next fixture, standings, a who-has-played-whom grid and their results

Player profiles

Every player gets a record worth checking

Tap any name to see how they are doing this round, built from the results already on record.

Played, won, lost, win rate, points and current streak
Match history with every set score
Head to head against everyone they have played
Player profile with played, won and lost totals, win rate, recent match history and head-to-head records
Player profile: the numbers people actually argue about at the club.

03 · For club admins

The whole season from one sidebar

Admins get a Manage section that members never see. It opens on what needs attention this round, and every tool a season needs is one click away.

Billingshurst box league admin dashboard showing 58 outstanding fixtures and links to score manager, boxes, members and competition settings
Manage: fixtures still outstanding up top, every admin tool underneath.

Boxes and players

Drag a player, and their record follows

Moving someone between boxes is a drag and drop. Their results move with them, so the tables stay honest. Members not in a box yet wait in their own searchable column.

Boxes and players screen where admins drag tennis players between league boxes

Score manager

Fix a result without breaking the table

Editing a score takes the old result off both players first, then applies the new one, so points, sets and net games are always worked out from scratch rather than patched.

Edit a result screen for a best-of-three tennis match, showing set scores and how the change affects both players

Build a box in six plain steps

Ladder position, promotion, format, players, dates, confirm. Adding a box never shuffles the others unless you say so.

Close a round in two steps

Finish the round to store it and move players up and down, then start the next with fresh fixtures.

Players fix their own results

With a clear before and after of what the edit changes, so admins aren't the bottleneck.

04 · History

Every round remembered

Finished rounds save themselves. Round history keeps the last ten tables, and the champions board keeps every box winner for good, so there is always an answer to who won Box 1 last spring.

Round history page with past seasons and final box tables showing promotion and relegation
Round history
Champions page listing box winners for each round, the current Box 1 champion and players with the most titles
Champions
Box league appearance settings with 14 colour themes, a contrast checker and a live standings preview
Appearance: themes, a contrast check for every pair, and a live preview.

05 · Make it yours

Each competition can wear its own colours

Admins pick from tested light and dark themes or set custom colours. Every text and background pair is checked against WCAG AA contrast before it can be saved, so the standings stay readable whatever the club chooses.

Baseline BlueMen's Singles

ClayLadies Singles

06 · Outcomes

One place for the whole club

Membership and league data live in one app instead of scattered lists and rigid third-party tools.
Players and admins work from the same standings and scores.
Branding, points and competition setup are admin settings, not hardcoded.
Still in active development, with updates as the club's needs change.

Ready for other clubs

Same product. Your club's colours.

This is a finished product, not a redesign from scratch for every enquiry. It can be rolled out for other tennis clubs with their own colours, logo and competitions.

Your roster, your seasons, your points system.Themes and logo set to match the club, checked for contrast.Updates keep coming, and every club on it benefits.
Talk to me about your club

Under the hood

Technical notes

ReactFirebase AuthFirestoreNetlify

A React front end with signed-in player and admin roles, hosted on Netlify. It is built phone-first for score entry after a match and roomy enough on desktop for running a season. Auth, roles and league state are treated as first-class, because those are the parts that usually break a quick spreadsheet replacement. Result edits recalculate from scratch, and finished rounds are stored automatically, so the numbers never drift.

Need an app that fits how you work?

Web and mobile apps from £450 at the 2026 rate. Fixed quote in writing, reply within one business day.