A wellness app for Bluetooth heart-rate bands. Tracks HR, HRV, sleep, recovery, and strain — entirely on your device. No account, no cloud, no subscription.
Free · on-device · auditable.
Eight features. All on-device. No subscription, no cloud, no compromise.
Continuous heart rate, zones, and RMSSD-based heart-rate variability — computed directly from R–R intervals using the 1996 ESC/NASPE standard.
Awake, light, deep, REM — derived from overnight HR with a prior-calibrated stager. Avg HR, min HR, and overnight HRV per night.
WHOOP-inspired recovery score — HRV percentile against your personal 30-day baseline. Zone-weighted strain. Both derived from published methodology, not black boxes.
Pick any past day, custom 24h windows, or 8 AM → 8 AM physiological days. Wear time, energy, sessions with GPS path, sleep snapshot, on-device coach.
A readiness forecast that estimates tomorrow's overnight HRV from today's signal, rhythm-anomaly detection on beat-to-beat variability, and a personal-baseline percentile system over a 30-day rolling window.
End a session and get an instant full summary — HR zone breakdown, peak and avg BPM, active calories, a side-by-side compare to your last session of the same type, and an estimated overnight HRV impact.
Pin your gym's location once. Pick a detection radius (100–500 m). Heart offers to start a session automatically after 10 minutes of dwell — nothing leaves your device, no map service, no movement history.
Everything stays on your device — sample data, scores, sleep history. One-tap JSON export for migration. One-tap delete-everything.
HOW IT WORKS
Heart speaks the standard BLE Heart Rate Service (UUID 0x180D). Works with the Coospo HW9 — worn on the chest or arm — and most modern chest straps.
01
Open Settings → Devices, scan, tap your HW9 (or any BLE HRS strap). One-time approval — no account, no QR, no cloud handshake.
02
iOS state restoration and an Android foreground service keep the connection alive overnight, even when the phone is in your pocket.
03
Recovery, strain, sleep stages, and on-device Coach observations every morning. Self-validate with a one-tap sleep diary.
HARDWARE
A versatile band — worn on the chest, upper arm, or forearm. Full feature support: live HR, RR-interval HRV, battery percentage reporting. Heart was developed and tested with this band.
Polar H10, Wahoo TICKR, Garmin HRM-Dual — anything that speaks Heart Rate Service 0x180D + Heart Rate Measurement 0x2A37.
Live HR works on optical wrist HR straps, but RR-interval availability depends on the device — HRV will be coarser than from a chest strap.
THE BAND IS JUST A SENSOR
The Coospo HW9 is a dumb sensor (a device that only broadcasts raw data — no onboard processing, no memory, no intelligence of its own). Every heartbeat it detects an R-wave, computes a beat interval, and broadcasts two values — BPM and milliseconds since the last beat — over a short-range Bluetooth link. Then it forgets. It doesn't know your name, what day it is, or whether last night was good sleep or bad.
The official Coospo app catches that broadcast. Shows you 104 bpm. It was built for bike computers — pairing sensors to head units, syncing ride logs, tracking kilometres. Using it for daily wellness is like using a speedometer to track your resting heart rate.
Heart catches the same broadcast — and doesn't let go.
IN THE APP
Five screens from the daily loop — live monitoring, sleep review, insights, trends, and GPS sessions.




Live HR · zones · real-time burn rate
Sleep stages · recovery ring · strain
Insights · 24h wear · active energy sparkline
Sleep trends · 7-night duration chart
Sessions · GPS routes · activity history
Heart ingests raw R–R intervals off a BLE characteristic, runs classical signal processing on a 300-sample sliding window, and produces auditable scores. No neural network. No model weights. No remote inference. Every formula traces to a published paper and every constant is documented in source.
THE PIPELINE · RAW BYTES → RECOVERY SCORE
STEP 1 · BLE INGEST
BLE 0x2A37 notify frame
flags[0] | bpm[1] | RR_low[2] | RR_high[3] … · ~1 notify / sec
bit1(flags) == 1 → RR values present in frame
STEP 2 · PARSE
RR interval extractor
uint16_le(frame[i], frame[i+1]) / 1024.0 × 1000 → ms
physiological gate: discard RR outside [300 ms, 2000 ms]
STEP 3 · PERSIST
JSONL log · heart_samples/YYYY-MM-DD.jsonl
{"ts_ms": 1715608800000, "bpm": 72, "rr_ms": [812, 819, 808]}
appended live · sandboxed app storage · OS-encrypted at rest
STEP 4 · HRV
300-sample ring buffer → RMSSD
RMSSD = √( Σ(RRᵢ₊₁ − RRᵢ)² / (N − 1) ) [N ≥ 4]
ESC/NASPE Task Force · Eur. Heart J. 17:354–381 · 1996
STEP 5 · SLEEP STAGING
Deterministic four-stage sleep classifier · 5-min HR buckets
mean_bpm < baseline + 8 → sleep candidate
onset gate 0.70 · stability σ < 6 bpm · 4 stages: awake / light / deep / REM · deterministic heuristics chosen over on-device ML — continuous tflite inference overnight would drain both phone and band battery in hours
STEP 6 · BASELINE
OvernightBaselineComputer · 30-day rolling window
RMSSD_array[−30 … −1] → percentile rank of last night
recovery = floor( rank × 100 ) · strain = zone-weighted effort Σ
THE MATH · RMSSD
RMSSD = √ Σ (RRi+1 − RRi)2 / (N − 1)
Sleep staging accuracy against polysomnography (PSG) has not yet been independently measured for Heart. Thresholds are derived from published population studies; an independent PSG validation study is on the roadmap. HRV and HR accuracy numbers in the section below are class-level figures for chest straps as a category — not Heart-specific measured values.
Heart is a wellness application — not a medical device. All scores are estimates derived from consumer-grade sensors and population-level reference data, validated for trend tracking, not diagnosis.
Always shipping. Every item below either runs entirely on-device, or is opt-in with a clear, narrow scope.
IN PROGRESS
Replace the static population-norm reference tables with a personal regression fit, once 30+ nights of overnight baseline data exist. Surfaces the value in the UI when calibration is reliable.
PLANNED
Validate the rule-based + prior-calibrated stager against published polysomnography datasets and tighten the model where deltas exceed ±10 minutes per stage.
Available for Android. iOS coming soon. Pair your band, wear it 24/7, get insights every morning.
Full release history: changelog · privacy policy
ACCURACY · CHEST STRAP VS WRIST
Published literature puts wrist-based optical sensors at ±5–15 bpm against ECG during effort and ±10–20 ms on overnight HRV. Chest straps as a category reach ±2 bpm and ±3–5 ms respectively. These are category figures — Heart hasn't been independently measured against ECG. What Heart does is pair with a chest strap by default, so the input it computes from is fundamentally cleaner than optical.
Same algorithmic class as WHOOP and Oura for derived scores — without the subscription, the cloud, or the closed source.