DEV Community

Alan Maizon
Alan Maizon

Posted on

Beat the Oracle

June Solstice Game Jam Submission

This is a submission for the June Solstice Game Jam

What I Built

Beat the Oracle is a free-to-play World Cup 2026 prediction game where you go head-to-head with an algorithm.

An "Oracle" — a prediction engine built on 125 years of international football results — has already simulated the entire tournament. It rates all 48 teams, decides every match with a single probability formula, and runs the bracket thousands of times to estimate who lifts the trophy. It always backs the favourite.

Your job is to find where it's wrong. You predict the real 2026 group stage and knockouts yourself. Match the Oracle and you keep pace — but call an upset it never saw, and reality obeys you instead of the math, and you bank Defiance points the machine can't earn. The whole game is a duel between human intuition and cold expected value.

It connects to the jam through the World Cup itself — the June celebration the challenge calls out, running live (June 11–July 19) right through the jam window. The tournament reaches its turning point at the height of summer, and the game is about the moment an underdog refuses the position the numbers assigned it.

Deployed Live to Google Cloud Run

Code in GitHub

https://github.com/alanmaizon/beat-the-oracle

How I Built It

This started as my capstone for the Google Data Analytics certificate, then grew into a game.

The data. I worked from four datasets: historical World Cups, every World Cup match, player records, and an Elo rating series spanning 1901–2026. I cleaned and explored them in a Jupyter notebook (pandas) — and hit an interesting wall. The Elo dataset only contained the 48 teams that qualified for 2026, which made it useless for the historical question I'd started with (it silently dropped half of all past participants, including four-time champion Italy). But that limitation was the unlock: a dataset of exactly the 48 qualifiers is perfect for a game about this tournament. The "bias" became the feature.

The engine. Every team carries an Elo rating. One match is one formula:

P(A beats B) = 1 / (1 + 10^((Eloᴮ − Eloᴬ) / 400))

Hosts get a small home boost. From that primitive, three layers stack up: group tables come from a round-robin simulation with a draw-and-goals model; the knockout uses single-draw resolution; and pre-tournament title odds come from a Monte Carlo over the full 48-team bracket (the real format — 12 winners, 12 runners-up, 8 best third-place teams into a Round of 32). The whole thing runs client-side in plain JS.

The honest simplification. Knockout matchups are seeded by Elo for clean favourite-vs-underdog drama. The real 2026 bracket is seeded by group position via a fixed placement map. I traded a little fidelity for playability, and say so in-game.

Production. The deployed version runs on Firebase — Hosting, Google sign-in via Firebase Auth, and Firestore to store each player's locked prediction. Predictions and the Oracle both freeze at first kickoff so everyone forecasts before reality. A scheduled Cloud Function then polls live match results, maps them onto the bracket, and re-scores every player against the Oracle automatically — feeding a public leaderboard that fills in as the real tournament unfolds. I scaffolded and deployed it with the Antigravity CLI.

Prize Category

Best Google AI Usage. Two ways. First, the build itself: I used the Antigravity CLI (Gemini 3.5 Flash) to scaffold, refactor, and deploy the Firebase app — auth, Firestore, scheduled scoring functions, and hosting. Second, embedded in the product: each team's scouting report is generated by the Gemini API (gemini-3.5-flash) through a Cloud Function, with the key kept server-side and responses cached to keep it free. Gemini is both how it was made and a live feature inside it.

Best Ode to Alan Turing. The Oracle is the tribute. It's a transparent probability engine — Elo expectation plus Monte Carlo resolution — and the game frames you as the human trying to out-reason the machine. That's not a costume on top of the mechanics; it's the core loop. Turing, born this June in 1912, used sequential Bayesian methods at Bletchley Park to turn uncertainty into decisions under time pressure. Beat the Oracle is a small, playable argument about the same thing: where human judgement still beats the expected value, and where it doesn't.

Thanks for reading — now go beat the Oracle.

Top comments (0)