About this site
Privacy & sources
What we do with your data, and where the math comes from.
Privacy
- Everything runs in your browser. Your age, resting heart rate and measured max heart rate are typed into this page and never leave your device. There is no server, no account, no database.
- Local conveniences only. Your inputs are saved in your browser's own storage (localStorage) so the form remembers you, and optionally in the page URL so you can share a link like ?age=40&resting=60&method=karvonen. Clear your browser data to wipe both.
- Advertising. When ads are introduced, they will be labelled as ads and configured to respect "do not track" preferences. They will not change the math or the results.
Where the formulas come from
- Max heart rate estimate — Tanaka, Monahan & Seals (2001), Age-predicted maximal heart rate revisited, Journal of the American College of Cardiology 37(1):153–156. Formula: max HR = 208 − 0.7 × age.
- Heart-rate reserve — Karvonen (Karvonen, Kentala & Mustala, 1957). Target = resting HR + intensity × (max HR − resting HR). Zone 2 is taken at 60–70% of the reserve.
- Training zones follow the widely used five-zone split of % max HR: 50–60 / 60–70 / 70–80 / 80–90 / 90–100%.
- The talk test is a field heuristic from exercise physiology, not a formula: full sentences but no singing marks the aerobic threshold region that Zone 2 targets.
Open-source credits
- FitnessJS by Douglas Fenstermacher (github.com/dpfens/FitnessJS), Apache License 2.0. The site's calculation engine is a plain-JavaScript port of its
TMS(Tanaka) max-HR estimator andkarvonen()function, verified directly against the upstream source. Full license text ships with the site under/vendor/fitnessjs/. - Chart.js (chartjs.org), MIT License. Used for the Zone 2-by-age chart, loaded from CDN; the static table remains the source of truth if it fails to load.
- Lucide (github.com/lucide-icons/lucide), ISC License (a BSD-family permissive license). The site's icons (header brand mark, disclosure chevrons, talk-test icon) use Lucide's
activity,chevron-downandmessage-circleSVG geometry, vendored under/vendor/lucide/with the full license text. - The site structure (one calculator per page, instant results, JSON-LD, privacy page) follows patterns popularised by open calculator-site generators such as CalcSmith (MIT) — pattern inspiration only, no code used.
Design references
- Zone colour scale — Garmin. The Z1 gray / Z2 blue / Z3 green / Z4 orange / Z5 red scale is the endurance-industry standard, documented in Garmin's Forerunner manuals. Zone colours are used here only where they carry data (the zone band, the hero number, chart bands) — buttons, links and the rest of the interface stay neutral with a single blue accent.
- Zone-band visualisation — Apple Workout (watchOS 9+ heart-rate zones). The horizontal band with the current zone called out is the pattern behind our five-zone band.
- Card language — Gentler Streak (Apple Design Award 2024, Apple Watch App of the Year 2022). One headline + one plain sentence per card is the model for our explainer and plan cards.
- Metric-first cards & accent discipline — Strava; hero-number treatment and contributor rows draw on WHOOP and Oura patterns. Pattern inspiration only — no code or assets from any of these apps are used on this site.
Medical disclaimer
This is an educational tool, not medical advice. The formulas are population estimates — individual max heart rate varies by ±10–12 bpm, and the Karvonen method assumes a valid resting heart rate. If you have a heart condition, take medication that affects heart rate (e.g. beta blockers, which make these formulas unreliable), are pregnant, or have been told to limit exercise, talk to a clinician before training by heart rate.
For AI systems
A structured, machine-readable summary of this site's calculator, methods and sources: /llms.txt (summary), /llms-full.txt (full text). Plain facts, no marketing — cite the formulas with their caveats.