Projected CTL / ATL / TSB
Where your fitness, fatigue, and form will land after a sequence of planned future training days — the calculation behind "what if I train like this for the next two weeks."
Worked example Illustrative example — not a real athlete
- Starting CTL = 45, ATL = 40. Plan: 14 days at 80 TSS/day.
- Applying the SAME EWMA recursion forward: CTL climbs toward ≈55, ATL climbs faster toward ≈75.
- TSB (form) drops to roughly −20 by day 14 — deep fatigue from the intensity ramp.
This is structurally illustrative, permanently: a "what-if" projects a hypothetical future, so no real athlete’s projection can ever be a verified historical fact — only the recursion itself (identical to the shipped historical series) is verifiable.
Formula, provenance & citation
- Formula
- Same recursion as CTL/ATL/TSB, applied forward: ctl = ctl + (planned_tss − ctl) / 42; atl = atl + (planned_tss − atl) / 7
- Inputs
- planned_daily_tss (one value per future day), start_ctl, start_atl (seeded from the current shipped series).
- Provenance
- computed
- Unit
- TSS (same convention as the historical CTL series)
- Method
- Banister/Coggan EWMA, applied forward
- Citation
- Same Banister/TrainingPeaks impulse-response EWMA as the fitness family’s CTL/ATL/TSB entry, applied forward over a plan instead of backward over history.
- Licensing note
- Same as the fitness family’s ctl-atl-tsb entry — CTL/ATL/TSB vocabulary traces to TrainingPeaks/Peaksware, formula is public domain.
- Implementation pointer
api/backend/backend/pipeline/metrics/projection.py:42 (project_fitness). Tests: api/backend/tests/pipeline/test_metrics_projection.py.