⚡ 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
- github-actions
- node.js
- react
- tailwind-css
- typescript
- vercel
- vite
- vitest
- web-audio-api
Log in or sign up for Devpost to join the conversation.