Game client
Next.js, React, and TypeScript with drafting and simulation running locally in the browser
I built PLAYGRND Draft as a fast football game for short mobile sessions: spin an iconic national-team tournament squad, draft an all-time XI by position, simulate the tournament, and share the result.
Interactive product case study
Football draft games are easy to overbuild. The core experience needs enough recognizable players and simulation depth to feel meaningful, but every login, network request, asset dependency, or long setup step makes a casual session less likely to finish. The product had to feel immediate while keeping sharing and aggregate learning available as optional layers.
Product loop
System shape
Next.js, React, and TypeScript with drafting and simulation running locally in the browser
Curated tournament squads and independent ratings shipped with the application bundle
Seeded, reproducible tournament runs covering group and knockout stages
Compact saved runs behind short IDs, with local share text as the failure fallback
Optional Postgres-backed counters published as a static snapshot outside the gameplay path
Static release directories on Hetzner behind Caddy, with the optional API managed separately
Engineering judgment
Starting, drafting, simulating, and seeing a result must keep working if the share and stats API is unavailable.
The first version favors iconic tournament capsules so most spins create an understandable football decision rather than a history quiz.
A seed and the selected XI are enough to reproduce a run, which keeps the simulation testable and makes compact sharing possible.
The fan-made game avoids official logos, player photos, trophy imagery, and claims of affiliation while keeping names and tournament facts descriptive.
Current proof
Next proof
The next useful work is learning from completed runs: tune squad variety and simulation balance, improve the moments people want to share, and add backend features only when they strengthen that loop without slowing it down.