Want a coach like this for your own training?
Rest Day is a small private beta. Request an invite and you'll get an email when a spot opens — or sign in if you already have an account.
Rest Day is a small private beta. Request an invite and you'll get an email when a spot opens — or sign in if you already have an account.
Training-science concepts and how this app uses them to guide your coaching. Personalised zones live in Settings → Physiology.
Rest Day reads your workout history and turns it into a picture of three things: how fit you are (CTL), how tired you are (ATL), and how recovered you are right now (TSB or “form”). Those three numbers drive every surface — Dashboard, Coach > Week / Block / Season, and the per-sport pages under Data.
The two things Rest Day needs:
Optional but sharp: threshold tests for FTP, LTHR, threshold pace, and CSS. Auto-estimates are good enough to start; tests make zones and TSS much sharper. See Test protocols below.
If a coach prescription ever feels wrong, two things to check first: (a) is your FTP / LTHR set correctly? (Settings > Physiology), (b) is your goal date and priority right? (Settings > Goals). Most apparent “the coach is being weird” moments resolve to one of those.
Understanding TSB as a number is easy; using it to actually train smarter requires understanding the physiology and periodisation behind it. The core principle: training doesn't make you fitter — recovery from training does. A hard session depletes glycogen, damages muscle, stresses the nervous system; your body then repairs and overcompensates. Next stimulus lands on a slightly higher baseline, and fitness inches up. TSB is the scoreboard of that balance.
Where you should actually live: a common misconception is “stay near zero TSB so I'm always ready.” That's wrong. Positive TSB is reserved for taper weeks. Most of the training year should sit in the −10 to −30 productive-fatigue band — tired but adapting. TSB hovering around zero for weeks means you're not loading enough to build fitness. TSB below −30 for days on end means you're accumulating damage, not adaptation.
Periodisation at three scales:
Six practical rules:
Form (also called TSB — Training Stress Balance) is computed as CTL (yesterday) − ATL (yesterday). It tells you how ready you are to perform today. The five-tier table:
| TSB | Zone | What it means |
|---|---|---|
| >20 | Transition | Very rested — possible detraining if prolonged. Great for race day after a taper. |
| 5 to 20 | Fresh | Well-recovered and ready to perform. Ideal for racing or hard quality sessions. |
| −10 to 5 | Grey zone | Balanced — neutral readiness. Normal day-to-day training state. |
| −30 to −10 | Optimal | Productive overreach. Fatigued but adapting — this is where fitness gains happen. |
| <−30 | High risk | Deep fatigue. Risk of illness, injury, or overtraining. Back off. |
The key insight: you can't be both fit and fresh at the same time. Building fitness requires fatigue (negative TSB). Racing well requires freshness (positive TSB). Periodisation — alternating build and recovery phases — is how you manage the tradeoff.
CTL is your bank account. Slow to grow, slow to decay. Higher CTL = greater capacity to handle training load. Building faster than ~5-7 points/week increases injury risk. ATL is reactive. Spikes after hard blocks, drops fast with rest. ATL much higher than CTL means you're reaching beyond current fitness — fine for a week, not for a month.
Your personalised zone tables live on Settings > Physiology — they update automatically when you change a threshold. The sections below explain the test protocols you use to set those thresholds accurately.
The highest power (in watts) you can sustain for approximately one hour. Anchors all cycling power zones and cycling TSS. Auto-estimated from your best 20-min power in the last 90 days; the gold-standard set is a deliberate test.
Log it via the FTP calculator on Settings > Physiology, or tell the coach in chat (“I just did the FTP test, averaged 248W”) — the log_threshold_test tool stamps the value plus the test date. Re-test every 6-8 weeks.
The heart rate at your lactate threshold — the point where lactate accumulates faster than your body clears it. Anchors HR zones. Sport-specific: cycling LTHR is typically 5-10 bpm lower than running LTHR because cycling recruits larger lower-body muscle mass.
First 10 min are discarded because HR takes time to rise to steady state. Test cycling and running separately. Settings > Physiology > LTHR calculator.
The swimming equivalent of threshold — the fastest pace you can sustain for ~30 min of continuous swimming. Auto-estimated from a 20th-percentile of your swim paces; the rigorous version is a two-distance trial.
Swimming in a meters pool? Same protocol at 400m + 200m — the calculator follows your units setting either way.
Settings > Physiology > CSS calculator does the arithmetic and stores the result. Re-test every 6-8 weeks.
TSS is computed differently depending on what data the workout has. Same principle each time: how hard, relative to threshold, and for how long.
Cycling — power-based TSS:
TSS = (duration × NP × IF) ÷ (FTP × 3600) × 100, where NP is Normalized Power (4th-power rolling average) and IF = NP ÷ FTP. One hour exactly at FTP = 100 TSS.
Running — HR-based TSS (hrTSS):
Without a running power meter, Rest Day uses Banister's TRIMP model scaled to your LTHR. Less precise than power — HR responds slowly to effort changes and drifts with heat, caffeine, fatigue — but reliable enough for trend analysis.
Swimming — HR or RPE-based TSS:
Swimming TSS follows the same HR-based TRIMP model as running when heart rate data is available. If you log a swim without HR data, you can supply an RPE (1-10) and it calculates TSS the same way as any device-less activity.
Manual / no device — RPE-based TSS:
When you log via chat (“1hr Z2 ride, RPE 4”), the log_manual_activity tool maps RPE to an IF and computes TSS = hours × IF² × 100. Useful for strength sessions, hikes, or any workout without a sensor.
TSS is never stored in the database — it's computed at read time against your current effective FTP / LTHR. Updating a threshold retroactively re-scales every historical TSS instantly.
Subjective 1-10 scale (Borg CR-10) for how hard a workout felt. Use it when logging without a device, or as a sanity check against device-based TSS — large discrepancies usually mean a threshold needs updating or the workout had a freak HR reading.
| RPE | Effort | Description | Zone |
|---|---|---|---|
| 2 | Very easy | Easy walk, warmup pace | Z1 |
| 3 | Easy | Conversational, could go for hours | Z1–Z2 |
| 4 | Moderate | Comfortable but purposeful | Z2 |
| 5 | Somewhat hard | Can speak in sentences | Z2–Z3 |
| 6 | Hard | Tempo, sentences difficult | Z3 |
| 7 | Very hard | Threshold, a few words at a time | Z4 |
| 8 | Extremely hard | VO2max intervals, can barely speak | Z4–Z5 |
| 9 | Near max | All-out repeats | Z5 |
| 10 | Maximum | Sprint finish, absolute max | Z5+ |
For chat logging: “1h easy spin RPE 3” resolves to IF ≈ 0.62 → ~38 TSS. “45-min hard run RPE 7” → IF ≈ 0.88 → ~58 TSS.
Polarized training splits weekly work into two intensity bins: roughly 80% easy (Z1–Z2) and 20% hard (Z4–Z5), with almost nothing in the middle (Z3).
The science behind it: Z2 work maximizes fat oxidation, builds mitochondria, and accumulates training volume without excess fatigue. Z4–Z5 work drives the acute adaptations — raising lactate threshold and VO₂max — that Z2 alone can't touch. Z3 (tempo/sweet-spot) is the grey zone: it's too hard to recover from quickly but not hard enough to drive the top-end adaptations. Athletes who live in Z3 often plateau.
Research on elite endurance athletes consistently shows ~80% low intensity, ~20% high intensity — across running, cycling, rowing, and cross-country skiing. Your plan is built around this model by default.
How settled is this? Less than the 80/20 slogan suggests. The main alternative is pyramidal training - the same large easy base, but with a real band of moderate work under a smaller amount of hard work. A 2025 pooled analysis of individual data from 13 trials found polarized and pyramidal statistically indistinguishable for both VO₂max and race performance, and what edge polarized has shows up mainly in highly trained athletes. Almost none of this research covers someone new to endurance training a few hours a week.
We build polarized anyway, for a reason worth knowing: the most common mistake in self-coached endurance training is drifting into Z3 - easy days that aren't easy and hard days that aren't hard. Keeping the middle thin is a guard against that drift, not a claim that tempo work is useless. Thin is not empty: a plan can still prescribe the occasional tempo session, and that is deliberate rather than a slip.
TSS is a single number summarizing how hard a workout was, combining duration and intensity.
Formula (power): TSS = (seconds × NP × IF) ÷ (FTP × 3600) × 100, where NP is Normalized Power and IF is Intensity Factor (NP ÷ FTP). A 1-hour ride exactly at FTP = 100 TSS. An easy 90-minute Z2 ride ≈ 60–80 TSS.
Formula (HR): When power isn't available, TSS is estimated using Banister's TRIMP model scaled to your LTHR. Less precise but still useful for trending.
TSS is not stored — it's computed at read time against your current effective FTP/LTHR. Updating your FTP retroactively re-scales all historical TSS values instantly.
The PMC tracks three exponential-weighted moving averages of your daily TSS.
The coach uses your current CTL as a ramp-rate baseline — it won't prescribe a first week more than ~120% of your recent TSS average, regardless of how many hours you say you have available.
FTP is the highest average power you can sustain for ~60 minutes. It's the anchor for all five power zones and for TSS calculations.
Auto-calculated: The app estimates your FTP as 95% of your best 20-minute mean-maximal power from the last 90 days. This is the classic Coggan field test proxy — it slightly underestimates true 60-minute power for most athletes, which is intentional (training above true FTP causes excessive fatigue).
Override: If you've done a proper 60-minute time trial or lab test, enter the result in Settings → Physiology. Your override takes precedence over auto-calc until you clear it.
FTP divided by body weight (in kg). Normalises cycling power across riders of different sizes. A 60kg rider at 240W and an 80kg rider at 320W both produce 4.0 W/kg — and they'll climb at similar speeds. W/kg is the best single metric for comparing cycling fitness; absolute FTP is the better metric for flat power output (criteriums, time trials on rolling terrain).
Typical reference points: 2.5-3.0 = recreational, 3.0-3.7 = enthusiast, 3.7-4.5 = strong amateur, 4.5-5.5+ = competitive amateur and category racers. Tour pros sit at 6.0+ for an hour.
Body weight on Settings > Profile drives the calculation. Update both regularly — a 5kg change moves W/kg substantially even with FTP unchanged.
LTHR is the average heart rate you can sustain for approximately one hour at maximum effort. Like FTP for HR — it anchors your five HR zones.
Auto-calculated: The app estimates cycling LTHR from the average HR of your hardest 20-minute efforts (rides where avg HR ≥ 80% of your max HR). Running LTHR uses a similar method. If not enough data exists, it falls back to max HR × 0.87 (cycling) or × 0.89 (running).
LTHR differs by sport — your cycling LTHR is typically 5–10 bpm lower than your running LTHR because the larger lower-body muscle mass in cycling can produce more power at the same HR.
NP is a better measure of the physiological cost of variable-pace work than simple average power. A ride with big surges (sprints, climbs) is harder than a steady ride at the same average power — NP captures that.
Formula: Compute a 30-second rolling average of power, raise each value to the 4th power, average those, then take the 4th root. The 4th-power exponent amplifies hard efforts and discounts coasting — matching the non-linear fatigue cost of intensity.
When you ask the coach to generate a plan, it: