Datenschutzerklärung
Diese Erklärung beschreibt die BikeOtter-App und die Website bikeotter.app. Sie wurde geschrieben, indem wir gelesen haben, was die Software tatsächlich tut — welche Felder ein Live-Tracking-Punkt enthält, welche Löschroutine ihn wann entfernt, welche Hosts kontaktiert werden — statt nach einer Vorlage. Wo eine Grenze als Zahl angegeben ist, ist es die Zahl aus dem Code.
Version 1.10 · zuletzt aktualisiert am 9. Oktober 2026 · gilt für die App und für diese Website
Die Kurzfassung
- Es gibt keine Analyse-Tools und kein Crash-Reporting. Kein Google Analytics, kein Firebase, kein Sentry, kein Werbe- oder Attributions-SDK — weder in der App noch auf dieser Website. Nichts hier zählt dich mit.
- Der Großteil der App braucht gar kein Konto. Routenplanung, Routen senden, Fahrten laden, Regeln und Warnungen funktionieren alle ohne Anmeldung, und deine Einstellungen bleiben auf dem Telefon. Ein Konto gibt es nur für Live-Tracking, Fahrt-Benachrichtigungen per E-Mail, die Strava-Verbindung, die Routen-Synchronisierung, wenn du sie einschaltest (§3.2), und — wenn du Plus hast und es einschaltest — eine Sicherung deiner Einstellungen (§3.1).
- Deine Fahrtdateien und deine Stimme bleiben auf dem Telefon, und deine Routen auch, solange du die Routen-Synchronisierung nicht einschaltest. Die Spracherkennung läuft auf dem Gerät; eine Cloud-Sprachstufe gibt es bewusst nicht. Die Routen-Synchronisierung und das Speichern einer Route im Routenplaner auf dieser Website legen eine Kopie deiner Routen in deinem Konto ab (§3.2).
- Live-Tracking ist die eine Funktion, die deine Position veröffentlicht — an jeden, der den Link hat, für die Dauer der Fahrt. Herzfrequenz, Leistung und Trittfrequenz sind standardmäßig aus. Deine Positionspunkte und der Sitzungseintrag werden zusammen gelöscht, 7 Tage nachdem die Fahrt endet oder abläuft.
- Zwei Dinge tut die App ungefragt: Sie prüft beim Start über Shorebird, ob ein Code-Patch vorliegt, und diese Prüfung lässt sich nicht abschalten. Sie trägt keine Identität, die wir ihr mitgeben — aber sie erreicht einen Server. §10.1 erklärt genau, was wir wissen und was nicht. Und beim Start fragt sie RevenueCat, das für uns die Plus-Käufe abwickelt, ob du Plus hast (§10).
- Nichts wird verkauft, vermietet oder zu Werbezwecken weitergegeben. Niemals.
1. Wer verantwortlich ist
Verantwortlicher für die hier beschriebene Verarbeitung im Sinne von Art. 4(7) GDPR ist:
OpenBikeControl UG (haftungsbeschränkt)Ulrichstraße 24
71636 Ludwigsburg, Germany
E-Mail: support@bikeotter.app
Vollständige Firmenangaben stehen im Impressum. Einen gesetzlich vorgeschriebenen Datenschutzbeauftragten gibt es nicht; wende dich für alles auf dieser Seite an die Adresse oben.
2. Was dein Telefon nie verlässt
Folgendes liegt im eigenen Speicher der App auf deinem Gerät und wird von BikeOtter nirgendwohin hochgeladen. Es verlässt das Telefon nur, wenn du es selbst exportierst oder teilst.
- Deine Routenbibliothek, außer du schaltest die Routen-Synchronisierung ein oder speicherst Routen im Routenplaner auf dieser Website. Routen sind Dateien auf dem Telefon: Geometrie plus ein Index. Beim Teilen einer Route entsteht ein eigenständiger Link, der die Route in sich trägt; keine Route wird zum Teilen auf einen Server hochgeladen.
- Deine Fahrten. Vom Radcomputer geladene Fahrten und vom Telefon aufgezeichnete Fahrten werden als FIT- und GPX-Dateien auf dem Gerät gespeichert. Sie verlassen es nur, wenn du sie teilst oder wenn du den Strava-Upload eingeschaltet hast.
- Sprachsteuerung. Die Spracherkennung ist so konfiguriert, dass sie auf dem Gerät läuft, und Befehle werden zuerst von einer Offline-Grammatik interpretiert und dann, falls nötig, von einem Modell auf dem Gerät (Apple Foundation Models oder Gemini Nano). Eine Cloud-Sprach- oder Cloud-Sprachmodell-Stufe gibt es bewusst nicht — kein Audio und kein Transkript wird an irgendeinen Server gesendet.
- Deine Einstellungen, Regeln, gespeicherten Orte und die Konfiguration der Benachrichtigungs-Weiterleitung — außer du hast Plus und schaltest das Einstellungs-Backup ein. Dann liegt eine Kopie deiner Einstellungen und Regeln (nie deiner gespeicherten Orte) auf unseren Servern, damit du sie auf einem anderen Telefon wiederherstellen kannst, bis du das Backup wieder ausschaltest.
- An den Radcomputer weitergeleitete Benachrichtigungen (nur Android). Wenn du Benachrichtigungszugriff gewährst, liest die App Telefon-Benachrichtigungen, um sie auf dem Radcomputer anzuzeigen, und reicht sie direkt über Bluetooth weiter. Ihre Inhalte werden von der App nicht gespeichert und erreichen nie einen Server.
- Alles, was die App mit dem Radcomputer selbst tut — Koppeln, Routen senden, Fahrten laden, Warnungen auf dem Display — läuft über eine direkte Bluetooth-Verbindung zwischen deinem Telefon und deinem Gerät. Keine Hersteller-Cloud und kein BikeOtter-Server sitzt in diesem Pfad.
3. Dein Konto
Ein Konto ist nur für Live-Tracking, Fahrt-Benachrichtigungen per E-Mail, die Strava-Verbindung, die Routen-Synchronisierung (einschließlich des Speicherns einer Route auf dieser Website) und das optionale Einstellungs-Backup für Plus-Nutzer erforderlich. Alles andere funktioniert ohne Anmeldung.
Anmelden kannst du dich auf zwei Arten: mit einem Magic-Link an deine E-Mail-Adresse oder per Anmeldung mit Strava. Es gibt kein Passwort und kein Profil. Gespeichert wird ein Benutzereintrag bei unserem Backend-Anbieter (Supabase) mit deiner E-Mail-Adresse und Anmelde-Zeitstempeln, plus — bei Strava-Anmeldung — der Strava-Athleten-ID und dem Anzeigenamen.
Deine E-Mail-Adresse dient dazu, dich zu identifizieren, und ihr lokaler Teil (das Stück
vor dem @) wird zum Fahrernamen, den Zuschauer eines Live-Links sehen. Lautet
deine Adresse [email protected], sehen Zuschauer jane.doe. Denk daran,
wenn du wählst, mit welcher Adresse du dich anmeldest.
Um dein Konto und alles, was daran hängt, zu löschen, schreib an support@bikeotter.app von der Adresse, mit der du dich anmeldest. Die Kontolöschung kaskadiert: Live-Tracking-Sitzungen und ihre Positionspunkte, Gruppenfahrten, Nachrichten, die Zuschauer dir geschickt haben, deine gespeicherten Kontakte und ihre Gruppen, die Benachrichtigungseinträge, die Strava-Verbindung, dein Einstellungs-Backup und deine synchronisierten Routen gehen alle mit. Einen Selbstbedienungs-Button in der App gibt es noch nicht — die Löschseite nennt die Schritte, die vollständige Liste dessen, was gelöscht wird, und was danach noch aufbewahrt wird.
Die Wunschliste. Angemeldet — auf der Wunschliste oder in der App — kannst du eine Funktion vorschlagen und für andere stimmen. Ein Vorschlag speichert seinen Titel, die Beschreibung, die du angibst, und dein Konto als Urheber; eine Stimme speichert, welches Konto wofür gestimmt hat. Solange ein Vorschlag nicht angenommen ist, sehen ihn nur du und wir. Setzt du das Häkchen bei „Ihr dürft mich zu dieser Idee kontaktieren“, speichern wir diese Einwilligung beim Vorschlag und — wenn dein Konto keine Adresse hat, an die wir schreiben können (eine Strava-Anmeldung hat keine) — die Adresse, die du uns dafür gibst. Beides wird nur genutzt, um zu genau dieser Idee nachzufragen oder sie zu beantworten, und nichts davon wird je öffentlich angezeigt. Wir können dir außerdem in deiner Support-Konversation in der App antworten, ob du das Häkchen gesetzt hast oder nicht; wie bei jeder Support-Antwort geht eine E-Mail mit dem Hinweis darauf nur hinaus, wenn wir eine echte Adresse von dir haben. Eine Notiz des Entwicklers unter einem Vorschlag ist öffentlich, wie der Vorschlag selbst. Löschst du dein Konto, werden deine Stimmen gelöscht und die Einwilligung und die Kontaktadresse automatisch entfernt; ein Vorschlag, der schon auf der Liste steht, bleibt dort, ohne Verbindung zu dir.
3.1 Einstellungs-Backup (Plus)
Standardmäßig aus, und nur, wenn du es einschaltest. Das Einstellungs-Backup ist eine Funktion von BikeOtter Plus. Hochgeladen wird nichts, bis du es angemeldet unter Einstellungen → Einstellungs-Backup einschaltest und dem zustimmst, was es speichert. Ab dann hält die App eine Kopie deiner Einstellungen in unserem Backend — Supabase, derselbe Anbieter und dieselbe Region West EU (Ireland) wie alles andere in §10 —, damit du sie nach der Anmeldung auf einem neuen oder zweiten Telefon in einem Schritt wiederherstellen kannst. Solange es an ist, wird die Kopie wenige Sekunden nach jeder Änderung einer Einstellung automatisch aktualisiert, und Jetzt sichern aktualisiert sie auf Wunsch sofort.
Was die Kopie enthält:
- deine Einheiten und deine durchschnittliche Fahrgeschwindigkeit;
- dein Körpergewicht sowie deine Räder und dein Reifen-Setup, verwendet für die Reifendruck-Empfehlung;
- deinen Hauttyp, verwendet für die Sonnencreme-Erinnerung;
- deine Warnregeln — Vorlagen und eigene Regeln, und welche davon an sind;
- die Liste der Apps, die Benachrichtigungen an den Radcomputer weiterleiten dürfen — nur Paketnamen, nie der Inhalt einer Benachrichtigung;
- deine Schwellen für Herzfrequenz- und Leistungszonen;
- die Standard-Behandlung der Abbiegehinweise, Sortierung und Filter der Routenbibliothek und die Umweg-Schwelle für das Sprach-Rerouting;
- deine Einstellungen für gesprochene Warnungen;
- die Schalter fürs Live-Teilen („Geschwindigkeit teilen“, „Herzfrequenz & Leistung teilen“, Nachrichten erlauben) sowie die Schalter für automatisches Live-Gehen und das Senden der Mitfahrer an den Radcomputer;
- die Einstellungen für Strava-Auto-Upload und Upload-Notiz — nur, ob sie an sind, nie ein Strava-Token;
- ob das Diagnoseprotokoll an ist;
- das Telefonmodell, von dem die Kopie stammt (zum Beispiel „Pixel 8“), die App-Version, wann du eingewilligt hast und wann die Kopie zuletzt aktualisiert wurde.
Was sie nicht enthält: deine Routen, deine Fahrten, deine Position, gespeicherte Orte, gespeicherte Workouts, welche Radcomputer oder Sensoren du gekoppelt hast, Konto- oder Strava-Tokens, den Inhalt von Benachrichtigungen und das Diagnoseprotokoll.
Eine Kopie pro Konto. Jede Sicherung überschreibt die vorige; eine Historie gibt es nicht. Die Datenbank lässt nur dein eigenes Konto sie lesen — keine Zuschauer, keine anderen Fahrer.
Löschen. Schaltest du das Einstellungs-Backup aus, wird die Kopie sofort von unseren Servern gelöscht — so widerrufst du deine Einwilligung. Löschst du dein Konto, wird sie ebenfalls gelöscht. Ansonsten läuft sie nicht automatisch ab. Endet dein Plus-Abo, werden keine neuen Sicherungen mehr angelegt; die vorhandene Kopie bleibt, bis du das Backup ausschaltest oder dein Konto löschst, und ausschalten — und damit löschen — kannst du es auch ohne Plus.
Warum Einwilligung. Hauttyp und Körpergewicht können als Angaben über deine Gesundheit gelesen werden, deshalb beruht das Backup auf deiner ausdrücklichen Einwilligung (Art. 6(1)(a) und Art. 9(2)(a) GDPR, siehe §13). Das Einschalten ist diese Einwilligung; das Ausschalten widerruft sie.
3.2 Routen-Synchronisierung
Aus, bis du sie einschaltest. Die Routen-Synchronisierung hält eine Kopie deiner Routen in deinem BikeOtter-Konto, damit dieselbe Bibliothek in der App und im Routenplaner auf dieser Website (bikeotter.app/plan) erscheint. In der App wird nichts hochgeladen, bis du sie angemeldet unter Einstellungen → Cloud-Sync einschaltest. Auf der Website wird eine Route gespeichert, wenn du sie angemeldet speicherst, und einmal beim Anmelden: Eine Route, die du abgemeldet geplant hast und noch auf dem Bildschirm hast, wird dann in deinem Konto gespeichert. Sonst bleibt eine Route, die du planst, in deinem Browser (siehe §8). Die Kopie liegt bei Supabase, in derselben Region West EU (Ireland) wie alles andere in §10.
Was pro Route gespeichert wird: die Route so, wie die App selbst sie speichert, also die Linie mit ihrem Höhenprofil, die Abbiegehinweise und die Stopps (POIs) entlang der Strecke, der Untergrund entlang des Weges, die geplanten Stopps und das Routing-Profil, falls sie geplant wurde, etwaige Intervalle und ein Herzfrequenzplan, ihr Name, ob du sie mit einem Stern markiert hast, ihre Einstellung für Abbiegehinweise, woher sie stammt (zum Beispiel geplant, ein GPX-Import oder Strava) und ob sie auf einem Telefon oder auf der Website angelegt wurde, sowie ein Fingerabdruck ihres Inhalts, damit ein erneuter Import derselben Datei erkannt wird. Daneben: eine kurze Zusammenfassung (Distanz, Anstieg, Anzahl der Stopps, Startpunkt und der Kartenausschnitt, den sie abdeckt), damit sich die Bibliothek auflisten lässt, ohne jede Route zu laden, eine Revisionsnummer und Zeitstempel, damit deine Geräte erkennen, welche Kopie neuer ist, und, sobald du die Website bittest, eine Route an deinen Radcomputer zu senden, eine Markierung, die deinem Telefon sagt, sie beim nächsten Verbinden auf den Radcomputer zu bringen. Pro Konto speichern wir außerdem einen Zeitstempel: wann das Konto zuletzt synchronisiert hat.
Was auf dem Telefon bleibt: an welchen Radcomputer eine Route gesendet wurde und die Verknüpfung der App mit der Kopie auf diesem Gerät, die Kartenvorschaubilder in deiner Bibliothek und welche Route auf deinem Radcomputer aktiv ist.
Plus und Free. Mit Plus wird deine ganze Bibliothek synchronisiert. Ohne Plus werden bis zu 10 Routen in der Cloud gehalten: die, die du auf der Website angelegt hast, und die, die du in der App bewusst in der Cloud behältst. Ob du Plus hast, wird auf unserem Server anhand deiner Konto-ID geprüft. Endet dein Plus-Abo, wird nichts gelöscht: Die Routen, die schon in der Cloud sind, bleiben, du kannst sie weiterhin öffnen und löschen, und über 10 hinaus kommt nichts dazu.
Wer sie sehen kann. Die Datenbank lässt nur dein eigenes Konto deine Cloud-Routen lesen; keine Zuschauer, keine anderen Fahrer. Jede Änderung läuft über eine einzige Serverfunktion, die zuerst prüft, wer du bist. Solange die App geöffnet ist, horcht sie auf Änderungen an deinen Routen, damit eine Route, die du auf der Website speicherst, sofort auf dem Telefon erscheint.
Wie lange sie aufbewahrt wird. Eine synchronisierte Route bleibt, bis du sie löschst oder bis 24 Monate ohne Synchronisierung von deinem Konto vergangen sind, aus der App oder von der Website; dann werden alle Cloud-Routen des Kontos gelöscht, zusammen mit dem Zeitstempel seiner letzten Synchronisierung. Löschst du eine Route, wird ihr Inhalt sofort entfernt. Übrig bleibt für 180 Tage eine Markierung (ihre ID, eine Revisionsnummer, woher sie stammt und wann sie gelöscht wurde), damit deine anderen Geräte ihre Kopie ebenfalls löschen, statt sie erneut hochzuladen. Das Ausschalten der Synchronisierung beendet das Synchronisieren, löscht aber nicht, was schon in der Cloud liegt. Um eine Route von unseren Servern zu nehmen, wähle bei ihr in der App Nur auf diesem Telefon behalten (sie bleibt auf deinem Telefon), oder lösche sie auf der Website, was sie auch auf deinem Telefon löscht. Löschst du dein Konto, wird alles davon gelöscht (siehe die Löschseite).
4. Live-Tracking
Das ist die eine Funktion, die veröffentlicht, wo du bist. Sie ist aus, bis du sie startest, und sie endet, wenn die Fahrt endet.
Was ein geteilter Link ist
Der Start einer Live-Fahrt erzeugt eine Sitzung mit einem Freigabe-Token: 20 Zeichen aus einer kryptografischen Zufallsquelle, was einen Link der Form bikeotter.app/r/<token> ergibt. Jeder, der diesen Link hat, kann zuschauen, ohne Konto und ohne Anmeldung. Der Link ist der Zugangsschlüssel — behandle ihn also wie einen und gib ihn nur an Leute weiter, die wirklich zuschauen sollen. Zuschauern wird nur gezeigt, was unten aufgeführt ist; sie erhalten nie deine E-Mail-Adresse, deine Konto-ID oder den Token einer anderen Sitzung.
Der Browser eines Zuschauers erhält einen kurzlebigen Zugriffstoken, der auf diese eine Sitzung beschränkt und auf sechs Stunden begrenzt ist. Die Datenbank erzwingt das Spalte für Spalte: Der Besitzer der Sitzung und ihr Freigabe-Token sind für Zuschauer überhaupt nicht lesbar.
Die App zeigt dir live, wie viele Personen gerade zuschauen. Wer sie sind, sagt sie dir nicht — es wird keine Zuschauer-Identität erhoben.
Was ein Live-Punkt enthält
Punkte werden während der Fahrt gesendet, gedrosselt nach Zeit und Distanz. Jeder enthält:
| Feld | Gesendet | Anmerkungen |
|---|---|---|
| Breitengrad, Längengrad | Immer | Der Zweck der Funktion. |
| Höhe, verstrichene Zeit, Steigung, Fahrtstatus | Immer | Die Höhe ist, wie hoch über dem Meeresspiegel du bist — die dritte Koordinate
einer Position, die du ohnehin teilst, und derselbe Messwert, aus dem die Steigung
daneben berechnet wird; die beiden werden also nicht getrennt gesendet. Der
Fahrtstatus ist active, paused, auto_paused
oder not_started, damit die Seite PAUSIERT anzeigen kann
statt eines lügenden LIVE-Badges. Alle vier werden unabhängig von den
beiden Schaltern unten gesendet — mit Absicht. |
| Runde und Position in der Runde | Nur bei einem Rennen | Wie viele Runden du abgeschlossen hast und wie weit du in der aktuellen bist, gemessen ab der Start-/Ziellinie. Auf deinem Handy aus der Position oben berechnet — sie verrät also nichts, was die Position nicht schon verrät. |
| Akku schwach | Nur bei schwachem Akku — kein Schalter | Ein Flag, kein Prozentwert — diese Seite erfährt nie, wie viel Akku dir noch bleibt, nur dass er knapp wird. Es wird nur gesendet, während dein Akku schwach ist und du nicht lädst, damit jemand, der deinen Punkt beobachtet, ein sterbendes Telefon von einem verlorenen Signal unterscheiden kann. Solange das der Fall ist, sendet die App deine Position auch seltener. |
| Geschwindigkeit, zurückgelegte Distanz, bisheriger Anstieg, verbleibende Distanz und verbleibender Anstieg, ETA | Nur wenn „Geschwindigkeit teilen“ an ist — standardmäßig an | Schalte ihn aus, und keiner dieser sechs Werte wird überhaupt hochgeladen. „Bisheriger Anstieg“ ist die Gesamtzahl der Meter, die du auf dieser Fahrt geklettert bist — eine andere Zahl als die Höhe oben: das eine ist eine laufende Summe, das andere ist, wo du gerade bist. |
| Herzfrequenz, Leistung, Trittfrequenz | Nur wenn „Herzfrequenz & Leistung teilen“ an ist — standardmäßig aus | Die Herzfrequenz zählt zu den Gesundheitsdaten. Sie wird nur hochgeladen, wenn du diesen Schalter einschaltest, und er startet ausgeschaltet. Die Trittfrequenz — wie schnell du trittst, in Umdrehungen pro Minute — hängt am selben Schalter, obwohl er nicht nach ihr benannt ist: Sie ist ein Sensorwert derselben Art und sagt so viel über deine Anstrengung aus wie die Leistung. Der Schalter in der App sagt das direkt darunter. |
Was die Sitzung selbst enthält
Neben den Punkten: dein Fahrername (siehe §3), der Name der Route, die geplante Routenlinie, ihre Gesamtdistanz, die Koordinaten, an denen die Route beginnt, die beiden Freigabe-Schalter oben, ob Nachrichten aktiviert sind, der Sitzungsstatus und seine Zeitstempel sowie — bei einer Gruppenfahrt — zu welcher Gruppe sie gehört.
Wann sie endet und wann sie gelöscht wird
Eine Sitzung läuft ab, sobald das Erste hiervon eintritt; der Ablauf wird jede Minute geprüft:
- die beim Start festgelegte Ablaufzeit — standardmäßig sechs Stunden;
- 45 Minuten nach dem letzten Punkt oder Keep-alive der App, damit eine vergessene Fahrt nicht den ganzen Abend „live“ bleibt;
- 60 Minuten nach ihrer Erstellung, wenn nie eine Position angekommen ist.
Die Löschung folgt dann automatisch:
- Der Sitzungseintrag wird 7 Tage nach Ende oder Ablauf gelöscht und nimmt alles mit, was noch daran hängt.
- Deine Positionspunkte werden mit ihm gelöscht — dieselben 7 Tage, keinen Moment länger. Früher wurden sie schon nach 24 Stunden bereinigt, vor der Sitzung; jetzt bleiben sie für die gesamte Lebensdauer der Sitzung erhalten, damit eine Fahrt, deren Radcomputer die Aufzeichnung verloren hat, in der App noch aus der Live-Spur wiederhergestellt werden kann. Sonst hat sich an der Löschroutine nichts geändert, und die Obergrenze, wie lange eine geteilte Fahrt gespeichert ist, bleibt unverändert bei 7 Tagen.
Gruppenfahrten funktionieren genauso, sobald die Fahrt läuft: Ein Gruppenlink ist ab dem Start 12 Stunden gültig, fasst höchstens 50 Fahrer (15 bei einem Rennen), und der Gruppeneintrag wird 7 Tage nach dem Ende gelöscht. Eine im Voraus geplante Fahrt ist anders: Der Link — und die Namen aller, die bereits zugesagt haben — bleibt bis zu 30 Tage lang beitrittsfähig, bevor überhaupt jemand losfährt; die 12-Stunden-Uhr beginnt erst, wenn der erste Fahrer live geht. Beendest du eine Freigabe in der App, stoppt der Upload sofort; die Löschroutinen räumen die gespeicherten Daten dann nach dem Zeitplan oben ab.
Eine Gruppenfahrt kann ein Rennen sein. Das Handy jedes Fahrers schreibt dann zusätzlich dessen Rundenzeiten in einen eigenen Eintrag, zusammen mit dem Namen des Rennens und dem Fahrernamen aus der Teilnehmerliste. Diese Rundenzeiten können die Fahrer dieses Rennens lesen und — nur solange die Gruppenfahrt noch existiert — jeder, der ihren Link hat. Sie werden 90 Tage nach ihrer letzten Änderung gelöscht, also später als die Gruppenfahrt selbst, damit jeder Fahrer die Ergebnisse auch danach noch ansehen kann.
Eine Gruppenfahrt kann auch von einer Partner-App angelegt werden, derzeit Ride Alert, in der Organisatoren Gruppenausfahrten für ihre Fahrer ausschreiben. Der Partner schickt uns den Titel der Fahrt, ihre Startzeit, optional eine Route, optional den Anzeigenamen des Organisators (angezeigt als „Geleitet von …“) und einen Link zurück zur Fahrt auf seiner eigenen Website; eine so angelegte Fahrt kann bis zu 366 Tage im Voraus geplant werden. Über die Fahrer bekommt der Partner nichts zurück: Wir schicken ihm nur, wie viele Fahrer beigetreten und wie viele live sind. Beigetreten wird weiterhin in der BikeOtter-App mit einem BikeOtter-Konto, und nichts über dein Konto erreicht den Partner. Der Partner kann außerdem eine Karte der Fahrt nur zum Zuschauen auf seiner eigenen Seite einbetten; sie zeigt die Route und, während die Fahrt läuft, die Live-Position jedes Fahrers, markiert mit seinen Initialen statt seines Namens. Die eingebettete Karte bekommt nie den Namen eines Fahrers: Sie liest die Fahrt mit engerem Zugriff als der Gruppenlink, der Positionen und Route umfasst, aber keine Namen, und die Initialen werden auf unserem Server gebildet. Eine von einem Partner angelegte Fahrt wird genauso aufbewahrt und gelöscht wie jede andere Gruppenfahrt (siehe oben).
5. Nachrichten von Zuschauern
Wenn du Nachrichten aktivierst, kann dir jemand, der deinen Link über eine deiner Benachrichtigungs-E-Mails erreicht hat, kurze Nachrichten schicken, die auf deinem Radcomputer erscheinen. Ein gewöhnlicher Zuschauer, der bloß den Link hat, kann das nicht — zum Senden braucht es einen kontaktgebundenen Token, den nur der per E-Mail verschickte Link trägt.
Eine Nachricht speichert ihren Text, den sendenden Kontakt und einen Zeitstempel. Absender sind auf drei Nachrichten pro Stunde begrenzt. Nachrichten hängen an der Sitzung und werden mit ihr gelöscht — also im selben 7-Tage-Fenster wie in §4. Nachrichten liegen auf dem Server in lesbarer Form; sie sind nicht Ende-zu-Ende-verschlüsselt.
6. Fahrt-Benachrichtigungen per E-Mail
Du kannst Kontakte speichern, damit ihnen beim Start einer Live-Fahrt der Link per E-Mail geschickt wird. Es wird nichts gesendet, wenn du beim Livegehen keine Gruppe auswählst; die Wahl „niemand auf dieser Fahrt“ sendet nichts.
Was pro Kontakt gespeichert wird: die E-Mail-Adresse (kleingeschrieben), ein optionaler Name, ein Abmelde-Token, ein Nachrichten-Token und — falls zutreffend — wann sich die Person abgemeldet hat oder wann Mail an sie endgültig unzustellbar war (Hard Bounce). Kontakte sind nur für dich sichtbar; die Datenbank verweigert anonymen Zugriff auf sie vollständig.
Was die E-Mail enthält und preisgibt: deinen Fahrernamen, Name und Distanz der Route,
den Link zum Zuschauen, wann der Link abläuft, und einen Abmeldelink. Sie wird in unserem
Auftrag von einem Cloudflare Worker von [email protected] gesendet, und ihr
Reply-To ist auf deine eigene E-Mail-Adresse gesetzt, damit ein Empfänger
dir direkt antworten kann — was bedeutet, dass deine Empfänger die Adresse sehen können, mit
der du dich angemeldet hast.
Die Ankunfts-E-Mail (optional und aus, bis du sie einschaltest): Aktivierst du für eine Kontaktgruppe „Sagt Bescheid, wenn du zurück bist“, bekommen die Personen, denen der Link dieser Fahrt geschickt wurde — nur diese, und nur wenn die Link-Mail sie auch erreicht hat — eine kurze Nachricht, wenn die Fahrt endet: dass du fertig bist, Distanz und Fahrzeit, die die Fahrt veröffentlicht hat, die Uhrzeit deiner Ankunft und denselben Link zum Zuschauen. Auf einer Fahrt mit geladener Route gibt es optional zusätzlich eine Vorwarnung etwa fünfzehn Minuten vor der geschätzten Ankunft. Die Distanz steht nur drin, wenn „Geschwindigkeit & Distanz“ für diese Fahrt geteilt wurde: Die Zahlen werden aus dem gelesen, was die Fahrt tatsächlich veröffentlicht hat, nie aus der geplanten Route rekonstruiert. Eine Sitzung, die nur abläuft oder ausläuft, sendet nichts — ein Ablauf ist keine Ankunft. Keine der beiden Nachrichten trägt das Nachrichten-Token, denn die Fahrt ist vorbei.
Limits: höchstens eine E-Mail je Art pro Kontakt und Fahrt — der Link, die optionale Vorwarnung und die Ankunftsnachricht (ein Kontakt kann für dieselbe Sitzung nicht zweimal mit derselben Art angeschrieben werden), höchstens 50 Mitglieder pro Gruppe und höchstens 200 Benachrichtigungs-E-Mails pro Fahrer in rollierenden 24 Stunden.
Abmelden: Jede E-Mail trägt einen Abmeldelink im Footer und die üblichen One-Click-Unsubscribe-Header, sodass auch der „Abmelden“-Button des Mailprogramms funktioniert. Eine Abmeldung braucht kein Konto und stoppt alle weiteren Fahrt-Benachrichtigungen an diese Adresse.
Deine Verantwortung: Wenn du die E-Mail-Adresse einer anderen Person hinzufügst, bittest du uns, jemanden anzuschreiben, der mit uns nie zu tun hatte. Füge nur Personen hinzu, die damit rechnen, von dir zu hören. Kontakte laufen nicht automatisch ab — sie bleiben, bis du den Kontakt oder dein Konto löschst.
Renneinladungen: Wenn du ein Rennen anlegst, kannst du Kontakte als Fahrer oder als
Zuschauer einladen. Jede Einladung wird festgehalten — welcher Kontakt, welches Rennen, Fahrer
oder Zuschauer und wann sie verschickt wurde —, damit niemand zweimal Post bekommt; der Eintrag
ist nur für dich sichtbar und wird mit der Gruppenfahrt des Rennens gelöscht, 7 Tage nach
ihrem Ende. Die Einladung kommt von [email protected] unter deinem Namen, mit
Reply-To auf deine eigene E-Mail-Adresse. Die Einladung für Fahrer enthält
deinen Namen, den Namen des Rennens, Startzeit, Runden und Rundenlänge, ein Bild der Strecke
auf einer Karte, den Link zum Rennen und eine kurze Beschreibung dessen, was BikeOtter in einem
Rennen macht; die Einladung für Zuschauer enthält deinen Namen, den Namen und die Startzeit des
Rennens und den Link zum Zuschauen. Beide tragen denselben Abmeldelink wie jede andere E-Mail.
Pro Rennen können höchstens 15 Fahrer und 30 Zuschauer eingeladen werden, und
Einladungen zählen zu denselben 200 E-Mails pro gleitenden 24 Stunden.
7. Strava
Die Strava-Verknüpfung ist optional. Die Autorisierung passiert in deinem System-Browser auf Stravas eigenen Seiten; BikeOtter sieht dein Strava-Passwort nie.
- Angefragte Berechtigungen:
read,read_all,activity:read_allundactivity:write— genug, um deine Routen und Aktivitäten aufzulisten und zu importieren und Fahrten hochzuladen. - Wo die Tokens liegen: Deine Strava-Access- und -Refresh-Tokens werden ausschließlich serverseitig gespeichert, in unserem Backend, und sind für nichts lesbar außer der Serverfunktion, die sie benutzt. Das Telefon hält während des Anmelde-Handshakes nur einen kurzlebigen Wert im Arbeitsspeicher, der nie auf den Datenträger geschrieben wird.
- Was hochgeht: die Fahrtdatei selbst (ein komprimiertes FIT), plus optional Name und Beschreibung, wenn du eine Fahrt hochlädst.
- Was herunterkommt: deine Strava-Routen und -Aktivitäten, GPX-Exporte von Routen und die Positions-/Höhen-/Zeit-Streams einer Aktivität, wenn du sie als Route importierst. Antworten werden deinem Konto zugeordnet zwischengespeichert und nach 48 Stunden gelöscht.
- Trennen widerruft den Token bei Strava und entfernt die gespeicherte Verbindung. Bis du trennst, bleibt der Verbindungseintrag bestehen — er läuft nicht automatisch ab.
Was Strava dann mit deinen Daten macht, regelt Stravas eigene Datenschutzerklärung. Strava ist ein US-Unternehmen, und seine Nutzung bringt eine Übermittlung von Daten in die USA mit sich.
8. Wetter, POI, Geocoding, Routing und Karten
Mehrere Funktionen müssen einen externen Dienst nach einem Ort fragen. Es gibt einen bedeutsamen Unterschied darin, wie gefragt wird:
- Über unser Backend — Wettervorhersagen, POI-Suche, Geocoding und alles rund um Strava. Dein Telefon fragt unsere Serverfunktion. Für Wetter, Geocoding und Strava fragt die Serverfunktion dann den externen Dienst, der daher die Koordinaten oder Suchbegriffe sieht, aber nicht deine IP-Adresse. Die POI-Suche fragt gar keinen externen Dienst: Sie wird aus unserer eigenen Kopie der OpenStreetMap-Daten beantwortet (siehe unten).
- Direkt von deinem Telefon — Routenberechnung (BRouter) und Kartenkacheln (der OpenStreetMap-Kachelserver). Diese Dienste erhalten die Anfrage von deinem Gerät, sehen also deine IP-Adresse zusammen mit den Koordinaten oder dem Kartenausschnitt, den du gerade ansiehst, und können sie nach ihren eigenen Richtlinien protokollieren.
- Über unseren Routing-Proxy, vom Routenplaner auf dieser Website
(bikeotter.app/plan). Ein Browser auf dieser Website kann BRouter
nicht direkt fragen, deshalb gehen die Punkte, die du setzt, und das gewählte Profil an
unseren eigenen Routing-Proxy auf
map.bikeotter.app, einen Cloudflare Worker, der BRouter (brouter.de) fragt und die Antwort zurückgibt. BRouter sieht daher die Koordinaten und das Profil, aber nicht deine IP-Adresse. Der Proxy hält jede Antwort bis zu 24 Stunden vor, mit den Punkten und dem Profil als Schlüssel, damit dieselbe Route nicht zweimal angefragt wird; deine IP-Adresse nutzt er nur, um Anfragen für eine Ratenbegrenzung zu zählen, und er speichert keinen Eintrag darüber, wer gefragt hat. Die Ortssuche und die Namen, die für deine Stopps angezeigt werden, laufen über dieselbe Geocoding-Serverfunktion wie in der App, oben beschrieben.
Planen auf dieser Website braucht kein Konto, und nichts, was du planst, erreicht unsere Server, bevor du es speicherst. Abgesehen von den kurzlebigen Caches, die hier beschrieben sind und Orte und Routen statt Personen enthalten, landet nichts, was du planst, in unserem Speicher. Die Route, die du gerade zeichnest, liegt nur in deinem eigenen Browser (siehe §15), bis du sie als GPX-Datei exportierst, die auf deinem Gerät gespeichert und nirgendwohin gesendet wird, oder dich anmeldest und sie speicherst, womit sie bei deinen Routen landet, wie in §3.2 beschrieben.
Deinen aktuellen Standort fragt diese Website nur ab, wenn du auf der Karte des Routenplaners auf den Standort-Button oder auf „Meinen Standort hinzufügen“ drückst, und dein Browser fragt dich vorher. Die Position wird in deinem Browser genutzt, um die Karte darauf auszurichten; fügst du sie hinzu, wird sie ein Stopp wie jeder andere und wie oben beschrieben gesendet, um die Route zu berechnen. Wir speichern sie nicht.
Stopps entlang der Route werden auf dieser Website nur gesucht, wenn du angemeldet bist, und zwar über dieselbe POI-Suchfunktion wie in der App, oben beschrieben. Die Anfrage enthält die Linie der Route, die Kategorien, die du gewählt hast, und deine Konto-ID. Mit der Konto-ID prüft die Funktion, ob du Plus hast, und zählt die kostenlosen Nutzungen pro Konto statt pro Browser (siehe den nächsten Absatz).
Kostenlose Nutzungen. POI-Suche, Wetter, Ortssuche und das Ausrichten einer Gruppenfahrt sind Plus-Funktionen, die man ohne Plus ein paar Mal ausprobieren kann. Um diese Nutzungen zu zählen, sendet die App eine zufällige Kennung, die sie auf deinem Telefon erzeugt und im sicheren Speicher des Telefons ablegt, zusammen mit deiner RevenueCat-Kunden-ID, damit unser Server bei RevenueCat nachfragen kann, ob du Plus hast (siehe §10). Unser Server führt pro Kennung und Funktion einen kleinen Eintrag: wie viele Nutzungen verbraucht sind und wann sich das zuletzt geändert hat. Die Kennung ist nicht mit deinem Konto verknüpft, daher hat der Eintrag keinen automatischen Ablauf und kann dir beim Löschen deines Kontos nicht zugeordnet werden; er sagt nichts weiter aus, als wie oft eine Installation eine Funktion genutzt hat. Auf dieser Website wird die Zählung stattdessen an deiner Konto-ID geführt, und dieser Eintrag wird zusammen mit deinem Konto gelöscht.
Wetter- und Geocoding-Antworten werden auf unserer Seite zwischengespeichert, damit wiederholte Abfragen nicht erneut fragen: Wetter 2 Stunden, Geocoding etwa eine Woche. Cache-Schlüssel ist der Ort, nicht der Fahrer.
Woher die POIs kommen. Die POI-Suche wird aus einer Tabelle in unserer eigenen Datenbank beantwortet (Supabase, siehe §10), die rund 10 Millionen interessante Orte enthält, etwa Trinkwasser, Essen, Toiletten und Fahrradläden, entnommen einem Auszug der gesamten OpenStreetMap-Datenbank. Wir aktualisieren sie von Zeit zu Zeit von Hand aus einem neueren Auszug, nicht nach festem Zeitplan; ein Ort, der erst kürzlich in OpenStreetMap eingetragen wurde, fehlt daher womöglich noch. Das Suchgebiet (ein Punkt mit Radius oder die Linie einer Route) und die Kategorien gelangen nicht über unseren Server hinaus, und die Antworten werden nicht zwischengespeichert.
9. Das Diagnoseprotokoll
Die App führt ein technisches Protokoll, damit Bluetooth- und Support-Probleme meldbar sind.
- Es ist standardmäßig an. Ein Fahrer, der auf ein Problem stößt, hat so ein Protokoll zum Anhängen, ohne die Voraussicht gebraucht zu haben, die Aufzeichnung vorher einzuschalten. Schalte es jederzeit aus unter Einstellungen → Diagnose.
- Passwörter, Tokens und API-Schlüssel werden entfernt, bevor irgendetwas geschrieben wird — ein Bearer-Token, API-Schlüssel, Magic-Link-Token oder OAuth-Code, der irgendwo im Protokoll auftaucht, wird zu einer Einweg-Markierung, nicht zu den Zugangsdaten selbst.
- Es bleibt auf dem Telefon, bis du es an eine Support-Anfrage anhängst. Zwei rotierende Dateien im eigenen Speicher der App; vorher verlässt nichts das Telefon. Es gibt keinen E-Mail-Editor-Schritt — eine Support-Anfrage wird aus der App selbst gesendet, als Nachricht in einem laufenden Support-Thread (siehe den nächsten Punkt). Hängst du das Protokoll dort an, wird es in einen privaten Storage-Bucket hochgeladen, und diese hochgeladene Kopie wird nach 180 Tagen gelöscht. Die Kopie auf dem Telefon kannst du jederzeit löschen, oder das Protokollieren abschalten, unter Einstellungen → Diagnose.
- Eine Support-Anfrage ist ein Thread, keine einmalige E-Mail. Was auch immer du schreibst — mit oder ohne angehängtem Protokoll — wird als Teil einer laufenden Support-Konversation gespeichert, die an dein Konto und deine Anmelde-E-Mail-Adresse gebunden ist. Lesbar ist sie für BikeOtter-Mitarbeiter, die Support-Anfragen beantworten, und für niemanden sonst. Die Konversation selbst bleibt, bis du dein Konto löschst, und wird dann mit ihm gelöscht (siehe die Löschseite); ein hochgeladenes Protokoll hat davon unabhängig seine eigene 180-Tage-Frist, unabhängig vom Konto.
- Ein Screenshot, den du selbst anhängst, wird genauso gespeichert. Der Support-Editor nimmt ein Bild pro Nachricht — von dir aus der Fotobibliothek deines Telefons ausgewählt, nie automatisch gelesen und nie im Hintergrund aus deiner Galerie geholt. Was du ausgewählt hast, wird in einen separaten privaten Storage-Bucket hochgeladen, ist für BikeOtter-Mitarbeiter lesbar, die Support-Anfragen beantworten, und für niemanden sonst, und wird nach 180 Tagen gelöscht — dieselbe Frist wie bei einem hochgeladenen Protokoll. Ein Screenshot zeigt, was gerade auf deinem Bildschirm war: schau ihn dir vorher an; bis zum Senden kannst du ihn im Editor wieder entfernen.
- Feedback ohne Konto ist wirklich anonym. Die Verknüpfung Feedback geben auf dem Startbildschirm verlangt keine Anmeldung. Gespeichert wird, was du geschrieben hast, die App-Version und Plattform, eine auf deinem Telefon erzeugte Zufallskennung, die nur existiert, damit wir Missbrauch per Ratenbegrenzung eindämmen können, und — nur wenn du eine eintippst — eine E-Mail-Adresse, damit wir antworten können. Lässt du dieses Feld leer, haben wir keine Möglichkeit, die Nachricht mit dir in Verbindung zu bringen: nicht mit einem Konto, nicht mit einem Namen, nicht mit einem Gerät, das wir identifizieren könnten. Lesbar ist sie für BikeOtter-Mitarbeiter und für niemanden sonst.
- Die ehrliche Folge dieser Anonymität: Hast du keine Adresse hinterlassen, können wir eine Feedback-Nachricht nicht als deine erkennen — und deshalb auch nicht auf Anfrage löschen, denn es gibt nichts, womit wir dich abgleichen könnten. Willst du diese Möglichkeit haben, hinterlasse entweder eine Adresse oder nutze stattdessen die Support-Konversation, die an dein Konto gebunden ist und mit dem Konto gelöscht wird.
- Was drinsteht: App-Version und Build, Telefonmodell, Betriebssystemversion, Sprache und Zeitzone, plus eine technische Spur von Geräteverbindungen und App-Ereignissen. Live-Freigabe-Tokens werden vor dem Schreiben gekürzt. Es kann Positionskoordinaten enthalten — mindestens eine Gerätefunktion protokolliert Breiten- und Längengrad des Fahrers — plus Routenkoordinaten, gespeicherte Orte und Geräteseriennummern. Das wird nicht geschwärzt; behandle ein Diagnoseprotokoll also als Daten über dich und schicke es nur jemandem, dem du vertraust.
10. Drittanbieter, die wir nutzen
Die vollständige Liste externer Dienste, die die App, das Backend und diese Website kontaktieren. Andere gibt es nicht, und insbesondere gibt es nirgendwo im Produkt einen Analyse-, Attributions-, Werbe- oder Crash-Reporting-Dienst.
| Dienst | Wofür | Was er erhält |
|---|---|---|
| Supabase | Datenbank, Anmeldung, Serverfunktionen und der Realtime-Feed hinter dem Live-Tracking und der Routen-Synchronisierung | Alles in §3–§8 Beschriebene, das überhaupt gespeichert wird, plus die Verbindungs-Metadaten, die jeder Host sieht. Gehostet in der EU — das Projekt läuft in Supabases Region West EU (Ireland), diese Daten werden also innerhalb des EWR gespeichert. |
| Cloudflare | Hosting für bikeotter.app und die
Zuschauerseiten; der Worker, der die Fahrt-Benachrichtigungs-E-Mails
sendet; der Kartenserver und der Routing-Proxy für den Routenplaner dieser Website auf
map.bikeotter.app | Anfragen an diese Website und an den Mail-Endpunkt, einschließlich IP-Adresse, als Teil des Auslieferns und Schützens. Beim Routenplaner außerdem die Punkte, die du setzt, und das gewählte Profil (siehe §8). Worker-Anfrageprotokolle werden nach Cloudflares eigenen Voreinstellungen aufbewahrt. |
| Open-Meteo | Wettervorhersagen | Koordinaten und Zeiten, gesendet von unserem Server, nicht von deinem Telefon. |
Photon (photon.komoot.io) und Nominatim
(nominatim.openstreetmap.org) | Ortsnamen in Koordinaten übersetzen und zurück | Der Suchbegriff oder die Koordinaten, gesendet von unserem Server. |
BRouter (brouter.de) | Berechnung einer Route zwischen deinen Wegpunkten | Deine Wegpunkt-Koordinaten und das gewählte Profil — direkt von deinem Telefon gesendet, er sieht also deine IP-Adresse. Vom Routenplaner auf dieser Website sendet sie stattdessen unser Routing-Proxy, dort sieht BRouter deine IP-Adresse also nicht. |
| OpenStreetMap-Kachelserver | Kartenbilder in der App und auf der Zuschauerseite | Welche Kartenkacheln du gerade ansiehst — direkt angefragt, er sieht also deine IP-Adresse. |
| Strava | Optionaler Routen-/Aktivitäten-Import und Fahrt-Upload | Siehe §7. USA. |
| RevenueCat (RevenueCat, Inc.) | Plus-Käufe und die Prüfung, ob du Plus hast | Von der App, direkt und bei jedem Start: deine RevenueCat-Kunden-ID (eine zufällige ID, bis du dich anmeldest, danach deine Konto-ID), die Käufe und Belege aus dem App Store oder von Google Play sowie die üblichen App- und Geräteangaben wie Plattform, Betriebssystem- und App-Version. Direkt angefragt, RevenueCat sieht also deine IP-Adresse. Von unserem Server, wenn eine Funktion wissen muss, ob du Plus hast: diese Kunden-ID (von dieser Website aus deine Konto-ID). Wir speichern die Antwort, ja oder nein, mit dem Zeitpunkt der Anfrage und fragen nach 10 Minuten erneut. USA. |
| Shorebird | Over-the-air-Auslieferung von Code-Korrekturen an die installierte App | Eine Update-Prüfung beim Start. Siehe §10.1 — sie ist nicht optional. |
| YouTube (Google Ireland Limited) | Die Wiedergabe der zwei Videos auf der Startseite dieser Website — und erst, wenn du auf Play drückst | Deine IP-Adresse, die Seite, auf der du Play gedrückt hast, und die üblichen Browser-Angaben — direkt von deinem Browser bei youtube-nocookie.com angefragt, Google sieht also deine IP-Adresse. Siehe §15. |
Die App-Stores stehen für sich: Installierst du BikeOtter aus Apples App Store oder von Google Play, gelten zwischen dir und dem Store dessen eigene Konto-, Kauf- und Crash-Reporting-Regelungen, auf die wir keinen Einfluss haben.
10.1 Shorebird, und warum es ungefragt einen Server kontaktiert
BikeOtter wird über Shorebird veröffentlicht, das uns erlaubt, eine Korrektur am Dart-Code der App over the air auszuliefern, zwischen Store-Releases. Es ist der Mechanismus dahinter, wenn ein Patch ohne Store-Update ankommt.
Der Teil, den du wissen solltest: Die App prüft beim Start automatisch, ob ein Patch vorliegt, und es gibt keine Einstellung, um das abzuschalten. Unsere Konfiguration deaktiviert die automatische Prüfung nicht, und die App bietet keinen Opt-out — der einzige Weg, sie zu stoppen, ist, die App nicht zu starten. Wir sagen das lieber klar, als es zu vergraben.
Wir betreiben Shorebirds Server nicht und können nicht beobachten, was sein Updater sendet, denn der Updater steckt in der Laufzeitumgebung der App, nicht in Code, den wir schreiben. Was eine solche Prüfung aber zwangsläufig beinhaltet, ist keine Meinungsfrage: Um überhaupt beantwortet zu werden, muss sie ausweisen, welche App fragt (unsere Shorebird-App-ID, die nicht geheim ist und bei jeder Installation gleich), und welche Version und welcher Patch-Stand bereits installiert ist — und wie jede Netzwerkanfrage erreicht sie Shorebirds Server von deiner IP-Adresse aus. Geh davon aus, dass Shorebird mindestens so viel sehen kann und es womöglich protokolliert, wie jeder Host Anfragen protokolliert.
Zwei Dinge konnten wir nicht klären und werden nicht raten: den genauen Inhalt dieser Anfrage über das Obige hinaus und das Land, in dem seine Server stehen. Brauchst du eines davon vor der Installation, frag uns, und wir holen Shorebirds eigene Antwort schriftlich ein, statt hier zu spekulieren.
Was wir ausschließen können: Die Prüfung ist nicht an dein Konto gebunden, und BikeOtter funktioniert ohne Anmeldung, die Anfrage trägt also keine Identität, die wir ihr mitgegeben haben. Ein Patch ändert den Code der App — nie deine Daten, deine Fahrten oder deine Routen.
11. Telefon-Berechtigungen
Die App fragt so wenig an wie möglich, und jede Berechtigung wird für genau eine Sache benutzt.
| Berechtigung | Warum |
|---|---|
| Bluetooth | Um deinen Radcomputer und deine Sensoren zu finden und mit ihnen zu sprechen. Auf Android ist die Scan-Berechtigung so deklariert, dass daraus nie ein Standort abgeleitet wird. |
| Standort | Ungefährer Standort auf Android, „beim Verwenden der App“ auf iOS: um POIs in deiner Nähe zu suchen und eine Neuberechnung der Route von deinem Standort aus zu starten. Hintergrund-Standort wird auf keiner der beiden Plattformen angefragt. Während einer Fahrt kommt die geteilte Position vom Radcomputer über Bluetooth. |
| Mikrofon und Spracherkennung | Sprachbefehle. Die Erkennung läuft auf dem Gerät; Audio wird nirgendwohin gesendet. |
| Benachrichtigungen | Um die laufende Benachrichtigung der Fahrt und Warnungen anzuzeigen. |
| Benachrichtigungszugriff (nur Android) | Optional. Lässt die App eingehende Telefon-Benachrichtigungen lesen, um sie auf deinem Radcomputer anzuzeigen. Du gewährst ihn selbst in den Systemeinstellungen, und die Inhalte werden nie gespeichert oder hochgeladen. |
| Start beim Hochfahren / Akku-Ausnahme (nur Android) | Damit eine unterbrochene Fahrt nach einem Neustart weiterlaufen kann und nicht mitten in der Fahrt beendet wird. |
Die App fragt nicht nach Fotos, Kamera, der Kontaktliste deines Telefons, dem Kalender oder irgendeiner Werbe-ID, und sie nutzt Apples Tracking-Berechtigung nicht, weil sie nicht trackt.
12. Speicherfristen im Überblick
| Daten | Aufbewahrt |
|---|---|
| Live-Positionspunkte | 7 Tage nach Ende oder Ablauf der Fahrt — gelöscht mit ihrer Sitzung |
| Live-Sitzungseintrag | 7 Tage nach Ende oder Ablauf |
| Gruppenfahrt-Eintrag | 7 Tage nach Ende oder Ablauf |
| Rundenzeiten eines Rennens | 90 Tage nach der letzten Änderung — bleiben erhalten, wenn die Gruppenfahrt selbst gelöscht ist |
| Renneinladungen (wen du eingeladen hast) | Gelöscht mit der Gruppenfahrt des Rennens — 7 Tage nach Ende oder Ablauf |
| Nachrichten von Zuschauern | Gelöscht mit ihrer Sitzung — also innerhalb derselben 7 Tage |
| Wetter-Cache | 2 Stunden |
| Geocoding-Cache | 8 Tage |
| Routen-Cache des Proxys für den Routenplaner der Website | Bis zu 24 Stunden |
| Strava-Antwort-Cache | 48 Stunden |
| Kontakte und ihre Benachrichtigungseinträge | Bis du den Kontakt oder dein Konto löschst — kein automatischer Ablauf |
| Strava-Verbindung | Bis du trennst oder dein Konto löschst |
| Zähler der kostenlosen Nutzungen (siehe §8) | In der App: an einer Kennung auf deinem Telefon geführt, nicht an deinem Konto, ohne automatischen Ablauf. Auf dieser Website: bis du dein Konto löschst |
| Unser Eintrag, ob du Plus hast (von RevenueCat) | Wird nach 10 Minuten neu geprüft, wenn er gebraucht wird. Ein Eintrag zu deiner Konto-ID wird mit deinem Konto gelöscht; einer zu der zufälligen ID, die vor der Anmeldung verwendet wird, hat keinen automatischen Ablauf |
| Synchronisierte Routen (Routen-Synchronisierung oder auf dieser Website gespeichert) und wann du zuletzt synchronisiert hast | Bis du sie oder dein Konto löschst, oder 24 Monate nach deiner letzten Synchronisierung, je nachdem, was zuerst eintritt |
| Markierung einer Route, die du aus der Cloud gelöscht hast | 180 Tage, damit deine anderen Geräte ihre Kopie ebenfalls löschen |
| Einstellungs-Backup (Plus, nur wenn du es eingeschaltet hast) | Bis du das Backup ausschaltest — was es sofort löscht — oder dein Konto löschst; kein automatischer Ablauf |
| Kontoeintrag | Bis du uns bittest, ihn zu löschen — siehe wie du dein Konto löschst |
| Support-Konversation (Thread und Nachrichten) | Bis du dein Konto löschst — siehe wie du dein Konto löschst |
| Kontaktadresse zur Wunschliste (nur mit deiner Einwilligung) | Bis du dein Konto löschst |
| Anonymes Feedback (Verknüpfung auf dem Startbildschirm) | Aufbewahrt, bis wir es bearbeitet haben — kein automatischer Ablauf. Hast du keine Antwortadresse hinterlassen, lässt es sich nicht als deins erkennen und kann daher nicht auf Anfrage gelöscht werden |
| Diagnoseprotokoll | Standardmäßig auf deinem Telefon, automatisch rotiert, jederzeit von dir löschbar; an eine Support-Anfrage angehängt, wird die hochgeladene Kopie 180 Tage mit eigener Frist aufbewahrt, unabhängig vom Konto |
| An eine Support-Nachricht angehängter Screenshot | 180 Tage, mit eigener Frist, unabhängig vom Konto |
Server- und Plattform-Protokolle unserer Hosting-Anbieter (Supabase, Cloudflare) folgen deren eigenen Aufbewahrungs-Voreinstellungen und können kurzzeitig IP-Adressen enthalten — ein unvermeidbarer Teil des Beantwortens einer Anfrage.
13. Rechtsgrundlagen
- Art. 6(1)(b) GDPR — Erfüllung dessen, worum du gebeten hast. Dich anmelden, eine von dir gestartete Live-Freigabe betreiben, die von dir gewünschten Benachrichtigungs-E-Mails senden, eine Fahrt in ein von dir verknüpftes Strava-Konto hochladen, eine von dir gezeichnete Route berechnen, die Routen aufbewahren, die du synchronisiert oder auf dieser Website gespeichert hast, prüfen, ob du Plus hast, und deine kostenlosen Nutzungen zählen, und eine Support-Anfrage mit angehängtem Diagnoseprotokoll senden.
- Art. 9(2)(a) GDPR — ausdrückliche Einwilligung für Gesundheitsdaten. Herzfrequenz und Leistung sind Gesundheitsdaten. Sie werden nur hochgeladen, wenn du „Herzfrequenz & Leistung teilen“ einschaltest; der Schalter ist standardmäßig aus, und Ausschalten stoppt den Upload. Die Trittfrequenz wird unter demselben Schalter hochgeladen. Wir behaupten nicht, dass die Trittfrequenz Gesundheitsdaten im Sinne von Art. 9 ist — sie ist ein Messwert vom Kurbelsensor, nicht von deinem Körper — aber sie gehört zur selben Familie und bekommt denselben Schutz statt eines schwächeren.
- Art. 6(1)(a) und Art. 9(2)(a) GDPR — ausdrückliche Einwilligung, für das Einstellungs-Backup. Eine Kopie deiner Einstellungen wird nur hochgeladen, nachdem du als Plus-Nutzer das Einstellungs-Backup eingeschaltet hast; standardmäßig ist es aus. Weil die Kopie deinen Hauttyp und dein Körpergewicht enthält, die als Gesundheitsdaten gelesen werden können, behandeln wir das Einschalten als ausdrückliche Einwilligung im Sinne von Art. 9. Ausschalten widerruft die Einwilligung und löscht die Kopie. Siehe §3.1.
- Art. 6(1)(a) GDPR (und, für alles, was der Player in deinem Browser speichert, § 25 Abs. 1 TDDDG) — Einwilligung, für die Videos auf der Startseite. Der Druck auf Play ist die Aufforderung, den Player von YouTube zu laden; vorher lädt nichts von YouTube. Du widerrufst sie, indem du einfach nicht erneut auf Play drückst: Verlassen oder Neuladen der Seite entfernt den Player.
- § 25 Abs. 2 Nr. 2 TDDDG — unbedingt erforderliche Speicherung in deinem Browser, für die wenigen Einträge, die diese Website im lokalen Speicher deines Browsers ablegt: die Sprache und das Design, die du gewählt hast, was die Demo hinterlässt, eine Anmeldung auf der Wunschliste oder im Routenplaner (samt ihrem Einmalcode für Strava) und die Route, die du im Routenplaner zeichnest, samt der Angabe, welche deiner gespeicherten Routen es ist. §15 führt jeden einzelnen auf. Für diese ist keine Einwilligung nötig, und es wird auch keine eingeholt.
- Art. 6(1)(f) GDPR — berechtigte Interessen daran, den Dienst funktionsfähig und missbrauchsfrei zu halten: Ratenbegrenzungen, die Eine-Mail-pro-Kontakt-und-Fahrt-Sperre, Bounce-Behandlung, das minimale Anfrage-Logging unserer Hoster und das standardmäßig aktive Diagnoseprotokoll auf dem Gerät, damit eine Support-Anfrage eines enthalten kann — du kannst es jederzeit unter Einstellungen → Diagnose abschalten.
Eine Einwilligung zu widerrufen ist jederzeit möglich und wirkt für die Zukunft: die Freigabe beenden, den Herzfrequenz-/Leistungs-Schalter ausschalten, das Protokoll abschalten, Strava trennen, den Kontakt löschen, das Einstellungs-Backup ausschalten, eine synchronisierte Route löschen oder nur auf deinem Telefon behalten.
14. Deine Rechte
Unter der GDPR hast du das Recht auf Auskunft über deine Daten (Art. 15), auf ihre Berichtigung (Art. 16) oder Löschung (Art. 17), auf Einschränkung der Verarbeitung (Art. 18), auf ihren Erhalt in übertragbarer Form (Art. 20) und auf Widerspruch gegen Verarbeitung auf Basis berechtigter Interessen (Art. 21). Wo die Verarbeitung auf Einwilligung beruht, kannst du sie jederzeit widerrufen.
Schreib an support@bikeotter.app, und wir kümmern uns darum. Vieles davon kannst du auch selbst in der App erledigen: eine Freigabe beenden, einen Kontakt löschen, Strava trennen, das Diagnoseprotokoll leeren, das Einstellungs-Backup ausschalten (was die Kopie auf unseren Servern löscht), eine synchronisierte Route löschen oder nur auf deinem Telefon behalten.
Die Löschung (Art. 17) hat ihre eigene Seite, weil sie das Detail verdient: wie du dein Konto löschst — die Schritte, was damit gelöscht wird, was danach aufbewahrt wird und wie lange.
Wenn du meinst, dass wir hier etwas falsch machen, kannst du dich bei einer Datenschutz-Aufsichtsbehörde beschweren — in der EU bei der an deinem Wohnort, deinem Arbeitsort oder am Ort des mutmaßlichen Verstoßes (Art. 77 GDPR).
15. Diese Website
bikeotter.app ist eine Sammlung statischer Seiten, gehostet auf Cloudflare. Sie setzt keine Cookies und betreibt keine Analyse-Tools. Sie legt aber ein paar kleine Einträge im lokalen Speicher deines Browsers ab, jeden davon, weil du etwas gewählt oder eine Funktion benutzt hast. Alle bis auf zwei verlassen deinen Browser nie: Gelesen werden sie von der Seite selbst und von nichts anderem — nicht von uns, nicht von irgendjemandem. Die zwei, die ihn verlassen, gibt es nur, wenn du dich anmeldest, auf der Wunschliste oder im Routenplaner: Sie werden an unser Backend gesendet, weil Anmelden genau so funktioniert. Die vollständige Liste:
| Eintrag (Schlüssel) | Was er enthält, und warum | Wird er irgendwohin gesendet? |
|---|---|---|
bikeotter:lang | Ein Sprachcode, zum Beispiel de. Geschrieben, wenn du unten auf einer Seite eine Sprache wählst — oder bei deinem ersten Besuch einer englischen Seite, wenn dein Browser nach Deutsch, Spanisch, Französisch, Italienisch oder Polnisch fragt: Die Website stellt dich dann einmal auf diese Sprache um und merkt sich, dass sie das getan hat, damit sie dich nie wieder gegen eine Wahl umstellt, die du getroffen hast. | Nein |
bikeotter-site-theme | light oder dark. Nur geschrieben, wenn du im Seitenkopf auf den Hell/Dunkel-Button drückst, damit sich die nächste Seite im gewählten Design öffnet. Bis du ihn drückst, wird nichts gespeichert, und die Seiten folgen deiner Systemeinstellung. | Nein |
FlutterSecureStorage und FlutterSecureStorage.plus_device_key | Nur aus der Demo unter /demo/, und erst, wenn du darin eine Gruppenfahrt startest: eine zufällige Kennung, verschlüsselt mit einem Schlüssel, der daneben liegt. Die Demo ist die echte App, die diese Kennung anlegt, wenn du eine Gruppenfahrt startest; in der Demo wird diese Fahrt in deinem Browser simuliert, die Kennung wird also für nichts verwendet und bleibt einfach liegen. | Nein |
sb-ccskijubebzhwpknjkpl-auth-token | Nur wenn du dich auf der Wunschliste oder im Routenplaner anmeldest: deine Anmeldesitzung — ein Zugriffstoken, ein Refresh-Token sowie die Benutzer-ID und E-Mail-Adresse deines Kontos —, damit du noch angemeldet bist, wenn du wiederkommst. | Ja, an unser Backend (Supabase, siehe §10), mit jeder Anfrage, die die Wunschliste oder der Routenplaner stellt, während du angemeldet bist — so erkennt jede der beiden Seiten, dass eine Stimme, ein Vorschlag oder eine gespeicherte Route von dir stammt |
bikeotter.strava.web.pending | Nur während du dich im Routenplaner mit Strava anmeldest: ein zufälliger Einmalcode, den dein Browser erzeugt, wenn du auf „Weiter mit Strava“ drückst, und der die paar Augenblicke auf der Seite von Strava überdauert. Er beweist unserem Backend, dass die Anmeldung, die von Strava zurückkommt, die ist, die dieser Browser begonnen hat. Er liegt im Sitzungsspeicher (Session Storage) dieses Tabs, den dein Browser beim Schließen des Tabs leert, und wird gelöscht, sobald die Anmeldung abgeschlossen ist. | Ja, einmal, an unser Backend (Supabase, siehe §10), um diese Anmeldung abzuschließen. Beim Start wird nur ein Fingerabdruck davon (ein SHA-256-Hash) gesendet |
bikeotter.planner.cloud.v1 | Nur wenn du dich im Routenplaner anmeldest: die Benutzer-ID deines Kontos, die ID und Revisionsnummer der gespeicherten Route, die du geöffnet hast (leer bei einer noch nicht gespeicherten Route), und ob sie Änderungen hat, die du noch nicht gespeichert hast. So öffnet ein Neuladen dieselbe gespeicherte Route wieder, und eine Route, die du vor der Anmeldung gezeichnet hast, wird nicht zweimal gespeichert. Der Eintrag wird neu geschrieben, wenn du eine Route öffnest, speicherst oder bearbeitest, und gelöscht, wenn du dich im Routenplaner abmeldest. | Nein. Beim Speichern einer Route werden ihre ID und Revision an unser Backend gesendet (siehe §3.2), aber dieser Eintrag selbst verlässt deinen Browser nie |
bikeotter.planner.draft.v1 | Nur wenn du den Routenplaner unter bikeotter.app/plan nutzt: die Route, die du gerade zeichnest (ihre Stopps und deren Namen, das Profil, ob sie zum Start zurückführt, und wann sie zuletzt gespeichert wurde), oder eine GPX-Datei, die du importiert hast, damit Neuladen der Seite oder Schließen des Tabs sie nicht verliert. Der Eintrag wird beim Bearbeiten überschrieben und bleibt, bis du die Daten dieser Website in deinem Browser löschst. | Nein. Die Punkte werden gesendet, um die Route zu berechnen (siehe §8), aber dieser Eintrag selbst verlässt deinen Browser nie |
bikeotter.planner.poiTypes.v1 | Nur wenn du im Routenplaner nach Stopps an der Route suchst: welche Kategorien du eingeschaltet hast (Trinkwasser, Essen, Café und so weiter), damit die nächste Suche nach denselben sucht. Der Eintrag wird neu geschrieben, wenn du eine Kategorie ein- oder ausschaltest, und bleibt, bis du die Daten dieser Website in deinem Browser löschst. | Nein. Die Kategorien werden mit jeder Suche gesendet (siehe §8), aber dieser Eintrag selbst verlässt deinen Browser nie |
Um sie zu entfernen, lösche die Daten dieser Website in deinem Browser — in den meisten Browsern über das Symbol links neben der Adressleiste oder in den Einstellungen für Cookies und Websitedaten. Ein privates Fenster startet ohne einen davon und vergisst sie, wenn du es schließt. Blockiert dein Browser Websitedaten, funktionieren die Seiten trotzdem: Sie folgen der Sprache und dem Design deines Systems und können sich eine Wahl einfach nicht merken.
Warum du nicht vorher gefragt wirst. Das Speichern und Auslesen dieser Einträge braucht nach § 25 Abs. 2 Nr. 2 TDDDG keine Einwilligung, weil jeder davon unbedingt erforderlich ist für etwas, das du von dieser Website verlangt hast: Seiten in deiner Sprache und im gewählten Design, die Demo, die du geöffnet hast, die Route, die du planst, und das Angemeldetbleiben auf der Wunschliste oder im Routenplaner. Die Anmeldesitzung ist ein personenbezogenes Datum, und für sie ist die Rechtsgrundlage Art. 6(1)(b) GDPR (§13). Darüber hinaus gibt es hier nichts, in das man einwilligen müsste — deshalb wirst du nicht gefragt. Die einzige Ausnahme ist ein Video auf der Startseite, unten beschrieben: Der Druck auf seinen Play-Button ist die Einwilligung.
Jedes Asset, das eine Seite hier braucht, wird von dieser Website selbst ausgeliefert. Die Schriften (Archivo und Geist Mono) hosten wir selbst, statt sie von einem Font-CDN zu holen — genau damit das Lesen einer Seite deine IP-Adresse keinem Dritten aushändigt. Es gibt keinen Tag-Manager, kein Share-Widget, keinen Webfont-Dienst und keinen Video-Player, solange du keinen anforderst. Die einzige Partei, die deine Anfrage zwangsläufig sieht, ist Cloudflare, das die Seiten hostet — unvermeidbar, denn irgendetwas muss sie ausliefern.
Die Videos auf der Startseite sind die eine Ausnahme — und erst, wenn du auf Play drückst. Die Startseite zeigt zwei BikeOtter-Videos, die auf YouTube gehostet sind. Mit der Seite laden nur ein Vorschaubild und ein Play-Button, beide von dieser Website ausgeliefert; an YouTube oder Google geht keine Anfrage, bevor du auf Play drückst. Der Druck auf Play ersetzt die Vorschau durch den Player von YouTube, geladen von youtube-nocookie.com — dem erweiterten Datenschutzmodus von YouTube, betrieben von Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irland. Ab diesem Moment spricht dein Browser direkt mit Google: Google erhält deine IP-Adresse, die Adresse der Seite und die üblichen Browser-Angaben, und während das Video läuft, kann der Player Kennungen in deinem Browser speichern und Informationen zur Wiedergabe an Google senden, die Google auch in den USA verarbeiten kann (Google LLC ist unter dem EU-US Data Privacy Framework zertifiziert). Der erweiterte Datenschutzmodus bedeutet, dass YouTube das Ansehen eines eingebetteten Videos nicht nutzt, um zu personalisieren, was dir anderswo auf YouTube angezeigt wird — anonym ist er aber nicht. Wir erhalten davon nichts. Es gilt die Datenschutzerklärung von Google: policies.google.com/privacy. Drückst du nicht auf Play, passiert nichts davon. Der Link „Auf YouTube ansehen“ unter jedem Video öffnet es stattdessen auf youtube.com, wo die üblichen Bedingungen von YouTube gelten.
Der Live-Tracking-Viewer unter bikeotter.app/r/… und der Gruppen-Viewer unter /g/… und die von einem Partner eingebettete Zuschauerkarte unter /w/… laden zusätzlich die Daten der geteilten Fahrt von unserem Backend und Kartenkacheln von OpenStreetMap. Das Öffnen eines Viewer-Links hinterlässt bewusst keine Sitzung in deinem Browser: Der verwendete Zugriffstoken wird nur für diesen Besuch im Arbeitsspeicher gehalten und nicht dauerhaft gespeichert. Zuschauer werden gezählt, nicht identifiziert.
Der Routenplaner unter bikeotter.app/plan lädt zusätzlich seine
Karte von unserem eigenen Kartenserver auf map.bikeotter.app und sendet die
Punkte, die du setzt, an unseren Routing-Proxy und das, was du in sein Suchfeld tippst, an
unsere Geocoding-Funktion, wie in §8 beschrieben. Er funktioniert ohne Konto und
speichert nichts auf unseren Servern, außer du meldest dich an und speicherst eine Route
(§3.2). Angemeldet lädt er außerdem deine gespeicherten Routen aus unserem
Backend und sucht Stopps entlang der Route über unsere POI-Suchfunktion (§8).
Viewer-Links sind per robots.txt von Suchmaschinen ausgeschlossen, und jeder
trägt eine noindex-Anweisung — eine geteilte Fahrt soll also nicht in
Suchergebnissen auftauchen.
16. Kinder
BikeOtter richtet sich nicht an Kinder und ist nicht für die Nutzung durch Personen unter 16 gedacht. Wir erheben wissentlich keine Daten von Kindern. Wenn du glaubst, dass ein Kind die App mit einem Konto benutzt hat, schreib uns, und wir löschen es.
17. Änderungen
Die App ist jung und ändert sich noch. Ändert sich, was sie erhebt, ändert sich diese Seite mit, und Version und Datum oben wandern. Auf wesentliche Änderungen wird in der App hingewiesen, statt sie leise unterzuschieben.
18. Kontakt
Fragen, Anliegen oder eine Korrektur zu etwas auf dieser Seite: support@bikeotter.app.
Siehe auch die Nutzungsbedingungen und den Sicherheitshinweis und das Impressum.