Back to Work

Case study

ChessIQ

Review your games with Stockfish in the browser, then train from what you missed.

Built for repeated post-game use: fast first feedback, deeper analysis over time, and training generated from your own positions.

ChessIQ browser-native analysis interface showing board review, move feedback, and training context

Product capture showing the study surface: board-first review, engine-backed feedback, and the handoff toward training from real missed positions.

Problem

Most chess apps optimize for play, content feeds, or subscriptions. I wanted a focused post-game review loop that holds up under repeated use.

Who it is for

Players who care about improving through their own games, not generic puzzles detached from recent mistakes.

What I built

A browser-native analysis workflow: import games, get progressive engine feedback, inspect mistakes, then move into targeted training.

Why it matters

The product closes the loop from review to practice in one place, with no account required and on-device analysis by default.

Product architecture

Architecture choices tied to product outcomes.

On-device analysis

Stockfish runs in-browser (WASM + workers), so core analysis and game data stay on the user device instead of requiring a remote engine service.

Progressive feedback

Analysis starts shallow for quick signal, then deepens over time. Players can begin review quickly without waiting for a full deep pass.

Runtime safeguards

Session IDs, watchdog recovery, and throttled UI updates prevent stale engine output from creating noisy or misleading analysis states.

Study persistence

Heavy analysis data is stored in IndexedDB while lighter settings stay in local/session storage, supporting repeat study across many games.

Messy input handling

The importer handles imperfect PGN exports, setup context edge cases, and stable IDs so real-world study archives remain usable.

Related writing

The strongest ChessIQ proof is in the product loop.

The technical work matters because it changes what a player can trust: which labels are final, which mistakes become training, and whether a browser-native engine can hold up in repeated study.

Technical notes

  • Next.js + TypeScript app for dense analysis and study flows
  • WebAssembly worker orchestration for browser-native engine execution
  • IndexedDB-backed persistence strategy for larger local datasets
  • Responsive UX tuned for desktop review and mobile post-game sessions

What I learned

  • A clear review loop beats feature sprawl.
  • Trust comes from stable behavior, not just strong engine depth.
  • Data edge cases are product work, not cleanup work.