HEART · LOCAL-FIRST WELLNESS

Your heart,
on your device.

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.

Heart home screen showing 104 bpm live heart rate with a zone-2 indicator
01 WHAT IT DOES

What it does

All on-device. No subscription, no cloud, no black box.

❤️

Live HR + HRV

Continuous heart rate, zones, and RMSSD heart-rate variability, computed directly from R–R intervals using the 1996 ESC/NASPE standard.

🌙

Sleep, recovery & strain

Four-stage sleep from overnight HR, a WHOOP-style recovery score (HRV percentile vs your 30-day baseline), and zone-weighted strain. All from published methodology, not black boxes.

🧠

On-device intelligence

A readiness forecast for tomorrow's HRV, rhythm-anomaly detection, and post-workout summaries with GPS routes, zones, and recovery impact, all computed on your phone.

🚫

No account, no cloud

Everything stays on your device: samples, scores, sleep history. One-tap JSON export for migration, one-tap delete-everything.

HARDWARE

Pairs with the band you already own.

Heart speaks the standard BLE Heart Rate Service (UUID 0x180D). Pair once, wear it 24/7, get insights every morning.

🟢
PRIMARY

Coospo HW9

Worn on the chest, upper arm, or forearm. Full support: live HR, RR-interval HRV, battery reporting. Heart was built and tested with this band.

🔵
STANDARD

Any BLE strap

Polar H10, Wahoo TICKR, Garmin HRM-Dual, anything speaking Heart Rate Service 0x180D + Measurement 0x2A37.

🟡
OPTICAL

Wrist sensors

Live HR works on optical wrist straps, but RR-interval availability varies, so HRV is coarser than from a chest strap.

02 GET IT

Download Heart

Available for Android. iOS coming soon. Pair your band, wear it 24/7, get insights every morning.

Download for
Android APK
Available on
iOS, Coming Soon
Version1.0.22
Min Android7.0 · API 24
CostFree. No accounts, no ads, no tracking.
SHA-256 (APK)d56b58f6684e2144b7c687e0d183b93737c494500a9585ebf4aa2f70f281f958

Full release history: changelog  ·  privacy policy

📏

ACCURACY · CHEST STRAP VS WRIST

Better signal in, better signal out.

Published literature puts wrist 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. Heart pairs with a chest strap by default, so the input it computes from is fundamentally cleaner.

Same algorithmic class as WHOOP and Oura for derived scores, without the subscription, the cloud, or the closed source.

03 ARCHITECTURE

A time-series engine,
not an AI black box.

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.

Heart architecture diagram A heartbeat detected by the HW9 band, worn on the chest, upper arm, or forearm, is broadcast over BLE GATT as bpm and RR-interval values, captured by a background service on the phone, appended to an on-disk JSONL log, and fed through an on-device compute pipeline (HRV, sleep, rhythm, readiness, strain) that produces the live UI and Insights. No server, account, cloud sync, telemetry, or external model file is part of this picture. HW9 BAND · CHEST OR ARM Heartbeat (ECG) bpm + RR ms BLE GATT · 0x2A37 DEVICE BOUNDARY BLE notify frame BLE 4.0+ · LINK-LAYER ENCRYPTED BLE notify · ~1 Hz DIRECT · NO RELAY · < 10 m ON THE WIRE bpm + RR ms only YOUR PHONE BLE service · capture ON-DEVICE BOUNDARY JSONL log · sandboxed HRV · Sleep · Rhythm Readiness · Strain Live UI · Insights NOT IN THE PICTURE No server · No account · No cloud sync · No telemetry · No model file
A heartbeat detected by the HW9 band, worn on the chest, upper arm, or forearm, travels as bpm + RR-interval values over a short-range BLE link directly to your phone, where it is logged locally and fed through an on-device compute pipeline. No server, cloud sync, telemetry, or external model file is involved.

VALIDATION · 13 ALGORITHMS · 84 TEST CASES

Every closed-form algorithm in Heart produces output matching the numpy reference (the backend behind pyhrv, hrv-analysis, and Kubios HRV) to floating-point precision: global maximum deviation 1.42 × 10⁻¹⁴, at the IEEE-754 double-precision noise floor.

Reproducible via flutter test test/algorithm_validation_test.dart. Because every formula is closed-form (Tanaka 2001, Uth 2004, Keytel 2005, Holt 1957, ESC/NASPE 1996, Banister 1975, Coyle 1998), "matches numpy" equals "matches Kubios" by mathematical identity.

pipeline-math-and-references.txt
The pipeline, the math, every reference

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

Deterministic four-stage classifier · 5-min HR buckets

mean_bpm < baseline + 8 → sleep candidate

onset gate 0.70 · stability σ < 6 bpm · awake / light / deep / REM · heuristics over ML: overnight tflite inference would drain phone + band battery

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 Σ

EVERY FORMULA, EVERY SOURCE

HRV RMSSD · ESC/NASPE Task Force · Eur. Heart J. 17:354 · 1996
HRmax Age-predicted max · Tanaka et al. · Med. Sci. Sports Exerc. 32:1591 · 2001
HR zones 5-zone partition · HRmax × [0.60, 0.70, 0.80, 0.90]
VO2max Heart-rate ratio method · Uth et al. · Eur. J. Appl. Physiol. 91:111 · 2004
Calories HR + age + weight + sex · Keytel et al. · J. Sports Sci. 23:289 · 2005
Distance Haversine great-circle · spherical-earth approximation
Cardiac drift Early-third vs late-third HR · Coyle framework · 1998
Strain TRIMP zone-weighted load · Banister & Calvert · 1975
Sleep stages Rule-based 5-min HR-bucket classifier · 4 stages
Sleep priors Bayesian post-hoc correction · Sleep-EDF · Kemp et al. 2000
Recovery WHOOP-style composite · HRV percentile vs 30-day baseline
Readiness Holt linear exponential smoothing · Holt · ONR memo 52 · 1957
Rhythm hint 4-feature thresholding · pNN50 + CoV(RR) + RMSSD + RR range
Storage SharedPreferences + JSONL · app sandbox · OS-encrypted
Network None, only optional OSM tile downloads for offline maps
Server None

The validation above proves the algorithm, not end-to-end accuracy: sleep staging vs PSG and calories vs calorimetry haven't been independently measured yet. Heart is a wellness application, not a medical device. Scores are estimates from consumer-grade sensors, built for tracking trends, not diagnosis.

04 ROADMAP

What's coming

IN PROGRESS

Personal heart-age calibration

Replace static population-norm tables with a personal regression fit once 30+ nights of baseline data exist, surfaced in the UI when calibration is reliable.

building

PLANNED

Sleep stager validation against PSG

Validate the rule-based + prior-calibrated stager against published polysomnography datasets and tighten it where deltas exceed ±10 minutes per stage.

planned