Web Applications
Sunday League Fixtures
Built by Reymart Dalisay
A fixtures and standings site for the weekend basketball league I help organise, replacing a group chat and a spreadsheet.
Builder email verified
Verification

- Type
- Personal
- Category
- Web Applications
- Published
- Jul 25, 2026
- Updated
- Jul 25, 2026
About this project
- What I built & why
I've helped run a recreational basketball league for about five years, and for four of those the schedule lived in a spreadsheet that one person edited and pasted into a group chat every Thursday. Every week somebody turned up at the wrong court. I kept saying I'd build something and kept not doing it, until a rained-out season with three reschedules made it genuinely painful. I built it over about six weekends, mostly to stop being the person who complains without fixing anything.
- The problem
It solves the specific mess of an amateur league: fixtures change, courts get reassigned, and the people who need to know are twelve team captains who read a group chat at different times. The site holds the schedule, standings and results, and each team has a link with just their own fixtures. It's for the captains and their players — maybe two hundred people who don't want an app and won't make an account. There's no login for players at all; only the two of us who organise it can edit, and everyone else just reads a URL.
- What I owned
All of it. I did the data model, the SvelteKit app, the standings calculation including the tiebreakers our league actually uses, and the deployment. I also did the design, which shows — a friend who does this properly redid the typography and colour and the difference was embarrassing. I write the seasons in myself each January and I've handed the results-entry screen to the other organiser, who now enters scores from the courtside without me.
- Technical & product decisions
I built it as a static site regenerated on edit rather than a dynamic application, because it's read constantly by people on poor mobile connections at a gym and written maybe twice a week. That meant SQLite as the source of truth and a rebuild on save, deployed to Cloudflare Pages, and the running cost is nothing. I also decided against notifications, which was the first thing everyone asked for. A league of two hundred people did not need me operating a push notification system; the group chat already exists and now it links to a page that's actually correct.
- Hardest challenge
The standings were harder than anything else, which I didn't expect. Our league's tiebreakers are head-to-head, then point difference in games between the tied teams only, then total point difference, and with three-way ties the rules our commissioner had in his head weren't self-consistent. I had to sit down with him and work out what he actually meant in the ambiguous cases, then write it down as rules with tests before I could implement it. Writing the tests was how we discovered two past seasons had been ranked wrong.
- Result & impact
Nobody has turned up at the wrong court in two seasons, which was the whole point. The other organiser stopped needing me to publish the schedule, which halved the number of Thursdays I think about basketball administration. A neighbouring league asked to use it and I gave them the code rather than running it for them, since I have no interest in operating a service for strangers. Two past seasons' standings quietly got corrected, and only one person noticed.
- Who else worked on it
The other organiser is the reason it's still running — he enters every result and he was the one who told me the results screen was unusable on a phone in a bright gym, which led to a redesign. Our league commissioner sat with me for an evening to pin down the tiebreaker rules, which turned out to be a harder conversation than a coding session. A friend who designs for a living spent about two hours fixing my typography and colour and refused to be paid for it. Twelve team captains have complained at me about various things, and roughly half of those complaints were fair.