Privacy policy
Effective May 14, 2026.
This policy describes how the BumpyRide iOS app and bumpyride.me collect, store, and share your data. It is written to match what the app actually does — when in doubt, this page is the source of truth.
What stays on your iPhone
By default, every byte BumpyRide records lives only on your device. Nothing leaves your phone unless you explicitly pair a bumpyride.me account (see the next section).
For each ride you record, the app saves to your device:
- GPS coordinates (latitude and longitude) sampled every ~3 m of motion.
- Accelerometer-derived vibration data — raw vertical-axis samples at 50 Hz, retained as 5-second windows attached to each saved location point. From iOS v1.3 onwards a per-point horizontal-acceleration magnitude is also stored, used by the on-device brake detector.
- A timestamp for each sample.
- A user-chosen title for the ride.
- A binary tag indicating whether the phone was on the rider's body (pocket mode) or on a fixed bike mount.
- Hard-brake events (iOS v1.3+) — id, timestamp, location, peak deceleration, and duration for every sustained brake the on-device detector finds when the ride saves.
- Close-call markers (iOS v1.3+) — id, timestamp, and location for every near-miss you flag during a ride by tapping Log Close Call. No severity, category, or notes are captured.
The app also stores a few preferences on the device:
- Your bumpiness color thresholds.
- Your Bump Map filter selection (All / Mounted / Pocket).
While a ride is in progress, BumpyRide also writes a crash-safe journal at <Documents>/Recording/ so a force-quit or low-battery shutdown won't lose your in-progress data. The journal is automatically cleared the moment you save or discard the ride.
Uninstalling the iOS app deletes everything above. There is no background cloud backup unless you explicitly enable iCloud backup for the app in iOS Settings — and even then, only iCloud has the data, not us.
What we receive when you pair a web account
Pairing a bumpyride.me account (Settings → Web Account → “Sign in with bumpyride.me”) is the only path by which your data reaches our servers. Once paired, the app sends:
- Your email address — returned by
/api/meimmediately after pairing so the app can display “Connected as <email>”. - One bearer API token — stored in your iOS Keychain on the device only. It identifies your iPhone to our server when uploading rides. You can revoke it at any time from /settings/tokens.
- Each saved ride — POSTed to
/api/sync/rideand stored server-side. This includes everything listed above: GPS, accelerometer windows, timestamps, title, pocket-mode tag, plus (from iOS v1.3) per-point horizontal-acceleration, the ride's hard-brake events, and any close-call markers you logged. Deleting a close call on iOS re-syncs the ride with the marker gone. - Your pocket-mode calibration — a single per-user scalar (pocketGain) plus a confidence integer, sent to
/api/me/calibrationwhenever the iOS-side algorithm recomputes it. We use it to scale your pocket-mode samples on your personal map only. - Your public-map opt-in — a single boolean sent to
/api/me/sharing. Off by default. Affects only whether your data contributes to the public aggregate; never affects your private rides view.
What appears on the public maps
Contributing to the public maps is off by default. Turn it on at /settings/privacy.
If — and only if — you have opted in:
- Your rides contribute to three public aggregates on bumpyride.me/map, accessible from a single tab switcher: Bumpiness (average road roughness per cell), Hard brakes (count of detected brake events per cell), and Close calls (count of rider-tapped close calls per cell). All three share the same 20 ft grid.
- A cell appears on a layer only after at least 3 distinct riders have contributed data to it on that specific layer. A user's bumpiness contribution doesn't unlock their one-off brake event or close call on a sparse cell — the threshold applies per feature.
- A per-user eager publish toggle exists alongside the sharing toggle. With it on, your own contributions appear immediately without waiting for other riders — handy for seeding a region with no other contributors yet, but it makes your routes inferable to anyone who looks. Off is the default.
- No personally identifying data, no routes, no timestamps, and no per-user attribution are included in the public output. Each layer shows only the summed-and-averaged or counted numbers per cell.
- Only mounted-mode rides contribute (matching the iOS Bump Map's default filter); pocket-mode rides never reach the public aggregates.
- One toggle controls all three features at once — there's no per-feature opt-out. If you don't want close calls or brake events publishable but want bumpiness to be, turn sharing off.
Toggling sharing off triggers an immediate, atomic subtraction of your contributions from all three public aggregates.
Retention and deletion
- Local-only mode (no paired account): everything lives on your device. Uninstalling the app deletes it.
- Paired-account mode: uploaded rides persist on the server until you delete them or close your account. There is no time-based purge.
- Public-map contributions: withdrawing consent at /settings/privacy triggers an immediate, atomic subtraction from the public aggregate. Once subtracted, your data is no longer represented in the public map's cell sums or counts.
- API tokens: revoke any time at /settings/tokens. Tokens are stored as a SHA-256 hash; the plaintext is shown exactly once at creation and never retrievable afterwards.
- Account deletion: a self-service flow at
/settingsis on the roadmap. In the meantime, email me@jordaneccl.es and we will delete your account, all associated rides, and all aggregate contributions within seven days.
Third parties and tracking
- BumpyRide does not share data with any third parties — not for analytics, not for advertising, not for any other purpose.
- The app contains no analytics SDKs, tracking SDKs, or ad SDKs.
- The app contains no in-app advertising.
- The only external network destination is bumpyride.me itself — and only when you have paired a web account.
Children
BumpyRide is not directed at children under 13 and does not knowingly collect data from them. If you believe a minor has shared data with us, email me@jordaneccl.es and we will delete it.
Your rights (California, EU, and everywhere else)
Wherever you live, you have the right to access, correct, and delete the data BumpyRide holds about you. We use the same mechanism for every region:
- Access: your data is visible at /rides, your aggregate at /bump-map, and your settings at
/settings. - Correct: rename or trim rides from the iOS app; the change syncs to the web.
- Delete: see the “Retention and deletion” section above.
Changes to this policy
We will communicate changes to this policy by updating this page and bumping the effective date at the top. There is no separate notification mechanism; if you have a bumpyride.me account, we will also email you about any change that meaningfully expands what data we collect or who has access to it.
Contact
Questions about this policy? Email me@jordaneccl.es.