Pronos WM 26
A World Cup prediction game for family and friends — because the big tool works, but its UX is painful.
- Role
- Product Owner, Designer & Developer (solo)
- Team
- Solo, AI-assisted (Claude Code)
- Context
- Personal product, real users
- Tools
- Next.js, Supabase, Vercel, Web Push, TypeScript

For the 2026 World Cup my family and friends wanted a prediction game. The established tool works, but its interface frustrated us. So I built our own: invite-only leagues, predictions locked at kickoff, a live leaderboard, knockout bracket and a trash-talk chat — mobile-first, in three languages, and run live throughout the tournament.
The problem
The users were clear: my family and friends — many of them not tech-savvy, across French- and German-speaking households. The job was simple: predict every match, see who's winning, tease each other. The existing tool did the job, but signing up, entering tips and following the table felt like work.
Design principles
- No friction to join. Invite code + nickname + PIN instead of email and passwords. Nobody's grandmother should need a password reset.
- Fair by design. Predictions lock at kickoff — enforced on the server, not just hidden in the UI — and everyone's picks stay secret until then.
- Fun is a feature. The game lives from the social layer: rankings, streaks, duels and banter.
What I built
- Predictions with auto-save, a kickoff countdown and server-side locking.
- Live leaderboard with rank changes, streaks, badges and a podium; a head-to-head duel view.
- Knockout bracket that resolves placeholder teams automatically.
- Multiple leagues with their own invite codes and a real-time chat per league.
- Engagement loop: installable PWA, a daily push reminder for open predictions, and a shareable standings image.
- Three languages (FR / DE / EN) — the group spoke all of them.

Running it live
The real test started with the tournament. Building for a live event meant planning for things going wrong:
- Resilient data: a free open dataset as the baseline, a live-score API as an optional overlay, and manual admin entry as a safety net — manual results always win over automated sync.
- Fixes under real load: pagination around database row limits, sync timeouts, a privacy fix so chats never leak between leagues, and rate-limiting on logins.
- Scope cuts during the event: a rank sparkline was removed again on user feedback; the duel view stayed.

Outcome
The game ran through the whole tournament for my family and friends, and the LinkedIn post about it reached over 1,400 impressions.
What I learned
Building for people you know is the fastest feedback loop there is — you hear about every bug at dinner. It taught me to prioritise trust and reliability over feature count, and to ship, watch and adjust while the product is in use.