What it is

Every workout in your plan already carries a pace target and an effort (RPE) target. Heart rate is a third read on the same instruction: a bpm band shown on the workout alongside the pace, for when pace isn't trustworthy. On a treadmill, in a tunnel, on a trail where GPS wanders, or on a hot day when the number on your watch stops meaning what it usually means, the band tells you whether you're still in the right place.

It is deliberately not a separate prescription. One training zone maps to one heart rate band, mirroring the pace band, so there is never a workout where the pace says one thing and the heart rate says another.

Where your max HR comes from

Bands are built from your maximum heart rate. Pheidi takes it in this order of preference:

  1. A measured max you entered, in onboarding or under Settings, Heart Rate Zones. The best source is the highest heart rate you've seen in a recent all-out effort. Accepted range: 120 to 230 bpm.
  2. An age estimate, when you haven't entered one but Pheidi knows your date of birth: 207 - (0.7 x age). That's Gellish et al. (2007), which holds up better across the adult age range than the classic 220 - age. At 30 it gives 186 bpm, at 40 it gives 179, at 50 it gives 172.
  3. Nothing. With no measured max and no age on file there's no honest way to draw a band, so heart rate simply doesn't appear. Nothing else about your plan changes.

Settings shows you which one is in play: leave the max blank and the field's hint reads back the age estimate it is using.

Resting HR makes the bands sharper

Resting heart rate is optional (accepted range 25 to 120 bpm, and it has to be below your max). It changes the arithmetic rather than the zones:

  • With a resting HR, bands use the Karvonen heart-rate-reserve method: a percentage of the range between resting and max, added back onto resting. This is the more individual of the two.
  • Without one, bands fall back to a straight percentage of max HR.

The zone bands
Zone% of heart-rate reserve
(resting HR set)
% of max HR
(no resting HR)
Workouts that use it
Easy62 to 75%70 to 81%Easy, recovery, long and medium-long runs
Marathon76 to 84%82 to 88%Race-pace runs
Tempo84 to 88%87 to 92%Tempo runs, fartlek
Interval95 to 100%95 to 100%Intervals, hill repeats
Repetitionno bandShort, fast reps

Repetition work is left out on purpose. Reps are too short for heart rate to reach steady state, so a bpm target there would be telling you about the rep you just finished, not the one you're running.

A worked example

A runner with a max HR of 185 bpm and no resting HR on file sees these bands:

Easy      130-150 bpm
Marathon  152-163 bpm
Tempo     161-170 bpm
Interval  176-185 bpm

The same runner, after adding a resting HR of 50, sees the Karvonen versions:

Easy      134-151 bpm
Marathon  153-163 bpm
Tempo     163-169 bpm
Interval  178-185 bpm

Where the band shows up

  • Day view, under the pace line for the workout, marked with a heart icon.
  • Week view, on each workout card in the same compact form.
  • Over MCP, as the targetHeartRate field on every workout an assistant reads through the Pheidi MCP server, so it coaches against the same band your screen shows.

It appears whichever pacing preference you use. VDOT runners and RPE runners both get the band, because heart rate is just as useful to someone training by feel as to someone training by pace.

Logging heart rate

When you log a run you can record an average heart rate alongside distance, duration, and effort. Pheidi then works out which zone that average lands in and shows it on the completed workout:

148 bpm - Easy zone

The label snaps to the nearest band when your average falls between two of them or outside all of them, and a value sitting exactly on a boundary reads as the harder of the two zones rather than the softer one.

Logged values are checked on the server, not just in the browser: anything outside 60 to 230 bpm is dropped rather than stored, on every path a workout can be saved through, including the mobile app and the API. An implausible reading counts as "no heart rate supplied", so it can never quietly overwrite the measured metrics on a Strava-synced run either.

What heart rate does not do

Heart rate annotates your plan, it doesn't restructure it. Entering a max HR won't change a single distance, workout type, or rest day, and the logged zone label is a label, not an input to the plan engine. Your weekly intensity distribution is tracked from logged effort and workout type, not from heart rate.

Heart rate-driven analysis, gray zone alerts, and wearable readiness are on the heart rate roadmap.


Heart rate zones live inside the Pheidi app, sign in to set your max HR.


See also