milan44.dev
← back to work

Solo product · gamescore.cards

GameScore

A production PWA for tracking board-game scores: offline-first, fast, and built around a catalogue of 100,000+ BoardGameGeek titles — with a paid Pro tier. Designed, built, shipped and operated solo, with Claude Code as the force multiplier.

100k+
BGG titles indexed
Offline
first architecture
Solo
design → ship → operate
Pro
paid tier shipped

The problem

Board-game groups keep score on scraps of paper and half-broken apps. The good ones assume you're always online; the offline ones can't find your game. I wanted something that loads instantly at a kitchen table with no signal, knows essentially every game in print, and turns a finished match into something worth sharing.

Constraints that shaped the build

  • Offline-first is non-negotiable — scoring happens where Wi-Fi isn't. State lives locally and syncs opportunistically.
  • 100,000+ titles from BoardGameGeek have to be searchable instantly on a phone, without shipping a giant payload or hammering an API mid-game.
  • It's a solo project with a real cost ceiling — the infrastructure had to be cheap to run and near-zero to operate.
  • A paid Pro tier means real payments, entitlement checks and a feature boundary that can't leak.

Key decisions

I built on Nuxt 3 for a single TypeScript codebase across rendering and routing, with Pinia for predictable state. The offline core is Dexie over IndexedDB: matches, players and game metadata are local-first, so the UI never blocks on the network. The BGG catalogue is indexed for fast client-side lookup rather than a live API call on every keystroke.

The backend runs entirely on Cloudflare Workers with D1 and R2 — edge-close, inexpensive, and operationally quiet. The Pro tier is gated by server-verified entitlements so the boundary holds even though the app is offline-capable. Sharable Victory Cards turn a completed game into a designed artifact people actually post.

Architecture at a glance

  • Client: Nuxt 3 PWA, installable, with a service worker for offline shell + assets.
  • Local data: Dexie/IndexedDB as the source of truth for in-progress and historical games.
  • Catalogue: 100k+ BGG titles indexed for instant on-device search.
  • Edge: Cloudflare Workers for API, D1 for relational data, R2 for generated Victory Card assets.
  • Monetization: Pro entitlements verified server-side; premium features fenced behind that check.

Where the AI workflow earned its keep

GameScore is the clearest proof of the workflow I write about: a single engineer carrying design, frontend, edge backend, data modelling and ops. Claude Code, driven by the context-engineering and agentic-orchestration setup I publish in claude-setup, is what made that scope tractable solo — planning loops for features, AI-assisted refactors with guardrails, and a typed memory system so the model kept the thread across long sessions.

Outcome

A live, production PWA with a paid tier — shipped and operated by one person. It's the answer to the only question that matters in an interview: can you take something from nothing to in-production, end to end? Here it is, and you can click it.