Privacy Policy for Roadbook
Last updated: October 29, 2026
Roadbook ("we," "us," "our") is a motorcycle and car pleasure-ride planning application available at app.roadbookgps.com (the "Service"). This policy explains what information the Service collects, why, and what your rights are.
1. Who is responsible for your data
Roadbook is operated by Jeremy Tangren, a sole proprietor / individual developer, not a company. For any privacy question, use the contact details in Section 10.
If you are in the European Economic Area (EEA), the United Kingdom, or Switzerland, Jeremy Tangren is the "data controller" for the personal data described in this policy under the General Data Protection Regulation (GDPR) and equivalent UK law.
2. Information we collect
2.1 Account information (only if you choose to sign in)
Roadbook works fully offline without an account — planning and saving rides on your own device never requires signing in. If you choose to sign in with Google to sync your saved rides across devices, we receive:
- Your email address
- A unique account identifier issued by our authentication provider (Supabase, via Google OAuth)
We do not receive your Google password, and we do not request access to your Google contacts, photos, or other Google data beyond basic sign-in identity. When you create an account, the site operator may receive a one-time email (via Resend, the same service that delivers Contact Me messages) with the email address and account identifier on that new account, so they know someone signed up. You also receive a one-time welcome email at the address on that account. Neither mail is sent again on later sign-ins.
2.2 Ride and route data
When you plan a ride — waypoints, routes, saved trip names, journal notes you write about a ride — that data is stored on your device (via your browser's local storage). If you sign in and enable cloud sync, that same ride data is also stored in our database (hosted by Supabase) so it can follow you to another device. This data is yours: it describes the rides you planned, not who you are, and we do not read, analyze, or repurpose the content of your routes or notes beyond storing and returning them to you.
Saved rides. If you are signed in (every plan includes saved rides), each ride you record is saved with its trip (see Section 2.3). If you are signed in and that trip is synced to your account, the ride's summary figures are stored with your account too, so your other devices can show them: when the ride started and ended, its distance, the peak lean to each side and the average lean, the four G-force peaks (accelerating, braking, left and right), and the top and average moving speed. The path you rode and the lean, G-force, speed and elevation readings along the ride are never sent: they stay on the phone that recorded them. Like the device, your account keeps the newest 20 rides per trip and removes the oldest when a new one arrives. Deleting a ride also deletes it from your account. A trip you delete keeps its rides on your account until the trip itself is erased there, the next time you sync at least 30 days after deleting it; deleting your account deletes them all.
Notes on a ride. If your plan includes the trip journal, you can write a journal note about a recorded ride from that ride's page. It is an ordinary journal entry of the ride's trip, stored and synced exactly as the section above describes, with one extra field: the ID of the ride it is about, so the note can link to it. The ID is a random number; it does not carry the ride's figures, path or readings, which are stored as described above. Deleting a ride deletes the notes you wrote about it, on this device, in your account and on your other devices (the app tells you how many before you confirm). The same happens when the app removes a ride on its own because a trip keeps only its newest 20, and when you delete the trip.
2.3 Location information
To plan a route, Roadbook needs the locations you search for or drop a pin on. If you use "use my current location," your browser will ask for permission to share your device's GPS location goes to Roadbook's own map service (a proxy we run on Cloudflare), never straight from your browser to the map provider. Routing, place search and location lookups all go through it, and it asks the map/routing provider (Stadia Maps, see Section 4) on your behalf. To avoid paying for the same lookup twice, the service keeps copies of anonymous answers in Cloudflare's shared edge cache: a reverse lookup (the place name for a point, keyed to a point about 11 m across) for up to 30 days, a search for up to 1 day, and a route for up to 7 days. A cached route request includes the coordinates it was asked about, which can be a live start point if you rerouted mid-ride. These copies carry no account ID, email address, or other identifier, so we cannot tie one to you, but we do not control when Cloudflare's cache drops a copy before those limits.
If you are signed in, a ride you record keeps its lean and G-force readings along the ride, by default also your GPS speed and elevation along it (you can turn that off in Settings, "Keep speed and elevation on saved rides", for rides recorded afterwards), and the path you rode, on your device only, with the first and last 300 m of the path left out. Only the ride's summary figures can sync to your account (Section 2.2). These saved readings and the path are never uploaded, synced to your account, included in a shared link, or attached to a bug report. The path leaves your phone only if you tap "Export GPX" or "Share card" on a ride's page: the app then builds a GPX file or a picture of the route on your phone and hands it to you, through your phone's share sheet or as a download. It goes nowhere unless you send it, we never receive a copy, and it holds the exact route you rode, near where it started and ended, so share it only with people you trust. The GPX file also holds the time of each point (so when you rode, and how fast), the elevation if the ride kept it, and the trip's name; the picture shows the trip's name and the date. Coordinates in the file are rounded to about 1 m, and the export box has a switch to leave the trip's name off both. Deleting the trip deletes its rides and their paths. (Separately, a bug report you file while a ride is under way includes the last few minutes of the path you are riding right then, whether or not lean recording is on — see Section 2.6.)
Home location. If you save a Home location, its point and label are kept on your device. If you are signed in, they are also stored with your account (in Supabase) so your Home follows you to your other devices. A route you share (a link, the "Download file" copy, or "Open in Google Maps") holds the exact point of every stop, and a link or file also holds each stop's label. If one of your stops is your saved Home, the share box says so and offers to leave its label off; its point stays, so the route still works. This check happens on your device only.
GPS Mode destinations. GPS Mode remembers the last 20 places you started a ride to and up to 3 favorites you name, each as a label and a point. They are kept on your device, and if you are signed in they are also stored with your account so they follow you to your other devices.
Within the app, only your own account can read your synced Home and GPS Mode destinations (the same row-level security as the rest of your synced data, see Section 8). Signing out or switching accounts removes them from the device, and deleting your account deletes them.
2.4 Usage and technical data
Like most websites, our hosting provider (Cloudflare) automatically logs standard technical information for every request — IP address, browser type, the page or asset requested, timestamps, and general geographic region inferred from IP. This is standard web server log data used for security, abuse prevention, and diagnosing outages. We do not cross-reference these logs with your account.
2.5 Cookies and local storage
Roadbook uses your browser's local storage and IndexedDB to keep the app working offline and to remember your saved rides, settings, and (if signed in) your session — this is functionally necessary and not an optional cookie category. If you sign in, our authentication provider sets a session cookie/token so you stay signed in between visits.
We do not use advertising cookies, advertising pixels, or cross-site ad tracking of any kind. (Cloudflare's cookie-free page-view beacon is described in Section 3.)
2.6 Bug reports
If you are signed in, you can send us a bug report from the app. We use what a report contains only to find, fix, and troubleshoot bugs. A report contains:
- The title and description you write, and any screenshots you attach.
- Ride diagnostics, added automatically by the app: the app version, your browser's description of itself (browser, operating system and device), whether you were online, what the app was doing, your route settings, how much storage its offline caches use, and the length and time of the route you have open (without its stops).
- Location, only if the box “Include my location and recent path” is ticked: your current GPS position (with speed, heading and accuracy), every stop in the route you have open with its coordinates and label (which can be your home address), the last 120 GPS points of the path you are riding (a point is kept every 5 seconds or 15 m, so this is usually the last 2 to 10 minutes of riding), and up to 10 recent reroutes — where you left the route, where the new line was to rejoin it, the new line itself and its turn instructions.
- If you record rides: summary figures from the ride being recorded or the most recent one (peak lean and G-force, sensor calibration values and counts, never a position), and — unless you untick the box in the form — the sensor recording of the most recent ride recorded on this device: motion-sensor readings with GPS speed and altitude, but no position.
The location box starts ticked while a ride is under way (you are navigating or recording a ride) and unticked otherwise. You can change it either way before you send, and the app does not remember your choice: the next report starts from the same default again. With the box unticked, the report contains no position, stops, path or reroute lines, and our bug-report service does not add any. The form's “Ride diagnostics” section shows exactly what will be sent, including how many stops, path points and reroutes, and changes when you tick or untick the box. The rest of the ride diagnostics are always included. Your name, email address and account ID are not included in the report.
The report goes through our own bug-report service, which checks it with Cloudflare Turnstile (Section 3b) and files it as a task in a private project in Asana, the issue tracker we use, where only the site operator can see it. We delete a report — the whole task, including its screenshots and ride diagnostics — within 90 days after the issue it reports is fixed (when we mark the task complete). Because a report is not linked to your account, deleting your account does not delete the reports you sent. To have a report deleted sooner, contact us (Section 10) with roughly when you sent it and its title.
3. Analytics
Two separate systems fall under "analytics" here — a page-view beacon run by our hosting provider, and a first-party usage log we built ourselves. (Error monitoring is a third, separate system — see §3a below.)
A. Cloudflare Web Analytics (page views). Cloudflare, our hosting provider, injects a small first-party-to-Cloudflare beacon script on every page load. It is not an advertising pixel and is not used for cross-site advertising. It records that a page on this site was viewed — path, referrer, browser/OS, and coarse geography. Per Cloudflare's own description of this product, it does not use cookies and does not track you across sites we don't operate. This is injected by Cloudflare at the hosting layer and is not controlled by the in-app "Share anonymous usage data" toggle, because it runs outside the app bundle that toggle governs.
B. First-party product telemetry. We also run a small, first-party, self-hosted product analytics system — our own Cloudflare Worker, in the same Cloudflare account as the rest of Roadbook, not a third-party analytics vendor. It records that a handful of specific things happened (for example: "a turn-by-turn ride started," "the map failed to load," "someone exported a route as GPX") so we can tell whether features work and whether the app is used at all. Each event carries only an event name, whether you're on mobile or desktop, whether you're using the website or the iPhone app, the app version, and sometimes a short category we chose in advance (for example "network" or "denied") — never an account ID, cookie, or other identifier that could link events together or back to you, never your coordinates, never a route/place name, and never anything you typed. Our own servers also keep aggregate counts of failed requests (for example a routing service that did not answer), with no account or location attached. The list of things recorded includes whether speed camera data failed to load, how the "Avoid speed cameras" option turned out (with a rough count of cameras near the route, such as "1-2" or "3-5"), and, once per ride, that a camera warning was shown or spoken. The list also includes whether road-closure, accident and traffic reports failed to load, how a reroute around a closed road turned out (for example "applied" or "failed"), and which kind of traffic warning (closure, heavy traffic or accident) was spoken. These carry no camera name, road name, place or street.
If your phone has no connection when an event happens, the app keeps that event on your device (at most 200 events, for at most 7 days) and sends it when you are back online. The saved events hold the same fields as above and nothing else; nothing identifies you, and they are not sent anywhere until the connection returns. If you turn the toggle off, or your browser sends a Global Privacy Control or Do Not Track signal, anything saved is deleted and not sent.
System B is on by default, and you can turn it off in the app's sidebar ("Share anonymous usage data"). It also turns itself off automatically if your browser sends a Global Privacy Control or Do Not Track signal — you don't need to find the toggle for that to take effect. Simulated/test rides (a developer tool, not something real riders do) are always excluded. As noted above, that toggle does not affect system A.
We do not use Google Analytics, Meta Pixel, session-replay tools, or any advertising/tracking analytics. Analytics data is never combined with your account or ride data, and is never sold.
3a. Error monitoring
We use Sentry, a third-party error-monitoring service, to learn about crashes and bugs. This covers two things: errors in the app running in your browser (for example, a screen failing to render), and errors in the small backend services that power route and place search, bug reports, subscriptions, fuel-stop suggestions, the Contact Me form, and our usage analytics. This is separate from the first-party analytics described above and exists purely to help us fix things that are broken.
What Sentry receives: the error message and stack trace, and — for browser errors — the app version and basic browser/device info (browser name, OS, screen size). We configure Sentry to not record your IP address, and we do not enable Sentry's session-replay product — no recording of your screen or interactions, ever. We never attach your account ID or email address to an error report, and backend reports have sign-in tokens removed.
An error report also carries a short record of what happened just before the error, and, for a backend error, a few details of the request that triggered it. Because of that, a report can include:
- Browser errors: your recent actions in the app: which kind of button or field you tapped (its element type and style class, never its label, name or text, so not the name of a saved trip, place or favorite), and the addresses of the web requests it made, without their search terms or anything after a "#", so a shared-route link's code is not included.
- Backend errors: the error message and stack trace, the address of the request without its query string, and a short list of ordinary request headers (browser type, content type, language, the Cloudflare request ID and the site that made the request). Since 2026-09-30 these reports no longer include query strings, request bodies or other headers, so the search text, coordinates, bug-report text and messages you send are not part of them. Since 2026-10-07 a web address inside an error message is also cut back to its site and path, in browser and backend reports. If a failure puts other text into the error message itself, that text is reported as written.
We use error reports only to find, fix, and troubleshoot bugs.
Browser errors are on by default and turn off under the same conditions as the analytics above (the "Share anonymous usage data" toggle, and automatically on a Global Privacy Control / Do Not Track signal). Backend service errors are not tied to that toggle — a backend service either logs its own crash or it doesn't, independent of which rider's request triggered it, the same way it already logged errors to its own console before we added Sentry. A backend error report is not linked to your account. It contains only the request details listed above.
3b. Bot verification (Cloudflare Turnstile)
We use Cloudflare Turnstile, a CAPTCHA-style challenge, to confirm a real browser — not an automated script — is behind certain requests. Three places in Roadbook use it:
- The Contact Me form, before a message is sent.
- The bug report form (Section 2.6), before a report is sent.
- Anonymous ride routing. If you plan a route without signing in, Roadbook asks Turnstile to confirm you're a real visitor before it will request a route on your behalf, and periodically re-confirms this for a returning visitor. This exists to stop automated scripts from running up the routing bill on our account, not to track you — most of the time Turnstile completes this silently, with nothing to click and nothing shown on screen; it only shows a visible checkbox when Cloudflare's own risk signals think a request looks automated.
Turnstile does not see the content of anything you type — not your Contact Me message or bug report, not your route waypoints or search terms. Per Cloudflare's own documentation, what it does process is a small set of technical signals about your browser and connection (your IP address, browser/TLS fingerprint, and the site involved) used solely to tell human traffic from automated traffic, and to improve that detection over time. Cloudflare is the data controller for that narrow signal-processing purpose; see Cloudflare's Turnstile Privacy Policy for the full detail.
4. Who we share data with
We share data only with the service providers that make Roadbook work, and only to the extent needed for them to do their job:
| Provider | Purpose | What they receive |
|---|---|---|
| Supabase | Authentication and cloud database, for users who sign in | Email, account ID, synced ride data (including saved rides' summary figures, never their path), your saved Home location, and your GPS Mode recent and favorite destinations |
| Sign-in (OAuth) | Basic profile info (email) when you choose to sign in with Google | |
| Cloudflare | Hosting, content delivery, DDoS protection, storage of our own copy of the map data (Cloudflare R2), Cloudflare Web Analytics (page-view beacon) and the first-party analytics Worker described in section 3, and Turnstile bot verification (Contact Me, bug reports and anonymous ride routing — see section 3b) | Standard web request logs (IP, browser, request path), including requests for the map tiles of the area you are viewing (including, outside our own map coverage, the tile numbers Roadbook's map service then requests from Protomaps) and, when you use Suggest a ride, for our list of twisty roads in the region (roughly 300 km across) around the ride's return point, which can be your home; page-view analytics (path, referrer, browser, coarse geography); for Turnstile specifically, your IP address and browser/TLS fingerprint signals (never message or route content) — see section 3b |
| Sentry | Error monitoring — reports when something breaks, in your browser or in a backend service | Error messages, stack traces, and a short record of what happened just before the error; browser errors also include app version and basic browser/device info. A report can include recent actions, trip or place names, a shared-route code, and search text, coordinates or other request content (see section 3a). IP address is not stored; no session recording. |
| Resend | Delivers Contact Me form messages to the site operator, a one-time “new account created” notice to the site operator, and a one-time welcome email to you when you create an account | Contact Me: the subject, message, and reply-to email you enter (not stored in Roadbook’s database). New-account operator notice: your sign-in email and account identifier. Welcome email: sent to your sign-in address; the body does not include that address |
| Stadia Maps | Route calculation and place search (geocoding), through Roadbook's own map service | Search queries and coordinates you submit while planning a route, your current location when you use it as a starting point, and your position when a ride reroutes |
| TomTom | Live traffic along your route, drawn on the map when that feature is on for your plan (© TomTom) | The map tile numbers (each tile covers roughly 4 km) that your route passes through, requested by Roadbook's own map service, not your browser, so TomTom sees that service's server address and not your IP address, account or exact position. Roadbook keeps each traffic tile in Cloudflare's shared edge cache for 2 minutes |
| TomTom road closures and incidents | Road closures, accidents and heavy-traffic reports along your route, spoken as warnings and used to reroute you around a closed road, when live traffic is on for your plan (© TomTom) | A map area covering the next stretch of your route (snapped to a coarse 0.1 degree grid, so roughly your region, not your position), requested by Roadbook's own map service, which keeps it in Cloudflare's shared edge cache for 2 minutes. When a closed road is on your route, small rectangles around the closed stretch (public road data, not your position) are sent with your route request to Stadia Maps, our routing provider, so the new route avoids it |
| Speed camera locations (OpenStreetMap contributors and city public lists) | Known speed camera and red-light camera locations, shown on the map and used for warnings and for the "Avoid speed cameras" option, when that feature is on for your plan | The camera data for the map areas your route passes through (each area is about 40 miles across, so roughly your region, not your position), requested by Roadbook's own map service, which keeps it in Cloudflare's shared edge cache for 6 hours. The data comes from OpenStreetMap contributors and from city public lists. When you turn on "Avoid speed cameras", small rectangles around known camera locations (public data, not your position) are sent with your route request to Stadia Maps, our routing provider |
| Protomaps | Map data for areas outside our own copy, which covers roughly the contiguous United States (our copy, and the map's fonts and icons, come from Roadbook's own servers) | Requests for the map tiles of an area you view outside that coverage (such as Alaska, Hawaii, most of Canada, southern Mexico or Europe); a request names only the map area on screen. These requests are made by Roadbook's own map service, not your browser, so Protomaps sees that service's server address and not your IP address, account or exact position. Maps you download for offline use never come from Protomaps |
| Open-Meteo | Weather forecasts, and sunrise and sunset times, along a planned route | Points along your route, rounded to about 1 km (two decimal places), and how many hours or days ahead to forecast. The route's start (which can be your home) is sent much less precisely: moved to a coarse grid, so the point Open-Meteo receives is within about 2 miles of the real start and usually about a mile off. Your browser asks Open-Meteo directly, so Open-Meteo also sees your IP address |
| OpenStreetMap (Overpass API) | Fuel-stop suggestions, as a fallback when our own fuel-station data cannot answer (outside the US and Canada, or when it has no result or fails) | Rectangular map areas around parts of your route, sent by our fuel-stop service, not your browser, so not your IP address |
| Stripe | Payments for a paid plan (checkout and subscription management) | Your email address and account ID. Card and payment details you enter go to Stripe's own payment pages; Roadbook never sees them |
| Asana | Issue tracker where bug reports are filed (see section 2.6) | Everything in a bug report you send: your text, screenshots, ride diagnostics (including location data) and any sensor recording — but not your name, email address or account ID |
Each of these providers processes data under its own privacy policy and only as our data processor — none of them are authorized to use your data for their own purposes, and none of them are permitted to sell it. Three exceptions: Open-Meteo and OpenStreetMap's Overpass API are free public services we use without a contract, so they handle what they receive under their own policies; and Stripe, as a payment provider, also keeps payment records under its own legal obligations (see Section 5).
We do not share, rent, or sell your personal data to advertisers, data brokers, or any other third party for their own marketing or commercial purposes. We do not run ads in Roadbook.
We may disclose information if required by law, or in the unlikely event of a merger, acquisition, or sale of assets — in which case we'll make reasonable efforts to notify you and this policy would continue to apply to your data under the new operator.
5. Data retention
- Local device data: stays on your device until you delete it (via the app or by clearing browser storage) — this is entirely under your control.
- Account and synced data (rides, saved rides' summary figures, Home location, GPS Mode destinations): retained while your account is active. If you delete your account, we delete your account record and synced data within 30 days, except where a backup cycle briefly retains it (deleted permanently on the next backup rotation, no later than 90 days).
- Payment records (Stripe): when you delete your account, we cancel any active subscription and ask Stripe to delete your customer record there (your email address, billing details and tax information). Stripe still keeps the invoices and payment records the law requires it to keep (for tax, accounting and fraud-prevention purposes), for as long as that law requires, under its own privacy policy. We cannot delete those, and they are not used to run Roadbook. If we cannot cancel the subscription or remove the customer record, the account is not deleted and you can try again.
- Bug reports (Asana): deleted, with their screenshots and ride diagnostics, within 90 days after the issue they report is fixed. They are not linked to your account, so deleting your account does not delete them — ask us to delete yours sooner (Section 10). See Section 2.6.
- Server logs (Cloudflare): typically retained for a limited period (a matter of weeks) for security and abuse-prevention purposes, per Cloudflare's own retention practices.
6. Your rights
6.1 Everyone
You can request a copy of the account and ride data we hold about you, ask us to correct it, or ask us to delete it, by contacting us (Section 10). Because Roadbook stores most of your data locally by design, you can also delete your saved rides — and the rides and paths recorded with them — directly in the app at any time, and delete cloud-synced data by deleting your account.
6.2 If you're in the EEA, UK, or Switzerland (GDPR)
You have the right to:
- Access the personal data we hold about you
- Rectify inaccurate data
- Erase your data ("right to be forgotten")
- Restrict or object to certain processing
- Data portability — receive your data in a portable format
- Withdraw consent at any time, where we rely on consent (e.g., signing in)
Our legal basis for processing account data is your consent (signing in is opt-in) and, for the underlying ride-planning functionality, our legitimate interest in providing the Service you asked for. You also have the right to lodge a complaint with your local data protection authority.
6.3 If you're a California resident (CCPA/CPRA)
We do not sell or "share" (as that term is defined under the CPRA, including for cross-context behavioral advertising) your personal information, and never have. You have the right to know what personal information we collect, to request deletion, and to non-discrimination for exercising these rights.
7. Children's privacy
Roadbook is not directed to, and we do not knowingly collect information from, anyone under the age of 16. If you believe a child has provided us with personal data, contact us and we'll delete it.
8. Security
We rely on industry-standard practices from our providers — encrypted connections (HTTPS/TLS) for all traffic, Supabase's row-level security so your data is only ever accessible to your own account, and no storage of plaintext passwords (sign-in is delegated entirely to Google). No method of transmission or storage is 100% secure, but we don't take shortcuts here.
9. Changes to this policy
If we make a material change to how we handle your data, we'll update the "Last updated" date above and, for significant changes, note it prominently in the app.
10. Contact
Questions, requests, or concerns about this policy or your data — or anything else about
Roadbook — use the in-app Contact link (sidebar footer or account menu), or
email:
Email:
[email protected]