73 lines
3.6 KiB
Markdown
73 lines
3.6 KiB
Markdown
# 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:** 3 plans
|
|
|
|
Plans:
|
|
- [ ] 01-01-PLAN.md — Create StepperInput, WeightInput, RepsInput components + stepper CSS
|
|
- [ ] 01-02-PLAN.md — Integrate WeightInput/RepsInput into WorkoutPage ExerciseCard set rows
|
|
- [ ] 01-03-PLAN.md — Audit and fix touch target sizes and input font-size across all 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 | - |
|