diff --git a/apps/journal/app/routes/legal.privacy.tsx b/apps/journal/app/routes/legal.privacy.tsx
index c8c758d..70fcef7 100644
--- a/apps/journal/app/routes/legal.privacy.tsx
+++ b/apps/journal/app/routes/legal.privacy.tsx
@@ -13,7 +13,7 @@ export default function PrivacyPage() {
Datenschutzerklärung / Privacy Policy
- Last updated: 2026-04-17
+ Last updated: 2026-04-18
{/* GDPR formal sections */}
@@ -134,8 +134,9 @@ export default function PrivacyPage() {
there are no user accounts, no tracking, and no analytics on your routes.
- - No cookies (except ephemeral session state)
+ - No cookies, no localStorage, no sessionStorage
- No user accounts or login
+ - No browser-side error tracking (Sentry is not loaded in the Planner)
- No route data is stored permanently without your action
- Session data is automatically deleted after 7 days of inactivity
@@ -160,22 +161,28 @@ export default function PrivacyPage() {
Error Tracking (Sentry)
- Both apps use Sentry for
- error monitoring. This helps us find and fix bugs quickly.
+ We use Sentry for
+ error monitoring, scoped narrowly by design.
+ Where Sentry runs:
+
+ - Journal, logged-out: server-side only. The browser-side Sentry SDK is not loaded until you log in.
+ - Journal, logged-in: Sentry initialises in the browser after login and is torn down on logout.
+ - Planner: server-side only. The browser-side Planner does not load Sentry at all.
+
What Sentry collects:
- - Error details: stack traces, error messages, browser/OS info
+ - Error details: stack traces, error messages, browser/OS info derived from the User-Agent
- Performance traces: page load times, route navigation timing
- - Session replays on error: a recording of the session leading up to an error (DOM snapshots, not video)
- - User context (Journal only): only the user ID (not username or email) is attached to errors for debugging
- - Session ID (Planner only): the anonymous session ID is attached to errors
+ - User ID (Journal, logged-in only): just the user ID — not username, email, or IP
What Sentry does NOT collect:
+ - Session replays or DOM recordings — replay integration is not installed and sample rates are 0
+ - IP addresses, cookies, or full HTTP headers —
sendDefaultPii is set to false everywhere
- Route or GPX data
- Passwords or passkey credentials
- - Form input contents (masked in replays)
+ - Form input contents
Data retention:
@@ -207,6 +214,13 @@ export default function PrivacyPage() {
Sentry (Functional Software Inc.) — error tracking, as described above
OpenStreetMap — map tiles are loaded from OSM tile servers. OSM's privacy policy applies to tile requests.
BRouter — routing requests are processed by our self-hosted BRouter instance. No data is sent to third parties for routing.
+
+ Overpass API — POI overlay data is fetched via the Overpass API. Requests are proxied
+ through our own server (/api/overpass), so the upstream Overpass host sees our server rather
+ than end users' IP addresses or browsers. The current upstream is{" "}
+ overpass.private.coffee,
+ which operates without query logging. A self-hosted Overpass instance is planned.
+
SMTP provider — transactional emails (magic link, welcome) are delivered via SMTP. Self-hosters configure their own provider.