Overview
A complete league management system for an amateur volleyball league — teams, player rosters, fixtures, per-match score logging, automatic standings, and full play-off / play-out brackets with golden-set tie-breakers when scores and sets are level. Now in its third season, with two years of iterative improvements driven by league organisers.
Solution
Django backbone with PostgreSQL. Organisers log set-by-set scores after a match; the system recomputes standings, head-to-head, and promotion/relegation brackets in the same request. Teams, players, and fans see the same data within seconds.
Key features
- /01Team & roster CRUD
Add and edit rosters each season; rolling player history across seasons.
- /02Matchday score logging
Organisers type set-by-set scores; app computes winner, points, and MVP automatically.
- /03Live league table
Standings, head-to-head, and upcoming fixtures refresh the moment a match is logged.
- /04Play-off brackets
Full play-off and play-out trees with golden-set tie-breakers when sets are level.
- /05Season archive
Every past season stays browsable — a permanent record of every match, player, and MVP.
Tech & stack
Django + PostgreSQL. Bootstrap on the front — league organisers wanted the look they were used to, not a bespoke design. Deployed on the same VPS as the rest of the portfolio; dumps nightly to an off-box backup.




