⚡ EDGE: Deadline Day

FPL‑EDGE helped managers decide. Now you beat the algorithm. EDGE: Deadline Day turns the methodology of a professional Fantasy Premier League analytics dashboard — weighted composite scoring, fixture heatmaps, transfer recommendations — into a high‑stakes browser game. The dashboard isn't your tool anymore. It's your opponent. Built in 5 days for the BTT Webv Game Jam.

🎮 What it does

You are the manager on deadline day. Across 3 gameweeks, you must outscore the average manager: Draft 5 players within a strict budget (1 GKP · 1 DEF · 2 MID · 1 FWD) — click, search, or press 1–9. Hand over the armband — your captain scores ×2 and their card turns into a gold‑engraved honor plate. Simulate — a seeded match engine plays the week in milliseconds and explains every point: goals, assists, clean sheets, saves, captain double. Survive the season — injuries ("Doubt" tags), shifting fixture difficulty on a 5‑week lookahead, and a GW3 underdog ×1.25 bonus that keeps comebacks alive. The EDGE Assistant is your pro co‑pilot: captain picks with model confidence %, transfer tips that complete your squad before they get clever (it never lies), an Injury Watch that suggests affordable cover, and an expected‑points projection graded ELITE / SOLID / RISKY against the average manager.

🧠 The EDGE model

Unlike additive scores, EDGE uses percentile normalization per component, then min‑max scales the composite so colors always mean something: Component Weight Source
Form 40% Recency performance Fixture 30% inverse FDR (1 easy – 5 hard) Attack 30% xG×3 + xA×2 + xS×0.4 Player data is live from the official FPL API, synced at build time by a Node script that maps 700+ real players into the game's typed Player model.

🏗 How I built it

100% client‑side Vite + React + TypeScript (strict mode) — no backend, so nothing can go down during judging. Strict unidirectional architecture: data/ (players) → lib/ (pure scoring + seeded simulation) → hooks/useGame (the referee) → components/ (dumb UI). Seeded RNG (mulberry32) — every gameweek is reproducible; ?seed= forces custom luck for demos and tests. 18 Vitest invariants guard the balance: budgets always winnable, assistant never lies, captain math exact, projection ≈ simulation average (Monte‑Carlo checked). Web Audio API synthesizes every sound — zero audio assets. GitHub Actions CI runs typecheck + lint + tests + build on every push. Triple deployment: Vercel (primary), itch.io (embedded), GitHub Pages (fallback). Design system: Chakra Petch display + Inter body + JetBrains Mono numerals on a neon‑on‑dark palette; broadcast‑grade typography; gold‑engraved captain theme.

⚔️ Challenges I ran into

CORS: browsers block the FPL API → solved with a build‑time sync script (live data, zero runtime requests). Score inflation: additive formulas cluster at the top → percentile + min‑max normalization guarantees red→green spread. Pre‑season degenerate data (all zeros in August) → adaptive scale + data‑agnostic tests that pass in any week of any season. Duplicate player IDs (three "Henderson"s!) broke React keys and search → IDs now combine slug + FPL numeric id, plus a dedupe guard on import. Scope discipline: a hard 5‑day cut list (MoSCoW) kept the ship date sacred.

🎓 What I learned

Game feel is engineering: count‑ups, shake feedback, spotlight onboarding and an honest assistant matter more than raw features. And a tested pure‑logic core makes a game jam feel calm instead of chaotic.

🚀 What's next

Head‑to‑head async leagues (ghost squads), real xG from a stats API, and a differential‑ownership meta for GW3. Play it now — free in your browser: https://game2jam1.itch.io/edgedeadline-day Source: https://github.com/1Prasanna2/edge-deadline AI disclosure: AI coding assistant used for guidance and code review (per jam rules); all game logic, balance and design decisions are human‑verified and fully tested.

Built With

Share this project:

Updates

Submission history