Back to Roadmap

Heart Rate Zone Configuration

Let users configure their training zones — HR, power, and pace. Manual entry, auto-calculate from physiological anchors, or sync from providers.

Updated for SYNTHESIS schema (expanded scope)

This is now broader than just HR zones. The SYNTHESIS training_zones table supports:

Zone types

  • Heart rate zones: percentage of max HR or lactate threshold HR
  • Power zones: percentage of FTP or absolute watt ranges (Coggan levels)
  • Pace zones: percentage of threshold pace or absolute s/km ranges

Zone versioning (GoldenCheetah pattern)

  • effective_from date on each zone set — insert new rows, don't overwrite
  • Historical activities resolve to the zones that were active at the time
  • Example: max HR test on March 15 shows 185 → new zone set from that date, old zones preserved

Both absolute and percentage-based

  • Absolute: coach sets specific values, or synced from Garmin/TrainingPeaks
  • Percentage: standard zone systems (Coggan, Karvonen, Friel) — resolves to absolute using nearest athlete_metrics anchor value (FTP, max HR, etc.)

Per-sport overrides

  • sport_type = NULL = default zones for all sports
  • sport_type = 'cycling' = cycling-specific power zones
  • Running gets HR + pace zones, cycling gets power + HR zones

Zone priority per sport (sport_zone_priorities)

  • Which metric drives time-in-zone display: power > HR > pace for cycling, HR > pace for running
  • Which metric drives training load calculation
  • Default equipment auto-assignment per sport

TRIMP weighting

  • Each HR zone carries a weighting factor for HR-based training load calculation
  • e.g., Z1 = 1.0, Z2 = 1.1, ..., Z5 = 4.0

Depends on

  • #31 Implement SYNTHESIS Schema
  • #35 Training Zones & Zone Analysis Schema

Blocks

#21, #24, #25

Reference

See docs/api-research/SYNTHESIS.md §7 (training_zones table, sport_zone_priorities table).

Status
Backlog
Priority
Normal
Platform
iOS
Date
1 month ago