A side project with my brother James, who has run rec leagues. Most league software is either a spreadsheet or something sold with a demo call and a per-player fee. This aims at the middle.
What's built
- The domain: league, season, division, team and player, plus fields and games.
- A scheduler: round-robin within each division, packed into a grid of fields and time slots, with no team or field ever double-booked. The demo seed lays out a 30-team, 5-field season without conflicts.
- Standings, derived on the fly: 3 points for a win, 1 for a draw, tie-broken by goal difference and then goals for.
- Real operations: player rosters and public registration, a reschedule flow for rained-out games, referee scheduling with date availability, shortages flagged on the schedule, and assignment emails.
- A public page per league, with schedule and standings and no login.
How it's built
Vanilla Rails 8, the "what would DHH do" way: Hotwire, importmaps, SQLite, the Solid trio, Minitest with fixtures, plain semantic CSS. No Node, no Redis, no React. System tests drive a real browser with Playwright.
It started from a written market survey and an MVP scope, both in the repo, and the build followed that scope feature by feature.