docs: create roadmap (3 phases)
This commit is contained in:
+16
-16
@@ -54,25 +54,25 @@
|
|||||||
|
|
||||||
| Requirement | Phase | Status |
|
| Requirement | Phase | Status |
|
||||||
|-------------|-------|--------|
|
|-------------|-------|--------|
|
||||||
| INP-01 | TBD | Pending |
|
| INP-01 | Phase 1 | Pending |
|
||||||
| INP-02 | TBD | Pending |
|
| INP-02 | Phase 1 | Pending |
|
||||||
| INP-03 | TBD | Pending |
|
| INP-03 | Phase 1 | Pending |
|
||||||
| INP-04 | TBD | Pending |
|
| INP-04 | Phase 1 | Pending |
|
||||||
| INP-05 | TBD | Pending |
|
| INP-05 | Phase 1 | Pending |
|
||||||
| INP-06 | TBD | Pending |
|
| INP-06 | Phase 1 | Pending |
|
||||||
| INP-07 | TBD | Pending |
|
| INP-07 | Phase 1 | Pending |
|
||||||
| SET-01 | TBD | Pending |
|
| SET-01 | Phase 2 | Pending |
|
||||||
| SET-02 | TBD | Pending |
|
| SET-02 | Phase 2 | Pending |
|
||||||
| SET-03 | TBD | Pending |
|
| SET-03 | Phase 2 | Pending |
|
||||||
| MOD-01 | TBD | Pending |
|
| MOD-01 | Phase 3 | Pending |
|
||||||
| MOD-02 | TBD | Pending |
|
| MOD-02 | Phase 3 | Pending |
|
||||||
| MOD-03 | TBD | Pending |
|
| MOD-03 | Phase 3 | Pending |
|
||||||
|
|
||||||
**Coverage:**
|
**Coverage:**
|
||||||
- v1 requirements: 13 total
|
- v1 requirements: 13 total
|
||||||
- Mapped to phases: 0
|
- Mapped to phases: 13
|
||||||
- Unmapped: 13
|
- Unmapped: 0
|
||||||
|
|
||||||
---
|
---
|
||||||
*Requirements defined: 2026-02-15*
|
*Requirements defined: 2026-02-15*
|
||||||
*Last updated: 2026-02-15 after initial definition*
|
*Last updated: 2026-02-16 after roadmap creation*
|
||||||
|
|||||||
@@ -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 | - |
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user