Personal project · Active

Open source

PatternForge

A chess training system built around returning to the same positions until calculation becomes recognition.

PatternForge adapts the Woodpecker Method into a focused digital training loop: choose a fixed puzzle set, complete it in cycles, review mistakes, and return to the same patterns with less time and friction on each pass.

João and I built it for our own chess training. The core product runs in the browser without an account, keeps progress on the device, and separates solving from looking back so training stays focused.

Chess trainingLocal-firstDeliberate practicePattern recognition

Why I built it

After reading The Woodpecker Method by Axel Smith and Hans Tikkanen, I liked the idea of repeating a fixed set until tactical motifs became familiar. Doing it manually was the problem: setting up positions, recording attempts, tracking cycles, and reviewing mistakes took attention away from the training itself.

PatternForge removes that administration without replacing the practice. It remembers the current cycle, gives immediate move feedback, preserves attempt history, and makes reflection available when I choose to leave execution mode.

In the app

PatternForge training view
A single puzzle inside an active cycle. The board, feedback, and progress controls stay together so the interaction remains move, response, next.

The product model

Training sets
A fixed, ordered collection of exercises anchors the work. The point is to return to the same positions rather than consume an endless puzzle feed.
Cycles
One complete pass through a set is a cycle. Repeating the set makes total time, accuracy, and attempt history comparable across passes.
Sessions
A cycle can span several training visits. Session state preserves the current position and active training time without confusing a pause with a completed pass.
Mistake review
Failed positions enter a focused review queue, turning mistakes into another practice path rather than leaving them buried in session history.
Reflection
Completed cycles are reviewed per training set through summaries, tables, and charts. Unrelated sets are never mixed into one progress signal.

One training cycle

The same set moves through a repeatable sequence. Improvement is measured across complete passes, not inferred from a puzzle streak.

  1. 01

    Choose a fixed set

    Select a collection sized for the level and training period you want to repeat.

  2. 02

    Start a cycle

    The app creates one active pass through the ordered set and remembers the next exercise.

  3. 03

    Train in sessions

    Solve as much as the current visit allows. Multiple sessions can contribute to the same cycle.

  4. 04

    Review mistakes

    Revisit failed positions separately so weak patterns receive deliberate attention.

  5. 05

    Reflect and repeat

    Complete the pass, compare it with earlier cycles for the same set, then begin the next repetition.

The engineering follows the practice

The interesting architecture is not the framework list. It is how product decisions shape state ownership, persistence, and route behaviour around the rhythm of deliberate practice.

  1. 01

    Training data stays on the device

    Sets, cycles, sessions, attempts, mistakes, and preferences live in IndexedDB behind repository boundaries. There is no account requirement, network round trip, or backend dependency in the core training flow.

  2. 02

    Execution and reflection are different modes

    The training route stays focused on the current puzzle. Progress and cycle summaries own review, so returning to train never produces a surprise redirect into an old result.

  3. 03

    Feedback optimises for recognition

    Interactive verification checks the expected first move rather than requiring the full variation. That shortens the feedback loop, with the accepted trade-off that it does not prove full-line calculation.

  4. 04

    Local-first has an honest cost

    Training remains private and responsive, but progress is tied to the browser and device. Multi-device synchronisation and cloud backup do not exist today.

Where it goes next

PatternForge is actively used and continues to evolve around training workflows, reflection, mobile interaction, accessibility, puzzle validation, and deeper per-set analytics.

Backup, multi-device synchronisation, optional identity, and a fuller offline application shell are directions under consideration, not current capabilities. Any move in that direction has to preserve the simplicity and privacy of the local-first training path.

Technologies

Application
Next.js 16, React 19, TypeScript, Tailwind CSS, shadcn/ui
Board and rules
chess.js, Chessground, validated Woodpecker puzzle bundles
Persistence
Dexie, IndexedDB, Zod schemas, repository boundaries
Product quality
Vitest, Testing Library, Playwright, Storybook, Chromatic

PatternForge is built around a simple idea: tactical improvement comes less from endless novelty and more from returning to the same patterns until recognition becomes instinctive.