Heartbeep connects to a Bluetooth Low Energy heart rate monitor and helps you stay in your target zone with simple, immediate audio alerts.
Built for training sessions where you do not want to keep checking your screen, Heartbeep shows your live heart rate, sounds an alert when you go above or below your chosen limits, and keeps monitoring in the background while your workout continues.
Demo video: Heartbeep on YouTube Shorts
Heartbeep is designed to be fast and focused. Open the app, connect your sensor, choose your alert range, and start training. During a session, the app keeps you informed with clear feedback so you can adjust your effort without constantly looking at your phone.
- Connect to BLE heart rate monitors that support the standard Heart Rate Service profile
- Live heart rate display with a rolling graph
- Upper and lower heart rate alerts with adjustable limits
- Beep cadence that follows your current heart rate
- Voice alerts for sensor connection, disconnection, and each completed kilometer
- Optional GPS distance tracking during sessions
- Foreground monitoring so tracking continues with the screen off
- Session history with duration, average heart rate, distance, pace, and heart rate graph
- Export and import session history in TCX format
- Battery level display plus saved thresholds and last connected device
Heartbeep has been developed and tested with a Polar H10, but it should also work with other monitors that implement the standard BLE Heart Rate Service profile.
- Zone-based endurance training
- Run and ride pacing support
- Heart rate cap alerts for easy sessions
- Lower-bound alerts for recovery intervals
- Outdoor sessions with optional distance and pace tracking
Heartbeep is designed for local use on your device. Session data and settings are stored on-device, and you can export or import your workout history whenever you want.
- Kotlin + Jetpack Compose (Material 3, no XML layouts)
- Single-activity MVVM with
ViewModeland KotlinFlow - Room for session history and DataStore for saved preferences
AudioTrackalarm tones plusTextToSpeechfor spoken connection and distance alerts- Android BLE GATT for Heart Rate and Battery Service profiles
- Foreground service with
FOREGROUND_SERVICE_CONNECTED_DEVICEand optionalFOREGROUND_SERVICE_LOCATION - Min SDK 31 (Android 12), Target SDK 35
export JAVA_HOME="$HOME/.local/opt/jdk-17"
export ANDROID_SDK_ROOT="$HOME/Android/Sdk"
./gradlew testDebugUnitTest
./gradlew assembleDebugThe debug APK is written to app/build/outputs/apk/debug/app-debug.apk.
BLE passthrough on the Android emulator is unreliable, so test on a real Android 12+ device with a physical heart rate monitor. Install via ADB:
adb install app/build/outputs/apk/debug/app-debug.apkRuntime permissions required: BLUETOOTH_SCAN, BLUETOOTH_CONNECT, POST_NOTIFICATIONS, and optionally ACCESS_FINE_LOCATION for GPS tracking.



