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.

01 FEATURES

What it does

Eight features. All on-device. No subscription, no cloud, no compromise.

❤️

Live HR + HRV

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

🌙

Four-stage sleep

Awake, light, deep, REM — derived from overnight HR with a prior-calibrated stager. Avg HR, min HR, and overnight HRV per night.

🔋

Recovery & Strain

WHOOP-inspired recovery score — HRV percentile against your personal 30-day baseline. Zone-weighted strain. Both derived from published methodology, not black boxes.

📊

Insights with history

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.

🧠

On-device intelligence

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.

🏋️

Post-workout analysis

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.

📍

Gym auto-detection

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.

🚫

No account, no cloud

Everything stays on your device — sample data, scores, sleep history. One-tap JSON export for migration. One-tap delete-everything.

HOW IT WORKS

Pairs with what you already own.

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

Pair your band

Open Settings → Devices, scan, tap your HW9 (or any BLE HRS strap). One-time approval — no account, no QR, no cloud handshake.

02

Wear it 24/7

iOS state restoration and an Android foreground service keep the connection alive overnight, even when the phone is in your pocket.

03

Get insights

Recovery, strain, sleep stages, and on-device Coach observations every morning. Self-validate with a one-tap sleep diary.

HARDWARE

Pairs with the band you already own.

🟢
PRIMARY

Coospo HW9

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.

🔵
STANDARD

Any BLE strap

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

🟡
OPTICAL

Wrist sensors

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

Your band broadcasts.
Heart listens.

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.

same-signal.txt
COOSPO APP HEART
Shows live BPM
Stores every beat on-device, sandboxed
HRV (RMSSD) from R–R intervals
4-stage sleep rule-based + calibrated
Recovery score vs your 30-day baseline
Rhythm hints beat-skip rate anomaly detection
GPS sessions route maps + calories
Post-workout analysis zones · compare · recovery impact
Gym auto-detection GPS geofence · on-device only
Insights & trends 24h window deep-dive
Needs an account
Cloud sync everything stays local
Subscription free

IN THE APP

A look inside.

Five screens from the daily loop — live monitoring, sleep review, insights, trends, and GPS sessions.

02 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 and every constant is documented in source.

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.
pipeline-and-math.txt
Pipeline & Math — technical detail

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

hrv_calculator.dart · evaluateRmssd()

RMSSD =  Σ (RRi+1 − RRi)2  / (N − 1)

RRᵢ successive R–R intervals in milliseconds
N sample count · ring buffer: min 4, max 300
source ESC/NASPE Task Force · Eur. Heart J. 17:354–381 · 1996
gate physiological range check: 300 ms ≤ RR ≤ 2000 ms
output milliseconds · typical resting adult: 20–80 ms
heart-architecture.txt
Identity None — no account, no email, no key
HR source BLE Heart Rate Service · UUID 0x180D · char 0x2A37
HRV RMSSD · ESC/NASPE Task Force 1996 · 300-sample buffer
Calories Keytel et al. (2005) · HR + age + weight + sex
Sleep Rule-based 5-min stager + prior-calibrated correction
Recovery HRV percentile vs personal 30-day rolling baseline
Strain Zone-weighted effort score (range 0–21+)
Coach On-device heuristics · trend / variance / streak detection
Post-workout HR zones · vs last session · recovery impact estimate · GPS map
Gym detect GPS geofence · 250 m default radius · 10-min dwell · on-device
Storage SharedPreferences + JSONL · app sandbox · OS-encrypted
Network None — only optional OSM tile downloads for offline maps
Server None

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.

03 ROADMAP

What's coming

Always shipping. Every item below either runs entirely on-device, or is opt-in with a clear, narrow scope.

IN PROGRESS

Personal heart-age calibration

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.

building

PLANNED

Sleep stager validation against PSG

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

planned
04 GET IT

Download Heart

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

Version1.0.20
Min Android7.0 · API 24
CostFree. No accounts, no ads, no tracking.
SHA-256 (APK)48f5ca7246d45c2ba9a5efc0cea3b6ef453800482d7210caedde8c043235e26b

Full release history: changelog  ·  privacy policy

📏

ACCURACY · CHEST STRAP VS WRIST

Better signal in, better signal out.

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.