Setup Wizard
Record ECG from Polar H10
Why direct APK? Due to Google Play's policy restrictions on pre-user testing and medical-related apps, I distribute directly. This APK is cryptographically signed and verified.
Google Play Protect already scans the APK on install. If you want a second opinion, you can independently scan it first using free online services:
Alternative scanners: MetaDefender · HybridAnalysis
Note: After tapping Install, Google Play Protect may scan the APK before allowing installation. This is normal for any app installed outside the Play Store and can take 30–60 seconds. The scan only happens on first install — updates are faster. If Play Protect shows a warning, tap "Install anyway" or "More details" → "Install anyway".
About permissions: The app will ask for several permissions on first launch. All are required for it to function:
Analyze sessions on desktop, Android tablet, or Chromebook
All your ECG recordings stay on the phone. The dashboard reads them directly from the phone app over Wi-Fi — no local folder, no file copying, no setup required.
The phone app serves the dashboard directly to a PC, tablet, or Chromebook on the same Wi-Fi and supplies the complete address to use.
Licence required first: the Dashboard URL option only appears once your licence is activated on the phone. If it isn't showing, tap Get Web Dashboard in the same CONNECTIONS card to purchase, then Activate Licence and paste the key from your email.
Because the dashboard is served from the phone over plain Wi-Fi (not HTTPS), Chrome's usual "Install app" prompt won't appear. Use the Desktop Icon button in the dashboard sidebar instead — it works around this automatically:
Note: the icon points at the phone's current Wi-Fi address. If your router assigns the phone a new address later, recreate the icon the same way.
The dashboard works the same way on an Android tablet as on a PC — same URL, same phone-backed data, same licence. The only differences are how you interact with it:
http://192.168.1.120:8080/)Note: the File System Access API (folder selection for archiving sessions) is not available in most mobile browsers. The archive feature falls back to individual CSV downloads on tablets.
The dashboard auto-connects to the phone over Wi-Fi. Sessions appear in the sidebar automatically — no IP address to enter, no panels to configure, no files to copy.
The YourRhythm Android app embeds a lightweight HTTP server (NanoHTTPD) called the LocalFileServer, bound to 0.0.0.0:8080. Once the phone holds a valid licence it starts automatically when the app launches (configurable in Settings → ON APP START) and stops when the app is killed or force-closed. No root or special permissions are required beyond the INTERNET and ACCESS_NETWORK_STATE permissions declared in the manifest.
What it serves:
assets/web/ directory and served at /dashboard.html, /help.html, /licence.html, etc.| Endpoint | Method | Purpose |
|---|---|---|
/api/phone-info | GET | Returns device name, app version, session count, Wi-Fi IP. |
/api/sessions | GET | Lists all session CSVs on the phone, cross-referenced with the app's Room database to filter orphan files. |
/api/sessions/{filename}/download | GET | Downloads a session CSV so the dashboard can load it directly. |
/api/sessions/{filename} | DELETE | Deletes a session from the phone. |
/api/sessions/{filename} | POST | Uploads a re-classified CSV (saved with _RC suffix). |
/api/license | GET/POST | Reads or stores the licence key on the phone (SharedPreferences). Any device connecting to a licensed phone inherits the licence. |
/api/trends | GET/POST/PUT | Reads, appends to, or replaces the trends log (session_trends.csv). |
Phone-served operation: The dashboard is always served from the phone's LocalFileServer. When the dashboard loads, it calls the same-origin /api/phone-info endpoint to confirm the phone is reachable, then uses relative /api/... URLs for all session and license requests. There is no separate "hosted" mode — the phone is the only data source. Netlify is used solely for the public marketing pages and as the license-signing backend (the private signing key must not ship in the APK).
Networking & security: The server binds to 0.0.0.0, so it is reachable from any device on the same Wi-Fi network. It is HTTP, not HTTPS — this means the dashboard cannot use secure-context-only browser APIs (such as the File System Access API for folder selection) when loaded from the phone. The archive feature falls back to individual file downloads in this case. CORS headers are added to API responses so the Netlify-hosted dashboard can also call the phone API cross-origin.
Session discovery: Sessions are stored as CSV files in Documents/YourRhythm-Data/ on the phone's external storage. The server queries Android's MediaStore for these files and cross-references them with the app's Room database to ensure only valid sessions are returned — this prevents orphan CSVs from appearing in the dashboard.
Everything on the phone is free — live ECG recording, heart rate, arrhythmia detection, breathing guidance. No account, no ads, no catches.
The desktop dashboard — full ECG review, 99 health metrics, HRV, PDF reports, and export — needs a one-time £8 licence. No subscription, nothing recurring.
One licence covers everything: it's stored on your phone, so any device on your Wi-Fi inherits it automatically. To activate, open the app → More tab → CONNECTIONS → Activate Licence, and paste the key from your purchase email.
Learn about the licence