projects
WC Sweepstake: the office draw, rebuilt as an app
A mobile-first PWA for friend groups and work teams. A fair seeded draw, live points, and a leaderboard that ran for the whole 2026 World Cup.

- Role
- Solo: design and build
- When
- 2026-06 · Shipped before kick-off
- Tools
- Claude Code, React, Vite, Supabase, Vercel
- AI
- Claude Code, planning docs as prompts
The brief I gave myself
Ship before kick-off. A fixed deadline, a real audience and no second chances.
A World Cup sweepstake usually lives in a spreadsheet and a group chat. Someone draws names from a hat, someone else keeps the scores, and by the knockouts nobody remembers who has Morocco. I wanted the draw to feel fair, the points to update themselves, and the leaderboard to be the thing people opened between matches.
What it does
- Leagues with a PIN. An organiser sets up a league from the admin panel, and friends join with a four-letter code.
- A seeded draw. The 48 teams are split into pots by FIFA ranking, and every player gets one team from each pot. Nobody walks away with only outsiders.
- Live points. Scores come in automatically. Every result shows exactly where your points came from.
- Pick Your Winner. A side bet on who lifts the trophy, locked at kick-off.


Rules people actually read
The scoring is the whole game, so it opens in plain language on your first visit and stays one tap away in the header. Bonus points are spelled out as per game and stackable, so nobody expects them only once.

What I learned
- The home screen is its own platform. Installed on an iPhone, the bottom navigation drifted, bounced and left gaps above the home indicator. It took about ten releases of layout fixes before one pattern held on every device.
- Free data comes with a ceiling. Live scores started on a free API with a daily request cap. I switched to a different source before kick-off, and scores now update on a schedule.
- Real groups aren't a tidy size. I rebuilt the draw for leagues of 16 players (three teams each) or 24 players (two each), so the pots stay fair either way.