From bd59e5e38155c31c2928acfe516fd3184d688f00 Mon Sep 17 00:00:00 2001 From: Clawd Date: Mon, 16 Feb 2026 06:29:59 +0100 Subject: [PATCH] docs: create roadmap (3 phases) --- .planning/REQUIREMENTS.md | 32 ++++++++--------- .planning/ROADMAP.md | 72 +++++++++++++++++++++++++++++++++++++++ .planning/STATE.md | 59 ++++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+), 16 deletions(-) create mode 100644 .planning/ROADMAP.md create mode 100644 .planning/STATE.md diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md index 9e4218a..0b48f1a 100644 --- a/.planning/REQUIREMENTS.md +++ b/.planning/REQUIREMENTS.md @@ -54,25 +54,25 @@ | Requirement | Phase | Status | |-------------|-------|--------| -| INP-01 | TBD | Pending | -| INP-02 | TBD | Pending | -| INP-03 | TBD | Pending | -| INP-04 | TBD | Pending | -| INP-05 | TBD | Pending | -| INP-06 | TBD | Pending | -| INP-07 | TBD | Pending | -| SET-01 | TBD | Pending | -| SET-02 | TBD | Pending | -| SET-03 | TBD | Pending | -| MOD-01 | TBD | Pending | -| MOD-02 | TBD | Pending | -| MOD-03 | TBD | Pending | +| INP-01 | Phase 1 | Pending | +| INP-02 | Phase 1 | Pending | +| INP-03 | Phase 1 | Pending | +| INP-04 | Phase 1 | Pending | +| INP-05 | Phase 1 | Pending | +| INP-06 | Phase 1 | Pending | +| INP-07 | Phase 1 | Pending | +| SET-01 | Phase 2 | Pending | +| SET-02 | Phase 2 | Pending | +| SET-03 | Phase 2 | Pending | +| MOD-01 | Phase 3 | Pending | +| MOD-02 | Phase 3 | Pending | +| MOD-03 | Phase 3 | Pending | **Coverage:** - v1 requirements: 13 total -- Mapped to phases: 0 -- Unmapped: 13 +- Mapped to phases: 13 +- Unmapped: 0 --- *Requirements defined: 2026-02-15* -*Last updated: 2026-02-15 after initial definition* +*Last updated: 2026-02-16 after roadmap creation* diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md new file mode 100644 index 0000000..053b94f --- /dev/null +++ b/.planning/ROADMAP.md @@ -0,0 +1,72 @@ +# Roadmap: Gravl Workout UX Improvements + +## Overview + +Three phases deliver the improvements in order of risk and value. Phase 1 fixes input UX with zero backend changes. Phase 2 adds flexible set management. Phase 3 enables workout modification via a fork/custom data path. Each phase is independently shippable and leaves the existing program workout flow intact. + +## Phases + +- [ ] **Phase 1: Input UX** - Make weight/reps inputs fast, mobile-friendly, and validation-safe +- [ ] **Phase 2: Flexible Sets** - Let users add and remove sets on any exercise during a workout +- [ ] **Phase 3: Workout Modification** - Let users swap or add exercises to a program workout (forked as custom) + +## Phase Details + +### Phase 1: Input UX +**Goal**: Users can log weight and reps quickly on mobile without fighting the inputs +**Depends on**: Nothing (first phase) +**Requirements**: INP-01, INP-02, INP-03, INP-04, INP-05, INP-06, INP-07 +**Success Criteria** (what must be TRUE): + 1. Weight field shows "kg" unit suffix visibly inside or adjacent to the input + 2. Tapping + or - on weight steps by 2.5kg; tapping + or - on reps steps by 1 + 3. Weight and reps inputs reject negative values — typing or stepping below 0 is blocked + 4. All input fields and action buttons are at least 44px tall and usable with one thumb + 5. Input font size is at least 16px so iOS does not auto-zoom the page on focus +**Plans**: TBD + +Plans: +- [ ] 01-01: Build stepper input component (shared for weight and reps) +- [ ] 01-02: Apply validation constraints and kg suffix to all workout inputs +- [ ] 01-03: Audit and fix touch target sizes across workout UI + +### Phase 2: Flexible Sets +**Goal**: Users can add or remove sets on any exercise mid-workout and have those changes persist +**Depends on**: Phase 1 +**Requirements**: SET-01, SET-02, SET-03 +**Success Criteria** (what must be TRUE): + 1. An "Add set" button appears on every exercise card; tapping it appends a new empty set row + 2. Each set row has a delete control; tapping it removes that row from the exercise + 3. Added and removed sets are reflected correctly after saving the workout (database persists the change) + 4. Removing the last set on an exercise is either blocked or shows a confirmation +**Plans**: TBD + +Plans: +- [ ] 02-01: Add dynamic set state management in WorkoutPage +- [ ] 02-02: Update backend to accept variable set count on workout log save + +### Phase 3: Workout Modification +**Goal**: Users can swap out or add exercises to a scheduled program workout, creating a personal fork that does not alter the underlying program +**Depends on**: Phase 2 +**Requirements**: MOD-01, MOD-02, MOD-03 +**Success Criteria** (what must be TRUE): + 1. An "Edit workout" control on a program workout opens an exercise-selection flow + 2. User can replace any exercise in the workout with a different exercise from the full exercise list + 3. User can add exercises to the workout from the exercise list + 4. The modified workout is saved as a personal copy — the original program day is unchanged for future sessions +**Plans**: TBD + +Plans: +- [ ] 03-01: Create exercise list endpoint and exercise-picker UI component +- [ ] 03-02: Implement fork logic: copy program workout to custom_workout on modification +- [ ] 03-03: Wire up workout modification UI (swap, add exercises) against forked data + +## Progress + +**Execution Order:** +Phases execute in order: 1 → 2 → 3 + +| Phase | Plans Complete | Status | Completed | +|-------|----------------|--------|-----------| +| 1. Input UX | 0/3 | Not started | - | +| 2. Flexible Sets | 0/2 | Not started | - | +| 3. Workout Modification | 0/3 | Not started | - | diff --git a/.planning/STATE.md b/.planning/STATE.md new file mode 100644 index 0000000..c02fb07 --- /dev/null +++ b/.planning/STATE.md @@ -0,0 +1,59 @@ +# Project State + +## Project Reference + +See: .planning/PROJECT.md (updated 2026-02-15) + +**Core value:** Logging a workout should be fast, clear, and flexible — the app never fights the user during a session +**Current focus:** Phase 1 — Input UX + +## Current Position + +Phase: 1 of 3 (Input UX) +Plan: 0 of 3 in current phase +Status: Ready to plan +Last activity: 2026-02-16 — Roadmap created + +Progress: [░░░░░░░░░░] 0% + +## Performance Metrics + +**Velocity:** +- Total plans completed: 0 +- Average duration: — +- Total execution time: 0 hours + +**By Phase:** + +| Phase | Plans | Total | Avg/Plan | +|-------|-------|-------|----------| +| - | - | - | - | + +**Recent Trend:** +- Last 5 plans: — +- Trend: — + +*Updated after each plan completion* + +## Accumulated Context + +### Decisions + +- Keep existing program model; custom workouts are a fork, not a replacement +- Frontend-only changes for Phase 1 (zero backend risk) +- React Hook Form + Zod approved for input validation (research recommendation) +- Do NOT modify shared program data — fork to custom_workout table for per-user changes + +### Pending Todos + +None yet. + +### Blockers/Concerns + +- Phase 3 requires new DB tables (custom_workouts, custom_workout_exercises) and a source_type column on workout_logs — backend schema migration needed before Phase 3 planning + +## Session Continuity + +Last session: 2026-02-16 +Stopped at: Roadmap created, ready to plan Phase 1 +Resume file: None