No. 01 · Shipped · Multi-tenant platform
Advantage Sports
A league-operations platform built from scratch for youth sports: registrations, payments, scheduling, team formation, standings, and communications, now opening from one flag-football league to more than one operator.
The league was stuck on a platform that goes end-of-life in fall 2026 and nothing off the shelf fit. So I built what should have existed. It started as League-OS running a single league; the rebrand to Advantage Sports opens the same platform to other operators.
The interesting part
Most of it is boring CRUD done carefully. Two pieces are not. Cash and paper checks still dominate youth sports, so the app turns a photo of a check into a posted payment: the browser writes the PDF straight to cloud storage, a containerized service renders it to images, and a job engine in Postgres chains each step through a serverless route so no invocation outlives its 60-second cap. Lease-based serialization stops two workers from grabbing the same job.
The other piece is team formation. Sorting hundreds of kids into fair teams used to be a weekend of spreadsheets and hurt feelings, so I wrote a real solver: a greedy first pass, then simulated annealing against weighted hard rules and soft preferences. It balances grades, quarterback counts and how many kids come from each school, honors teammate-together and do-not-pair requests, keeps coaches near players they know, and makes sure every kid recognizes at least one face on their roster. It produces a few proposals with plain-English narration of the tradeoffs, and nothing goes live until a human accepts one.


SpecNo. 01
- Status
- Live · shipping
- Serving
- 1,500 families
- Stack
- Next.js · Drizzle · Neon
- Payments
- Stripe · check imaging
- Season registration with integrated payments
- Automated team formation and roster balancing
- Public season pages derived from live status
- Email blasts with separately unsubscribable lanes
- Schedules, standings, and a family comms hub







