MegaSquad
Multi-sport pick’ems for your friend group. Ten leagues across five sports, picks that auto-lock at tip-off, and standings that settle the trash talk. I built the front end; my brother built the API.
- 10
- Leagues supported five sports
- 18
- Roster components across 40 files
- 76.19%
- Best bracket 48–15, NCAAM
- 30 s
- Poll interval idle after 5 min
The group chat is a bad database
Every friend group already runs a pick’em. It lives in a group chat, the scoring is done from memory, and someone always claims they had the upset. MegaSquad is that, with a source of truth — squads, leagues, weekly picks that lock the moment a game starts, and standings nobody can argue with.


Showing you how your bracket fell apart
A record of 48–15 tells you almost nothing. The interesting question is where it went wrong. So standings expand into a per-round breakdown, and each round shows the actual team logos you picked, badged correct or incorrect.
Round 1 at 26–6. Round 2 at 11–5. Then the Sweet 16 goes 4–4, and you can see exactly which four teams did it.


None of those numbers are stored twice. The record, the win percentage, the per-round tallies, and the completed-game count all derive from the same picks — which is why they reconcile exactly, and why they cannot drift apart.
Every settled pick answers back
Getting a pick right returns “Bullseye!”, or “Nailed It!”, or “A Prophet!” Getting one wrong returns “Narp.”, “Whiff.”, or “Gross, dude.” State is encoded three ways at once — border color, a result pill, and the score — so an entire week reads without parsing anything.


All three signals survive the narrow layout. The schedule has exactly one breakpoint, so every phone width takes the same path — the card stacks, and the pill keeps its place.


When no league is in season, a dejected squid offers sports trivia instead. It is the kind of thing nobody asks for in a spec.


Two languages, one product
The API is my brother’s, in Python. That makes the front end a consumer of a contract it does not control, which is its own discipline: the app polls invitations every 30 seconds but stops after five minutes of inactivity, so a tab left open for three days is not quietly hammering his server.