Adds a simple legal-archive folder that preserves the full text of the
Terms, Privacy Policy, and Impressum at each version, plus a small
renderer script so future snapshots are mechanical:
python3 scripts/render-legal.py terms > docs/legal-archive/terms-YYYY-MM-DD.md
Why:
- Terms are per-user contract. users.terms_version maps each user to a
file in this folder so we can always tell what text they agreed to.
- Privacy is informational but GDPR Art. 13/14 still expects us to be
able to say what the policy disclosed on a given date.
- Impressum archived for symmetry; cheap.
How it works:
- scripts/render-legal.py reads the TSX source, resolves operator.*
placeholders from operator.ts and TERMS_VERSION / PRIVACY_LAST_UPDATED
from legal.ts, strips JSX tags, and prints clean markdown to stdout.
- A README in the folder explains when to bump and when to add a
snapshot (material change only, not typo fixes).
Seeded entries:
- terms-2026-04-19.md
- privacy-2026-04-19.md
- imprint-2026-04-19.md
No automation / CI check yet — trust-based process documented in the
folder's README. Revisit if discipline slips.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
9.6 KiB
Privacy Policy — trails.cool
Datenschutzerklärung / Privacy Policy
Stand / Last updated: 2026-04-19. Die deutsche Fassung ist maßgeblich. The German version is authoritative; English summaries follow each section.
- Verantwortlicher
Verantwortlich für die Datenverarbeitung im Sinne der DSGVO ist:
Ullrich Schäfer
Mehringdamm 87
10965 Berlin
Germany
E-Mail:
English. Data controller under GDPR is the party named above. Contact for any data-protection matter: legal@trails.cool.
- Erhobene Daten und Zwecke
Wir verarbeiten nur die Daten, die für den Betrieb der jeweiligen Funktion erforderlich sind. trails.cool besteht aus zwei Teilen: dem Journal (trails.cool, mit Konto) und dem
Planner (planner.trails.cool, anonym).
Kontodaten (Journal): E-Mail-Adresse, Benutzername, Anzeigename, Passkey-Public-Key. Zweck: Kontoverwaltung und Anmeldung.
Nutzerinhalte (Journal): Routen (GPX-Daten, Geometrie, Titel, Beschreibung) und Aktivitäten (Titel, Beschreibung, Datum, Verknüpfung zu Routen). Zweck: Speicherung und Anzeige innerhalb des Dienstes.
Anmeldedaten (Journal): kurzlebige Magic-Link-Token (zur E-Mail-basierten Anmeldung). Zweck: Authentifizierung.
Sitzungscookie (Journal): eine zufällige Sitzungs-ID nach dem Einloggen. Zweck: Authentifizierung während der Sitzung.
Planner-Sitzungsdaten: anonyme Sitzungs-ID, kollaborativer Zustand (Wegpunkte, Notizen). Keine Zuordnung zu einer Person. Zweck: gemeinsames Planen von Routen.
Server-Logfiles: IP-Adresse, Zeitstempel, HTTP-Methode, Pfad, Statuscode, User-Agent. Zweck: Sicherheit, Betrieb, Fehlersuche. Details siehe Abschnitt 4.
Fehlerdaten (Sentry): Stacktraces, Fehlermeldungen, Browser-/OS-Information aus dem User-Agent, Performance-Metriken. Bei eingeloggten Journal-Nutzer:innen zusätzlich die Nutzer-ID (keine E-Mail, kein Benutzername). IP-Adressen werden nicht aktiv gespeichert, ebenso keine Cookies und keine Formulareingaben.
English. The Journal stores only what you provide (account details and your own routes/activities) plus short-lived auth artefacts. The Planner is anonymous and holds only ephemeral session state. Server logs and Sentry error data are covered separately below.
- Rechtsgrundlagen
Art. 6 Abs. 1 lit. b DSGVO (Vertragserfüllung):
Kontoführung, Anmeldung per Passkey oder Magic Link, Speicherung und Anzeige der von Ihnen erstellten Routen und Aktivitäten, Versand notwendiger Transaktions-E-Mails, Bereitstellung anonymer Planner-Sitzungen. Ein Konto sowie die Bestätigung der Nutzungsbedingungen sind Bestandteil dieses Nutzungsvertrags – sie sind keine Einwilligung im Sinne von Art. 6 Abs. 1 lit. a DSGVO.
Art. 6 Abs. 1 lit. f DSGVO (berechtigte Interessen):
kurzzeitige Server-Logfiles zur Sicherung des Betriebs und zur Missbrauchsabwehr, Rate-Limiting, Fehlermonitoring über Sentry zur Sicherstellung der Funktionsfähigkeit des Dienstes.
English. Contract (Art. 6(1)(b)) covers everything account- and content-related; legitimate interests (Art. 6(1)(f)) cover short-lived server logs, rate-limiting, and error monitoring. We do not rely on consent for any of this.
- Server-Logfiles
Beim Aufruf der Dienste werden automatisch technische Informationen protokolliert:
IP-Adresse
Zeitstempel
HTTP-Methode, Pfad, Statuscode
User-Agent (Browser, Betriebssystem)
Zweck: Sicherheit, Betrieb und Fehlersuche.
Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO.
Speicherdauer: maximal 14 Tage, danach automatische Löschung. Eine Zusammenführung dieser Daten mit anderen Datenquellen findet nicht statt.
English. HTTP requests to our servers are logged (IP, timestamp, method, path, status, user-agent) for up to 14 days for operational and security purposes under Art. 6(1)(f), then deleted.
- Speicherdauer
Konto und zugehörige Inhalte: bis zur Löschung durch Sie
Planner-Sitzungen: automatische Löschung nach 7 Tagen Inaktivität
Magic-Link-Token: 15 Minuten
Server-Logfiles: maximal 14 Tage
Fehlerdaten (Sentry): 90 Tage
Hinweis Alpha: Während der Alpha-Phase behält sich der Betreiber ausdrücklich vor, die Datenbank zurückzusetzen oder einzelne Datensätze zu löschen. Dies kann zu Datenverlust führen, bevor Sie eine Löschung veranlassen. Details dazu in den Nutzungsbedingungen.
English. Account and content kept until you delete them. Ephemeral data (sessions, magic-link tokens, logs, Sentry events) deleted automatically on the schedules above. Alpha caveat: the operator may reset the database or delete individual records during alpha, which can cause data loss before you request deletion. See the Terms of Service.
- Empfänger und Drittanbieter
Wir geben personenbezogene Daten nur an die unten genannten Auftragsverarbeiter und Dritten weiter, und auch dort nur im jeweils notwendigen Umfang.
Sentry (Functional Software Inc.) – Fehler- und Performance-Monitoring. Was übermittelt wird: Stacktraces, Fehlertext, Browser-/OS-Informationen aus dem User-Agent, Performance-Daten; bei eingeloggten Journal-Nutzer:innen zusätzlich die Nutzer-ID. IP-Adressen werden nicht aktiv gespeichert ( sendDefaultPii ist deaktiviert), ebenso keine Cookies und keine vollständigen HTTP-Header. Keine Session-Replays. Sentry agiert als externer Dienstleister (Auftragsverarbeiter) für die Fehlerbehandlung. Da Sentry ein Anbieter mit Sitz in den USA ist, kann im Einzelfall eine Übermittlung personenbezogener Daten in ein Drittland im Sinne der Art. 44 ff. DSGVO stattfinden; wir stützen uns hierbei auf die von Sentry bereitgestellten Standardvertragsklauseln.
OpenStreetMap – Kartenkacheln werden beim Anzeigen der Karten direkt vom Browser von OSM-Tile-Servern geladen. Dabei werden IP-Adresse und User-Agent an OSM übertragen. Dies ist notwendig, um überhaupt eine Karte darzustellen; es gilt die
OSM Foundation Privacy Policy
.
Overpass API (POI-Daten) – POI-Abfragen laufen serverseitig über unsere eigene Route /api/overpass . Der Upstream-Dienst sieht nur unsere Server-IP, nicht die Ihrer Nutzer:innen. Aktueller Upstream: overpass.private.coffee
, der ohne Query-Logs arbeitet. Eine selbst gehostete Instanz ist geplant.
BRouter – Routenberechnung läuft auf einer von uns selbst gehosteten Instanz. Keine Weitergabe an Dritte.
E-Mail-Versand – Transaktions-E-Mails (Magic Link, Willkommensnachricht) werden über einen konfigurierten externen SMTP-Dienst versendet. Dabei wird die E-Mail-Adresse der Empfänger:in an diesen Dienst übergeben. Selbst-betriebene Instanzen konfigurieren ihren eigenen Mailserver.
Hosting – Die Dienste werden in Rechenzentren innerhalb der EU betrieben. Ein Auftragsverarbeitungsvertrag mit dem Hoster besteht.
English. Third parties and what they receive: Sentry (error details, no IPs/cookies); OpenStreetMap tile servers (your IP and user-agent, directly from your browser, to load map tiles); Overpass (via our server-side proxy, so upstream only sees our server); BRouter (self-hosted, no third party involved); SMTP provider (your email address for magic link / welcome mail); hosting provider in the EU under a DPA.
- Ihre Rechte
Als betroffene Person stehen Ihnen die folgenden Rechte zu:
Auskunft (Art. 15 DSGVO)
Berichtigung (Art. 16 DSGVO)
Löschung (Art. 17 DSGVO)
Einschränkung der Verarbeitung (Art. 18 DSGVO)
Datenübertragbarkeit (Art. 20 DSGVO)
Widerspruch gegen Verarbeitung auf Basis berechtigter Interessen (Art. 21 DSGVO)
Zur Ausübung dieser Rechte genügt eine formlose E-Mail an
. Einen vollständigen Export Ihrer Routen und Aktivitäten können Sie jederzeit direkt in den Kontoeinstellungen herunterladen (GPX bzw. JSON). Ihr Konto samt Inhalten können Sie dort ebenfalls selbst löschen.
English. You have the standard GDPR rights (access, rectification, erasure, restriction, portability, objection). Email us to exercise them. Data exports and account deletion are also available directly in your account settings.
- Beschwerderecht
Sie haben das Recht, sich bei einer Datenschutzaufsichtsbehörde zu beschweren. Für uns zuständig ist:
Berliner Beauftragte für Datenschutz und Informationsfreiheit
Friedrichstr. 219
10969 Berlin
www.datenschutz-berlin.de
English. You have the right to lodge a complaint with a supervisory authority; ours is the Berlin data-protection commissioner (address above).
Privacy Manifest
A plain-language summary of what we do, for readers who prefer behaviour over paragraphs. Binding text is above.
Planner (planner.trails.cool)
Anonymous by design. No account, no identifier, nothing persisted past the session.
No cookies, no localStorage, no sessionStorage
No browser-side error tracking (Sentry is not loaded)
Session data is deleted automatically after 7 days of inactivity
Journal (trails.cool)
Holds only what you put in. Exportable any time, deletable any time.
Account: email, username, display name, passkey public key
Routes: GPX, geometry, title, description
Activities: title, description, date, linked route
GPX / JSON export available per object and overall
Sentry
Journal server: always on
Journal browser: only after login, torn down on logout
Planner: server only; the browser never loads Sentry
IPs not actively stored, no cookies, no full headers ( sendDefaultPii: false )
No replays (replay integration not installed, sample rates 0)
User ID only (no email/username) on Journal-logged-in events
What we don't do
Sell data
Show ads
Build user profiles
Run tracking pixels, analytics, or A/B tests
Security
Auth via passkey (WebAuthn) or magic link — no passwords stored
HTTPS + HSTS preload on all origins; session cookies httpOnly + Secure
CSP, X-Frame-Options, X-Content-Type-Options on every response
Containers run non-root; host firewall restricts to HTTP/HTTPS/SSH
Gitleaks + dependency audit on every PR
Vulnerability reports:
SECURITY.md