Workout Library — phase-based programming
Each workout is a structured object: an ordered list of steps with duration, intensity target, and description. Structure is not decorative — it's what lets us export to Garmin Connect (.fit), Intervals.icu (JSON), Apple Health / Google Fit, and Strava. See DESIGN.md §9 External integrations.
Intensity targets use two universal scales the user can calibrate to their own metrics:
- RPE (rate of perceived exertion), 1–10. Universal fallback.
- Zone (Z1–Z5), matching the standard 5-zone HR/power model most training platforms use.
The library below is the seed content for the prototype. Each entry maps 1:1 to the Workout schema in DATA_MODEL.md.
Phase palette
| Phase | Default focus | Default RPE ceiling | Rationale |
|---|---|---|---|
| Menstrual | Restore + gentle move | 6 | Baseline energy is often low; some athletes feel fine here, so we offer "if energy is high" upgrades. |
| Follicular (late) | Strength + power + HIIT | 9 | Rising estrogen, best recovery, best window for adaptation. |
| Ovulatory | Peak effort with careful warm-up | 10 | Peak strength; higher ligament laxity → longer warm-ups, prefer bilateral over dynamic single-leg for max efforts. |
| Luteal (early) | Endurance base + moderate strength | 7 | Progesterone rising, body still performs well; slight thermoregulation cost. |
| Luteal (late) | Aerobic base + mobility | 5 | Higher perceived exertion, lower glycogen availability, often lower sleep quality. Do not "push through". |
Workout catalog
Menstrual phase
M1 · Restorative flow (20 min, bodyweight)
- 5 min · RPE 2 · slow diaphragmatic breathing + neck/shoulder rolls
- 10 min · RPE 3 · yin-style flow: child's pose (2m) → supine twist L/R (2m each) → figure-4 stretch L/R (2m each)
- 5 min · RPE 2 · legs-up-the-wall + box breathing 4-4-4-4
M2 · Walk + mobility (30 min, outdoor)
- 25 min · Zone 1 · easy walk, nasal-only breathing if comfortable
- 5 min · RPE 3 · hip circles, cat-cow, standing side bends
M3 · Easy cycle (30 min, bike/trainer)
- 5 min · Zone 1 · warm-up spin
- 20 min · Zone 2 low · steady endurance, conversational
- 5 min · Zone 1 · cool down
M4 · "If you feel good" strength (35 min, dumbbells) — offered only if user energy self-rating ≥4/5
- 5 min · RPE 4 · dynamic warm-up
- 3 rounds · RPE 6 · goblet squat ×8, DB row ×8/side, glute bridge ×12, dead-bug ×8/side
- 5 min · RPE 3 · walk-out + stretch
Follicular phase
F1 · Full-body strength (45 min, dumbbells)
- 8 min · RPE 5 · warm-up: leg swings, air squats, band pull-aparts, arm circles
- 5×5 · RPE 8 · goblet squat, 90s rest
- 5×5 · RPE 8 · DB bench press or floor press, 90s rest
- 4×8 · RPE 7 · single-arm DB row per side, 60s rest
- 3×10 · RPE 7 · RDL, 60s rest
- 5 min · RPE 3 · finisher stretch
F2 · HIIT bike/run (30 min)
- 8 min · Zone 2 · warm-up
- 6× (2 min · Zone 4 / 2 min · Zone 2) · main set — 24 min
- 5 min · Zone 1 · cool down
F3 · Power + plyo (35 min, gym)
- 8 min · RPE 5 · warm-up + activation
- 5×3 · RPE 8 · box jump (moderate box)
- 4×6 · RPE 8 · trap-bar deadlift
- 3×5/side · RPE 7 · med-ball rotational throw
- 5 min · RPE 3 · cool down
F4 · Long run / ride (60 min, outdoor)
- 10 min · Zone 1–2 · warm-up
- 45 min · Zone 2–3 · steady aerobic
- 5 min · Zone 1 · cool down
Ovulatory phase
O1 · Strength PR day (60 min, gym) — extra warm-up because ligament laxity peaks here
- 15 min · RPE 5 · thorough warm-up: bike 5m + activation + working-up sets
- Squat: work up to 1RM–3RM · RPE 9
- Bench or overhead press: 5×3 · RPE 8
- Accessory · 3×8 · row + hamstring curl
- 5 min · Zone 1 · walk cool down
O2 · Sprint intervals (30 min)
- 10 min · Zone 2 · thorough warm-up
- 6× (30s · RPE 10 / 90s · Zone 1) sprints
- 5 min · Zone 1 · cool down
O3 · Circuit HIIT (30 min, bodyweight)
- 8 min · RPE 5 · warm-up
- 5 rounds · RPE 8 · 40s work / 20s rest — squat jump, push-up, mountain climber, glute bridge
- 5 min · Zone 1 · cool down
Luteal (early)
L1 · Moderate strength (45 min, dumbbells or gym)
- 8 min · RPE 5 · warm-up
- 4×8 · RPE 7 · back squat or goblet squat
- 4×8 · RPE 7 · bench / DB press
- 3×10 · RPE 6 · row
- 3×12 · RPE 6 · RDL
- 5 min · RPE 3 · stretch
L2 · Zone 2 endurance (60 min, bike/run)
- 10 min · Zone 1 · warm-up
- 45 min · Zone 2 · steady — nose-breathing test, conversation possible
- 5 min · Zone 1 · cool down
- Note: hydrate more; body temp runs ~0.3°C higher post-ovulation.
L3 · Tempo run (40 min)
- 10 min · Zone 2 · warm-up
- 20 min · Zone 3 · tempo effort
- 10 min · Zone 1–2 · cool down
Luteal (late) / premenstrual
LL1 · Yoga flow (30 min, bodyweight)
- 5 min · RPE 2 · breath + child's pose
- 20 min · RPE 4 · sun salutations at slow tempo (5 rounds A · 5 rounds B) with long holds in warrior II
- 5 min · RPE 2 · savasana
LL2 · Zone 2 walk or easy spin (45 min)
- 5 min · Zone 1 · warm-up
- 35 min · Zone 2 low · easy aerobic, conversational
- 5 min · Zone 1 · cool down
LL3 · Mobility + core (25 min, bodyweight)
- 5 min · RPE 3 · CARs (controlled articular rotations) — shoulders, hips, spine
- 15 min · RPE 4 · dead-bug 3×8, bird-dog 3×8, side plank 3×20s/side, glute bridge 3×12
- 5 min · RPE 2 · stretch — hips, hamstrings, chest
LL4 · Technique/skill session (30 min) — great for late-luteal because low intensity + high cognitive engagement
- 5 min · RPE 3 · warm-up
- 20 min · RPE 5 · sport-specific drills at technical, non-fatiguing pace (e.g., empty bar squat form, cadence drills on the bike, dribbling drills)
- 5 min · Zone 1 · cool down
Tagging schema
Each workout is tagged with:
phase: menstrual · follicular · ovulatory · luteal_early · luteal_lateminLevel: new · regular · athleteequipment: bodyweight · dumbbells · gym · outdoor · bikegoals: strength · endurance · general · weight_management · mobility · recoverydurationMin: integerintensityCeiling: RPE integer 1–10exportable: true if the structured steps map cleanly to a.fitfile (all steps have a duration + target)
The recommender uses the tags. The exporter uses the structured steps[].