Back to Dev Log
v0.8.0-Jan 19, 2026Major

Engine Expansion: ModalityType + Intervals + MindBody

Finalized a unified exercise engine direction: ModalityType replaces LoadKind, cardio + HIIT converge into one path, intervals/pace become first-class performance schemas, and MindBody (yoga/mobility) lands without exploding exercise types.

EngineDataModelConditioningIntervalsMindBodySchema

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 (replacing loadKind)

    • 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 HiitSet remains supported for backward compatibility, but is no longer generated
  • 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)
  • 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

Install App