Design Decisions
Key architectural and design choices in PatternForge.
Local-First Architecture
Decision: Store all data locally in IndexedDB, no backend required.
Rationale:
- Faster access, no network latency
- Works offline
- Privacy by default
- Simpler deployment
Trade-offs:
- No cloud sync (future consideration)
- Data tied to browser/device
- No multi-device access
First-Move Verification
Decision: Training and mistake review compare your move to the expected first move (UCI), using Exercise.firstMove or the first entry in solutionMoves. The full solution line is not verified interactively in the UI.
Rationale:
- Focuses on pattern recognition and the critical idea, not deep calculation in-app
- Faster feedback loop
- Aligns with Woodpecker-style emphasis on recognition
Trade-offs:
- Does not prove you would find the entire continuation
- May miss nuance that appears only later in the line
Cycle-Based Organization
Decision: Structure training around cycles (repeated passes) rather than linear progression.
Rationale:
- Core to Woodpecker Method
- Enables time reduction tracking
- Builds pattern memory through repetition
Trade-offs:
- Less variety than random puzzles
- Requires discipline to repeat sets
Training vs. reflection (routes)
Decision: /app/training stays in execution mode. If there is no active cycle, show an empty state and links to start a new cycle (Training Sets) or review history (Progress), instead of auto-opening the last cycle summary.
Rationale:
- Avoids surprising redirects when the user meant to train
- Keeps “do puzzles here” and “look back there” mentally separate
- Summary remains available after completing a cycle from the solve flow and from Progress → Reflection
Reflection charts: Progress over time is scoped per training set (cycle number vs. total time for that set only), so trends are not mixed across unrelated sets.
Mistake Review System
Decision: Track failed positions separately and allow focused review.
Rationale:
- Converts failures into learning opportunities
- Enables targeted improvement
- Prevents repeated mistakes
Trade-offs:
- Additional complexity
- Requires maintenance of mistake state
No Authentication
Decision: No user accounts or authentication system.
Rationale:
- Simpler architecture
- Privacy-focused (local data)
- Faster development
Trade-offs:
- No multi-device sync
- No data backup/restore
- No sharing or collaboration
TypeScript Throughout
Decision: Use TypeScript for all code, strict mode enabled.
Rationale:
- Type safety catches errors early
- Better IDE support
- Self-documenting code
Trade-offs:
- Slightly more verbose
- Learning curve for contributors