Back to Projects
17-0 Showdown
Software / Game

17-0 Showdown Online Browser Game

June 2026

What is it?

17-0 Showdown is a full-stack NFL fantasy draft game built entirely in the browser. You assemble a squad of 22 historical players — spanning every era from the 1970s through the 2020s — and simulate a complete 17-game NFL regular season. The simulation engine runs client-side using a seeded deterministic LCG (linear congruential generator), meaning every result is reproducible given the same seed. Player OVR ratings are derived from real historical stats: QB completion %, yards per attempt, and sack rate; RB yards per carry and breakaway run %; WR catch rate and yards per route run; DB coverage grade and sack total. Over 70,000 players have logged games since launch.

Why I built it

I wanted to build a polished, multiplayer-capable game could be built without a game engine — just React, a Postgres database, and a CDN. The popular 82-0 based around the NBA came out recently and I wanted to hop on the trend and create an NFL version. I also wanted to outperform big companies like Sleeper by having a larger player base and more features for the user to enjoy!

Key Features

Era Draft

Pick players from the 1970s through the 2020s — Brady, Rice, Dickerson, Lawrence Taylor, and hundreds more.

Blind Mode

Draft without seeing stats or OVR ratings. Pure football instinct — and a separate, harder leaderboard tier.

Season Simulation

Your squad plays a full 17-game NFL schedule, simulated in milliseconds with game-by-game box scores.

Daily Challenges

Hand-curated themed challenges with era restrictions, conference rules, and a scoring system that rewards creative constraint-satisfaction.

Online Multiplayer

Draft against a real opponent in real time. Both clients simulate the series independently from the same seed — no server-side sim required.

Global Leaderboard

Submit your season record and OVR. Filter by era, mode (Casual / Pro), blind vs. stats, and time period. Row-level security keeps data clean.

Under the Hood

The actual architecture decisions — not marketing copy.

Frontend

React 18 + Vite SPA on Vercel's edge network. Zero-config CDN caching; assets served from ~30ms globally.

Backend

Single Supabase project: PostgreSQL + PostgREST + Realtime.

Sim Engine

Runs entirely client-side in the main thread. A 17-game season completes in under 50ms on any device.

Deterministic simulation

The entire match is derived from a single integer seed. No server-side sim. No result sync. Both clients reach the same scoreline independently.

javascript
// Seeded LCG — same seed always produces the same game
function seededRng(seed) {
  let s = seed;
  return () => {
    s = (s * 1664525 + 1013904223) & 0xffffffff;
    return (s >>> 0) / 0xffffffff;
  };
}

function simulateGame(homeTeam, awayTeam, seed) {
  const rng = seededRng(seed);
  // Each play call advances the RNG deterministically.
  // Both clients run identical logic — no server-side
  // simulation needed, no result sync over the wire.
}

Matchmaking without race conditions

The try_claim_match RPC uses FOR UPDATE SKIP LOCKED — a PostgreSQL advisory lock that lets multiple clients search concurrently without stepping on each other. The first client to acquire the lock claims the match; all others skip and retry. No queue service, no distributed lock manager.

sql
-- PostgreSQL advisory lock prevents race conditions.
-- Multiple clients search for open matches concurrently;
-- the first to acquire the lock claims it, others skip.
SELECT * FROM online_matches
WHERE status = 'waiting'
  AND mode = p_mode
FOR UPDATE SKIP LOCKED
LIMIT 1;

Real-time with Supabase

Supabase Realtime streams Postgres change events over WebSocket. When player 1 finalises picks, the match row updates and player 2's subscription fires instantly. Row-level security policies ensure each client can only read rows it owns or participates in. A REST poll fallback (every 8 s) catches missed WebSocket events on flaky connections — the online game never gets stuck.

Tech Stack

⚛️React 18 + Vite
⚡Supabase Realtime
🔒PostgreSQL RLS
🌐Vercel Edge
🎨CSS Modules
🧵Web Workers

Play it live

Can you go 17-0?

Play 17-0 Showdown