Zonas starts from inputs, not preferences.
It does not ask you to choose a scientific mode during onboarding. It looks at what it knows, uses the most personal safe option, and gives you a way to override it.
The Decision Tree
| Step | Question | Result |
|---|---|---|
| 1 | Are custom boundaries enabled? | Use custom boundaries. |
| 2 | Is max heart rate known? | Use custom HRmax or Tanaka estimate. |
| 3 | Is resting heart rate available? | Use Karvonen / HRR. |
| 4 | Is resting heart rate missing? | Use percent of max heart rate. |
Custom wins because some users arrive with better information than the app can infer.
Step 1: Maximum Heart Rate
Max heart rate comes from either:
- a custom value you set
- the Tanaka estimate from age
The app’s estimate is:
HRmax = 208 - trunc(0.7 x age)
The app reads date of birth from Apple Health when permission is available. If date of birth is missing in Auto mode, the app can fall back to a default value, and Settings tells you what happened.
Step 2: Resting Heart Rate
Resting heart rate comes from Apple Health.
Zonas reads resting-heart-rate samples from the last 14 days and uses the median. If there are no usable samples, resting heart rate is missing.
Missing is allowed.
The app does not guess it.
Step 3: Automatic Zone Method
If resting heart rate exists, Zonas uses Karvonen:
target = RHR + intensity x (HRmax - RHR)
If resting heart rate is missing, Zonas uses percent of max heart rate:
target = intensity x HRmax
Both methods use the same zone bands:
| Zone | Band | Label |
|---|---|---|
| 1 | 50-59% | Recovery |
| 2 | 60-69% | Aerobic |
| 3 | 70-79% | Steady |
| 4 | 80-89% | Hard |
| 5 | 90-100% | Peak |
The percentage is HRR in the Karvonen path and HRmax in the fallback path.
Step 4: Whole BPM Ranges
Zonas turns percentages into BPM with truncation.
For Zones 1-4, the upper value is one beat below the next zone’s lower value. Zone 5 ends at max heart rate.
That prevents overlap.
Example
For age 30, Tanaka gives 187.
If resting heart rate is 60, Zonas uses Karvonen:
| Zone | BPM |
|---|---|
| Recovery | 123-135 |
| Aerobic | 136-147 |
| Steady | 148-160 |
| Hard | 161-173 |
| Peak | 174-187 |
Without resting heart rate, it uses percent of max heart rate:
| Zone | BPM |
|---|---|
| Recovery | 93-111 |
| Aerobic | 112-129 |
| Steady | 130-148 |
| Hard | 149-167 |
| Peak | 168-187 |
Same age. Same estimated max. Different method.
Weekly Goals Are Separate
Zonas also tracks weekly cardio progress, but that is a different layer.
Workout zones use five labels because they are easy to read during a session. Weekly goals use moderate-equivalent minutes because health guidance is written around moderate and vigorous activity.
The app uses the same heart rate data. It interprets it in two different ways.
Common questions
What is the first input Zonas needs?
Maximum heart rate. Zonas uses your custom value when set, otherwise it estimates from age with Tanaka if date of birth is available.
When does Zonas use Karvonen?
Automatic mode uses Karvonen when both max heart rate and resting heart rate are available. Resting heart rate comes from Apple Health.
Can I override the automatic result?
Yes. Custom mode lets you set your own zone boundaries. That is the right path if you follow a coach, lab test, or another platform's zones.
Sources
- Age-predicted maximal heart rate revisited
Tanaka formula used by the current app for age-estimated maximum heart rate.
- restingHeartRate
HealthKit resting heart rate samples used by Zonas when available.
- View Heart Rate Zones on Apple Watch
Consumer heart-rate-zone systems commonly support automatic personalization and manual zone editing.
- WHO Guidelines on Physical Activity and Sedentary Behaviour
Weekly cardio goals are based on moderate and vigorous activity guidance, not the five workout-zone labels.