Case study · Pablo Casanova
Predict./Compete./Win the glory.
A bilingual prediction-pool platform for the 2026 World Cup and four club leagues — played across the US and Mexico. Create a private pool, invite friends with a code, lock your picks, and let the whole thing score itself.
The 30-second version
For the recruiter scan — Situation, Task, Action, Result — the whole story compressed to what a hiring manager needs before deciding to read on.
Every tournament, friend groups across the US and Mexico run quinielas — prediction pools — over WhatsApp threads and spreadsheets. Scoring is manual, arguments are constant, and nothing is bilingual or live.
Design and ship a product that runs a private pool end-to-end for the 2026 World Cup and club leagues: create, invite, predict, auto-score, rank — with zero spreadsheet and zero manual admin.
Owned brand, UX and product; built a five-league architecture, a World Cup group-and-knockout prediction engine, automated score syncing, guest join, and Stripe entry fees — designing in the browser, pair-building with Claude Code.
A live product at quinielapool.com running real pools on both sides of the border — one at 14 members / $280 prize pool — scoring itself with no manual entry, in English and Spanish.
Traction
The pools that matter aren't demos — they're real friend groups in Seattle, Houston, Guadalajara and CDMX, each with a different organizer running their own competition.
| Pool | City | Organizer | Members | Prize pool |
|---|---|---|---|---|
| Seattle-VIP | Seattle · US | Pablo C. | 14 | $280 |
| Empire Quiniela | New York · US | Rene N. | 11 | $110 |
| 305 Fútbol | Miami · US | Alison R. | 13 | $130 |
| LA Norte | Los Angeles · US | Luis | 10 | $100 |
| Regios MTY | Monterrey · MX | Jorge R. | 8 | $80 |
| Oficina GDL | Guadalajara · MX | Julio L. | 12 | $120 |
| Caribe Cup | Cancún · MX | Gaby C. | 7 | $70 |
Representative sample of active pools across the 2026 season. Prize pools are peer-to-peer; QuinielaPool takes a flat $2 creation fee and none of the pot.
Set up our office pool in two minutes and never touched a spreadsheet again. Half my coworkers don't even have accounts — they just joined with the code.
The bracket where you predict the exact score is the part everyone fights about. Way more fun than the old WhatsApp thread.
Todo en español y en inglés, con los puntos calculados solos. Por fin dejé de ser el contador del grupo.
Organizer feedback, representative of the 2026 season.
The long version
The same story told the long way — five movements from the messy status quo to a product that runs itself.
The quiniela is a ritual. Someone opens a spreadsheet, everyone texts their scores for the round, and the organizer spends the tournament tallying points by hand and chasing entry money over Venmo. It works — barely — and it breaks the moment the group is bigger than a dinner table or speaks two languages.
2026 is different. The World Cup lands in North America — 48 teams, 104 matches, friends split across the US and Mexico. The spreadsheet won't survive it. The opportunity: give that ritual a real home — private pools, a code to join, live standings — without asking anyone to learn a new app.
The hard parts weren't the screens. A tournament is a moving state machine: fixtures shift, kickoffs drift, a knockout tie can't end in a draw. The football data API wouldn't reliably return World Cup fixtures, so the bracket had to be modeled in code. Picks had to lock per match at kickoff — but the whole knockout had to freeze the moment someone could peek at a result.
And identity: friends wouldn't all make accounts. A pool where half the members can't join is a dead pool.
Two decisions turned it from an app into a system. First, guest mode — join with just a name, no signup, so the organizer's least-technical uncle is in. Second, an automation loop that syncs scores, corrects schedule drift against two data sources, and validates every pool on a schedule — so the product runs the tournament instead of me running the product.
What came back to the group chat wasn't a spreadsheet link — it was a shareable pool with a leaderboard that updates itself, a World Cup bracket you fill out through to the Final, and a share card good enough to post. The ritual, intact. The admin, gone.
Problem
Three problems compound the moment a quiniela gets serious:
Admin doesn't scale. Hand-scoring one round for eight friends is fine. Doing it for a 14-person, entry-fee pool across a 104-match tournament is a part-time job nobody wants.
Access is a wall. Half of any real friend group won't create an account to enter a pool. Force a signup and the pool shrinks to the people who tolerate friction.
It only speaks one language. These groups are bilingual by default — a Seattle organizer, a Guadalajara cousin. A single-language tool quietly excludes half the table.
Solution
Six systems do the work the organizer used to do by hand.
Enter a pool with a name and a code — no account, no email. The creator signs in once; everyone else just plays.
Pick group winners, then a full knockout bracket: the advancing team and the 90-minute score, all the way to calling your Champion.
An orchestrator pulls live results, settles points, and updates every leaderboard — with a daily watchdog correcting kickoff and status drift against two data sources.
First pool free, then a flat $2 creation fee via Stripe. 100% of the pot pays out peer-to-peer, with clear paid / pending states per member.
Picks lock five minutes before kickoff; the whole knockout freezes at a commit deadline so no one edits after a result leaks.
Every pool and bracket generates a branded Open Graph card — the invite that actually gets tapped in a group chat.
The flagship flow
The knockout is where the tension lives, so it got the most design. You don't just pick who advances — you predict the 90-minute score of every tie from the Round of 32 to the Final, and call your Champion for a bonus. Semifinal and Final picks cascade from your own earlier calls, so the bracket always stays internally consistent.
Because the football API wouldn't return World Cup fixtures, the entire bracket — slots, rounds, scoring keys — is modeled in code and settled by hand-verifiable admin tools when a result is official.
How scoring works
A transparent points model rewards both the safe call and the bold one — the deeper the round and the more exact the score, the more it pays.
Every screen
The quiniela lives in the group chat, so the product is mobile-first and installs like an app. But running a pool wants room — so the same responsive build scales up to a full desktop dashboard. One codebase, tuned for both hands and both jobs.
Make picks from the group chat. Phone-first, thumb-friendly pickers, and an installable PWA — the way most people actually play.
The organizer's job wants a big screen: audit every member's picks, settle scores, and manage payments in a full dashboard.
Tools & systems
A prediction product is mostly the machinery you never see — creation, scoring, auditing, settling. Each tool below exists to remove a specific piece of manual work.
League → round → name → entry fee, in under a minute. A "$2 platform fee, 100% of the pot to players" note sits right where money decisions happen.
The organizer is the growth engine. If creating a pool is slow or the money model is murky, no pool gets made — and no friends get invited.
Every pool and bracket auto-generates a branded card built for the group chat — pool name, prize, and a "call your Champion" hook rendered server-side.
A pool grows by being shared. A bare link gets ignored; a card that looks like the product is the invite people actually tap.
One tap pulls live results from a sports data source and recalculates every leaderboard. When the feed can't answer — as it often couldn't for World Cup fixtures — a manual entry mode settles a score by hand and recalculates instantly.
Full automation is the goal, but a tournament won't wait for an API to cooperate. Pairing auto-sync with a trustworthy manual override meant results were never blocked on a third party — the pools kept scoring no matter what the feed did.
The creator's-eye view: every member's pick for every match in one grid, color-coded for advanced-correctly, exact score, or wrong. The bilingual, borderless spreadsheet the whole thing set out to replace.
Trust is the product. In a money pool, "how did you score that?" has to have an instant, visible answer — so nobody has to take the organizer's word for it.
Matches down the side, players across the top, a legend for advanced-correctly, exact 90′ score, and wrong advancer — the tournament graded at a glance.
Scoring rules only feel fair if you can see them applied. Encoding the result as color and symbol made a complex points model legible without a single number to squint at.
Points, paid / pending badges, one-tap "mark all paid," and a running pot total — the organizer's collections job, handled in the app.
Chasing entry money over text is the worst part of running a pool. Making paid-status a first-class, visible state took the awkwardness out of the money.
Decisions & why
The interesting design work here was in the rules, not the pixels. These are the decisions that shaped the product — and what each one was solving.
Members enter with a name and a code — no account, no email, no password.
The pool is only as good as who you can get into it. Every signup field is a friend who drops out. Guest mode traded a little identity rigor for a lot more of the table showing up.
World Cup slots, rounds and scoring keys live in the codebase, not in the sports API.
The data feed wouldn't reliably return World Cup fixtures. Owning the bracket in code meant the flagship feature couldn't be broken by a third party — and could be settled by hand the moment a result was official.
Picks lock 5 minutes before each kickoff; the entire knockout also freezes at a single commit deadline.
Per-match locks keep individual games fair, but a bracket you can edit late lets someone wait for a result to leak. The commit-lock closes that loophole for the whole knockout at once.
100% of the pot pays out between players; QuinielaPool charges a flat $2 to create a pool.
Taking a cut of the pot makes a friendly pool feel like a casino. A flat creation fee keeps the model honest and the incentives aligned with the organizer, not the house.
Every screen ships in Spanish and English, not as an afterthought toggle.
The audience is bilingual by nature — a US organizer, a Mexican cousin, one pool. Designing for both languages from the first screen was the difference between including the whole family and half of it.
A daily watchdog reconciles kickoff times and match status against two independent data sources.
Schedules drift and single sources lie. Cross-checking two feeds and auto-correcting drift meant nobody ever opened a pool to a match that had already kicked off with picks still open.
Previous versions & refinements
The product wasn't designed once — it was tuned against a live tournament. Each refinement shipped in response to something real: a friend who couldn't join, an API that wouldn't answer, a result that leaked.
The wordmark, the midnight-and-neon identity, and the first architecture: four leagues, pool creation, prediction flows, scoring.
Why Establish the product's world and prove the core loop before widening it.
Added a fifth competition and reworked the multi-league model so a new league is data, not a rewrite.
Why The pool shouldn't die after the final whistle — club leagues keep it alive year-round.
The turning point: match-aware auto-syncing across every league. Manual score entry retired as the default.
Why Hand-scoring doesn't scale to a real tournament — the product had to keep its own books.
A real landing page, name-only guest join to kill signup friction, Stripe entry fees, plus security rules, headers and legal pages.
Why Half the friend group wouldn't make accounts — guest join was the single biggest unlock for pool size.
The flagship: advancer + 90-minute score from RO32 to the Final, cascading SF/Final picks, a Champion bonus, and a commit-lock.
Why The knockout is where the drama lives — it deserved the deepest, and fairest, prediction mechanic.
Autonomous agents that correct kickoff/status drift against two data sources and audit every pool daily.
Why A live tournament breaks things quietly — the product had to catch drift before a user did.
Branded pool and bracket cards — the invite that gets tapped. The "Final Predictions" card became the product's calling card.
Why Growth happens in group chats — a link needed to look like something worth joining.
Instrumented real traffic as the tournament peaked — closing the loop from ship to measure.
Why You can't improve what you can't see — measurement was the last piece.
Then & now
The hardest refinements were invisible: a bracket that can't be gamed and a schedule that heals itself. Users never see them — they just never see it break.
Impact
The honest scorecard: real pools on both sides of the border, a backend doing real work, and a tournament that scores itself.
Role & skills
A solo, design-led 0→1 build. I owned the product from the brand down to the rules engine — designing in the real codebase and "vibe coding" the build with AI as an engineering partner.
Design & research
Design engineering · vibe coding
Product thinking
Reflection
Design the state, not just the screen. The best UI work here was deciding when things lock, cascade and heal. A prediction product is a rules engine wearing a nice interface; the rules were the design.
Friction is a feature you remove. Guest mode did more for the product than any visual polish — the pool is only as good as the people you can actually get into it.
Trust has to be visible. In a money pool, the audit grid and the scoring board mattered as much as the hero — people join when they can see the game is fair.
On how it was built. I led design and product and built it full-stack, pairing with Claude Code as an engineering partner. Designing in the real codebase — not just Figma — let the interface and the rules engine evolve together instead of fighting each other.
Built with
Also in the box
Let's talk
I lead UX/UI and product design — and build it, too. From research and brand through to shipped, self-running code. If you're hiring a product designer who can take it all the way, let's talk.
Enter the password to view the QuinielaPool work.