Skip to main content

/docs · Vetta Trainer

Zones: HR, pace, power, CSS

The engine translates each session's intensity into concrete numbers based on your `zone_mode` and available data. Exact formulas below.

HR via Karvonen (heart-rate reserve)

Zone = (MaxHR - RestHR) × intensity% + RestHR. More precise than %MaxHR alone because it accounts for your reserve.

Z1 50-60% reserve | Z2 60-70% | Z3 70-80% | Z4 80-90% | Z5 90-100%. If you don't have RestHR set, Vetta uses Karvonen with age-estimated RestHR (~60 bpm) or falls back to %MaxHR.

For MaxHR, the engine prefers in order: (1) `fc_max_observada` from profile (real measurement), (2) max observed in recent Z4+ activities, (3) Tanaka formula 208 - 0.7 × age as last resort.

Pace via Daniels VDOT

Your VDOT is the median of the top-3 VDOTs in the last 28 days. VDOT is calculated from time and distance of each session using Daniels' formula.

Each VDOT defines 5 pace zones: E (easy, 65-78% VO2max), M (marathon, 78-85%), T (threshold, 85-90%), I (interval, 95-100%), R (repetition, above VO2max).

Grade adjustment: the engine uses GAP (Grade Adjusted Pace) with Minetti's correction, not raw pace. On 8% grade, energy cost rises ~30%.

Power via % FTP (Coggan)

FTP = the power you can sustain for 60 min. Vetta accepts FTP from your profile or estimates Critical Power from Strava history (best sustained efforts at 5/20/60 min).

7 Coggan zones: P1 <55% FTP (recovery), P2 55-75% (endurance), P3 75-90% (tempo), P4 90-105% (threshold), P5 105-120% (VO2max), P6 120-150% (anaerobic), P7 >150% (neuromuscular).

Without a power meter, the engine falls back to HR with estimated LTHR for cycling. Prescriptions remain reasonable, just less precise.

CSS for swimming

Critical Swim Speed = aerobically sustainable velocity, expressed as seconds per 100m. Calculated from the 400m + 200m test (10 min rest between).

Formula: CSS = (400 - 200) / (T400 - T200), where T is in seconds. Result: time per 100m at CSS speed.

5 swim zones: S1 (recovery, CSS+15s/100m), S2 (aerobic, CSS+5-10s), S3 (threshold/CSS), S4 (CSS-3-5s), S5 (VO2max, CSS-8-15s).

Mode selection

In your profile you can set `zone_mode` to "hr" (default, recommended) or "pace". The engine uses the picked mode as primary and the other as reference.

General guidance: HR for Z1-Z2 days (most of your volume), pace for quality days on controlled terrain (track, flat road). On trail / mountain ALWAYS HR.

Manual zones vs auto

The "My zones" panel in /training lets you override any value: MaxHR, RestHR, LTHR, threshold pace, FTP, CSS. Simple rule: empty = auto-detected, filled = manual.

Manual zones are your insurance against complaints: nobody can say "those aren't my heart rates" if you typed them in.