M1 — Exploration
  1. Session 1 — Setup & Orientation
    File and workflow setup. No AI used. Established the folder structure and began thinking about the quarter question before building anything.
    @default
  2. Session 2 — Three Prototypes in Google AI Studio
    Built VibeWord Animator, Dot Destroyer (bilateral hand tracking with MediaPipe), and Reaction Time Test. Rejected VibeWord as off-quarter-question. The other two became the ancestor prototypes for Baseline's core tests.
    @resist @shift
M2 — Position Statement + PRD
  1. Session 3 — Scope Expansion: Single Game → Platform
    AI suggested building a single polished game. I rejected this and expanded scope to a multi-test platform. First major Record of Resistance.
    @resist
  2. Session 4 — Platform Decision: Replit over AI Studio
    Evaluated prototyping environments. Chose Replit for file management and persistence. Distinguished @mediapipe/hands vs @mediapipe/tasks-vision — a distinction that would matter in every subsequent MediaPipe session.
    @shift
  3. Session 5 — Research Synthesis
    Synthesized research on ACE-X, NIH Toolbox, and José Azuara's work. Preserved the raw research voice — no AI polish. Established "not diagnostic" as a non-negotiable boundary.
    @resist
  4. Session 6 — Position Statement + PRD Complete
    M2 complete. Position Statement finalized: accessible at-home assessment, unusual inputs as core hook, professional + approachable, NOT diagnostic. PRD written. Rejected healthcare provider access for v1 — scope protection.
    @resist
M3 — Frontend Prototyping
  1. Session 7 — Homepage Prototype + Double-Mirroring Fix
    Built the homepage and Bilateral Coordination Test. Established the dark-blue color system. Solved the double-mirroring problem after 5 iterations — the key insight was CSS scaleX(-1) with adjusted coordinate math.
    @resist @shift
  2. Session 8 — GAME_STANDARD.md + Hard Lesson on Git
    Created the universal 4-phase game architecture (Welcome → Practice → Test → Results). Learned the hard way that version control is non-negotiable after losing a session of work. Per-hand scoring established over totals.
    @resist @default
  3. Session 9 — Results Screen Redesign + Screen Split
    Comprehensive results screen with timeline visualization, cadence analysis, and fatigue index. Split the screen so left-side dots stay left and right-side dots stay right — removing the cross-midline confound that was invalidating measurements.
    @resist @shift
M4 — Backend Infrastructure
  1. Session 10 — Homepage Wired to Supabase
    Connected the homepage to Supabase. Added "Coming Soon" state for unbuilt tests. Dev environment stabilized — foundation for all subsequent backend work.
    @shift
  2. Session 11 — Understanding the Backend Before Building It
    Asked "what IS a backend?" before choosing one. Chose Supabase based on understanding, not convenience. Added profile icon and history.html for account management rather than cluttering the nav header.
    @resist
  3. Session 12 — Rhythm Synchronization Test Prototype
    Built the Rhythm Synchronization test. Enforced GAME_STANDARD phases on the new test architecture — the standard proved its value by making the new test immediately coherent.
    @shift
  4. Session 13 — Reaction Time Test (Touch-Based)
    Built the Reaction Time Test using touch events rather than camera — the right tool for measuring response latency. Clean, simple, reliable. Aligned to GAME_STANDARD from the start.
    @default
  5. Session 14 — Bilateral Coordination Refinements
    Refined the Bilateral Coordination Test. Established that the breaking/stretch plan should stress the bilateral aspect, not just the hand tracking mechanics — a distinction about what the test actually measures.
    @resist
  6. Session 15 — Rhythm Sync: Time-Domain Over Frequency-Domain
    Chose time-domain peak detection (getByteTimeDomainData) over frequency-domain because frequency analysis returned zero for very short taps. Built self-contained HTML with no CDN dependency. Centralized state management with single app object.
    @resist @shift
  7. Session 16 — User Testing + Chart.js Graphs
    Two external testers (ages 21 and 58). Both validated the core concept and confirmed they wanted graphs. Fixed the red dot collection bug (JS falsy value with ID=0). Added Chart.js with toggle pills for Total Dots / Hand Symmetry views.
    @resist @shift
  8. Session 17 — M4 Complete + Deployed to Vercel
    Compiled 18 Records of Resistance. Built Fine Motor Precision Test (portal-based, camera, double-flip fix). Shelved Rhythm Sync to M5 — depth over breadth. Deployed to Vercel. Reorganized repo. M4 done.
    @resist
M5 — Refinement + Security
  1. Session 18 — Fine Motor Precision Fix + Renamed
    Renamed "Finger Maze" to "Fine Motor Precision Test" — names construct reality. Fixed silent JavaScript failure (missing chart container ID). Replaced "Fatigue Indicator" with "Movement Control" metric. Recognized the test as motor learning, not just snapshot measurement.
    @resist @shift
  2. Session 19 — Security Hardening: RLS, XSS, Auth
    Professor security review identified 3 issues. Fixed RLS with UUID cast (auth.uid() = user_id::uuid). Removed guest mode entirely. Patched XSS via escapeHtml() across 51 interpolated values in 4 templates. Deferred password complexity — friction without benefit.
    @resist @shift
M6 — Process Book Documentation
  1. Session 20 — Presenting Work
    In session 20, I presented my work from the last 10 weeks to others.