MyPickupSoccerManager
Who showed up first? Are these teams fair? Settled.
Live demo launching soon at kickoff.blaketrix.com

The problem
Every week at pickup soccer the same arguments happen. Who arrived first? Why is it always the same captains? Why are the teams so lopsided? It eats the first twenty minutes of every game.
What we built
An app that installs from the browser, no app store needed. Players check in at the pitch, the app splits fair teams, and the season table keeps itself.
Features
What it does
- 01
Check-in you can’t fake
Check in by scanning a QR code at the pitch or by being inside a geofence. Early and late arrivals get their own badges.
- 02
Fair teams in one tap
Unbiased randomisation, or an ELO-balanced snake draft when you want close games.
- 03
Random captains
Captains are drawn from the whole team, so it isn’t the same people every week.
- 04
Team tools
Move players, set positions, pick from 9 formations, then share the teams to WhatsApp or as an image.
- 05
Seasons & standings
Results go in and the full table (P, W, D, L, GF, GA, GD, Pts) calculates itself.
- 06
Live match mode
Match clock, halves and live score, with a banner on every page.
- 07
Player profiles
ELO ratings, career stats, MVP votes and 13 automatic achievement badges.
- 08
RSVP, weather & spectators
RSVP for upcoming matchdays, see the weather, and share a read-only page with fans.
Under the hood
The engineering decisions that matter
- Progressive Web App
- Node.js
- SQLite
- MySQL
- Service Worker
- 9
- pitch formations
- 13
- achievement badges
- K=32
- ELO player ratings
- Randomisation uses Fisher–Yates over crypto.getRandomValues() with rejection sampling, so teams are genuinely unbiased.
- Team saves run in transactions, and matches can only be finalised once, which stops duplicate ELO changes.
- SQLite by default with no setup, MySQL when it outgrows that, and a migration script between the two.
- Installable PWA with a service worker, plus frontend, visual and link tests.

