Privacy Policy
Effective date: November 9, 2026
BPM is a minimalist heart rate display app. We respect your privacy and are committed to protecting it. This policy explains what data we handle and why.
Summary
- BPM does not require an account. Optional voice notes may contain personal information you choose to record.
- Measured heart rate data stays on your device unless you explicitly choose to share it.
- Optional voice notes use a third-party AI service with your permission. See Voice Notes below.
- If you enable sharing, live heart rate, beat intervals, HRV measurement state and results, and workout data are sent to the sharing backend so people with your code or invite link can view and control your workout and HRV measurement.
- We collect limited, non-personal app usage and device information through TelemetryDeck to understand app reliability and usage.
Data We Handle
Heart Rate (BPM), Max, and Average (last hour)
- Source: Your Bluetooth LE heart rate strap via CoreBluetooth.
- On-device use: Display and simple stats.
- Optional sharing: Live BPM and summaries, original beat intervals, current HRV readiness, countdown, result and heart-rate summary, workout timers, sets, heart-rate charts, time in zones, estimated calories, workout state, and the selected preset are associated with a random 6-digit code and a private broadcaster token. Control requests include a random request ID and the current workout/HRV revision so duplicate or outdated requests can be rejected. Saved workout titles, notes, and profile inputs are not included.
Sharing and Retention
- When sharing is ON:
- Data is transmitted over HTTPS to your backend (default deployment: Vercel + KV/Upstash).
- Sharing expires after five minutes if nobody connects. If a viewer connects within that time, sharing expires 90 minutes after it started. These deadlines are not extended by activity.
- Anyone with your code or invite link can start, pause, end, reset, and control your workout, including loading presets. They can also start, stop, or reset your HRV measurement. Your device performs that measurement, and connected viewers see the same countdown and result. Only the broadcaster can save the workout or HRV result; viewers cannot save these shared measurements in BPM.
- The backend holds a rolling 15-second window of beat intervals and the latest workout/HRV state. Workout, HRV, beat-interval, and control records expire with the session and are removed when sharing is stopped successfully on the backend.
- After automatic expiry, the private owner token retains only the session code, deadlines, and whether a viewer connected, for up to 95 minutes from the start. This lets BPM explain why sharing stopped. Stopping sharing manually removes this metadata too.
- When sharing is OFF:
- BPM does not transmit measured heart rate samples through live sharing.
Apple Health and Calorie Settings
- When you choose Autofill from Apple Health, BPM requests access to weight, date of birth, biological sex, resting heart rate, and VO2 max. You review the available values and their measurement dates before filling compatible empty calorie settings. Existing entries are kept. BPM calculates age from date of birth without saving the date of birth.
- Imported values are stored on your device and excluded from BPM's iCloud preferences sync. They are not sent to the sharing backend, AI provider, or analytics service. BPM does not continuously refresh these values; you can autofill again or edit settings manually.
- Separately, with your permission, BPM can save workouts, heart rate, and estimated active energy to Apple Health. Calorie autofill requests read access only and does not write to Apple Health.
Voice Notes
- With your permission, BPM sends up to 60 seconds of audio through its backend to OpenAI, the current AI provider, to transcribe and draft workout notes. You approve before the first upload on each device and choose when to send each recording. Review and edit the result before saving.
- Your recording and transcript may include personal, fitness, or health details you mention; the words are not anonymized. BPM does not attach measured heart rate, HealthKit records, existing notes, or workout history.
- BPM does not save recordings, transcripts, or generated text on its backend or in application logs. Temporary recordings are deleted after successful generation, replacement, or closing the form. Failed requests keep the recording locally while the form is open so you can retry.
- Content is not used for model training. Under the provider's API data controls, transcription audio is not retained as application state or in abuse-monitoring logs. Transcripts and generated notes may be retained in safety logs for up to 30 days, or longer for legal or safety reasons. Stored response state is disabled.
- The backend temporarily stores daily request counts and hashed IP-derived identifiers to limit abuse. These counters expire after approximately 25 hours. Hosting providers may retain operational request metadata.
Analytics
- TelemetryDeck receives app launch and session activity, feature and screen usage, settings choices, app version, device type, operating system, and a non-personal device identifier for analytics. Feature usage includes sharing outcomes, streaming, sounds, HRV measurement outcomes, history visits, presets, and AI voice actions. For calorie settings, analytics record which fields were edited and whether fields are filled, empty, invalid, or using a default, never the values entered. Reliability diagnostics use fixed labels for the app component, operation, and failure category. They also include recognized heart-rate sensor brands/models, protocol capabilities, and connection outcomes. Error messages, file paths, user content, raw Bluetooth names, sensor identifiers, serial numbers, and heart-rate or beat-interval values are not included.
- Analytics never include heart rate data, workout details, share codes, or other health information.
- Analytics data is not linked to your identity and is not used for advertising or cross-app tracking.
Identifiers and Tracking
- We do not use advertising identifiers or track users across apps or websites.
- The share code and token are random and not linked to your identity.
- Standard host logs (for example IP address) may be recorded by your hosting provider for operations/security.
Device Permissions
- Bluetooth: Used to discover and connect to your heart rate strap.
- Microphone: Used only when you record workout voice notes.
- Apple Health: Read access is requested when you choose calorie autofill; write access is requested separately for saving workouts. You can manage BPM's access in Apple Health.
Security
- Data in transit uses HTTPS.
- The backend stores minimal, ephemeral data needed for sharing functionality.
Your Choices
- Keep heart-rate sharing off and enter workout notes manually if you do not want workout content transmitted.
- You can stop sharing at any time in the app.
- In Settings → AI Voice Privacy, choose “Reset AI voice permission” to withdraw permission. BPM will ask again before the next upload. Permission is saved only on that device, without iCloud sync.
- You can revoke microphone access in iOS Settings or type workout notes manually.
- Deleting a saved workout removes it from BPM's workout history. Resetting permission or deleting a workout does not erase content already processed by the voice provider or subject to its retention rules. For privacy or deletion requests, contact vibecodeinc@proton.me; we will explain what we hold and can identify or delete.
Contact
For questions about this privacy policy, contact vibecodeinc@proton.me.