Shipped
- Bumped version to v0.8.0 to mark a major engine capability upgrade
- Locked in a canonical direction for expanding Protocol beyond lifting:
- Conditioning + intervals
- Loaded cardio/conditioning (rucking, sleds, carries)
- Yoga + mobility (MindBody)
- Renamed LoadKind → ModalityType across the codebase and updated related components, hooks, and types for consistency
Key Decisions
-
ModalityType becomes the single canonical categorization field on
ExerciseDefinition(replacingloadKind)- Strength: equipment-driven (barbell, dumbbell, machine, etc.)
- Cardio: mode-driven (steady, intervals, loaded)
- MindBody: discipline-driven (yoga, mobility)
-
Unify Cardio + HIIT
- Keep engine type =
cardio - Represent intervals via
performanceSchema = "intervals" - Support both time-based and distance-based intervals
- Legacy
HiitSetremains supported for backward compatibility, but is no longer generated
- Keep engine type =
-
Introduce MindBody (type =
mindbody)- Yoga + mobility represented as sets (no special “flow” model)
- Primary schema:
time/time_range - Optional reps for mobility drills
-
Clarify Performance vs Intensity
PerformanceSchema= what you do (reps, time, distance, intervals, pace)IntensitySchema= how hard (RPE, RPE range, %1RM, deltas)- Pace is treated as a performance target, not intensity
New Capabilities Unlocked
- Loaded conditioning with time/distance/intervals + optional external load + RPE guidance
- Distance-based intervals (e.g., 6 × 500m row)
- Time-based holds across strength/bodyweight/bands/yoga/mobility
- Pace targets stored canonically (
paceSecondsPerKm) and displayed as min/km or min/mi based on unit preference
Canonical Storage Rules
- Time:
- Steady →
durationMinutes - Intervals → seconds (
workIntervalSeconds,restIntervalSeconds)
- Steady →
- Distance → meters
- Pace → seconds per kilometer (
paceSecondsPerKm) with UI conversion for imperial users
UI Direction
- Schema × intensity pairing is explicit and validated
- Defaults selected automatically; advanced options stay hidden unless needed
- Distance intervals use “Complete work” + rest timer pattern
- RPE is labeled “Effort (1–10)” for cardio + mindbody
Next
- Implement the engine changes incrementally (types → validation → defaults → UI)
- Consolidate interval exercise definitions (remove duplication)
- Seed minimal MindBody exercise definitions
- Update Routine Builder + Workout Player to reflect new schemas and modality groupings