Polityka prywatności
Ta strona opisuje aplikację mobilną BikeOtter i witrynę bikeotter.app. Powstała przez czytanie tego, co oprogramowanie naprawdę robi — jakie pola niesie punkt śledzenia na żywo, który mechanizm go usuwa i kiedy, z jakimi hostami nawiązywane są połączenia — a nie na podstawie szablonu. Tam, gdzie limit jest podany liczbą, jest to liczba z kodu.
Wersja 1.10 · ostatnia aktualizacja 9 października 2026 · dotyczy aplikacji i tej strony
W skrócie
- Nie ma analityki ani raportowania awarii. Żadnego Google Analytics, żadnego Firebase, żadnego Sentry, żadnego SDK reklamowego ani atrybucyjnego — ani w aplikacji, ani na tej stronie. Nic tutaj cię nie zlicza.
- Większość aplikacji w ogóle nie wymaga konta. Planowanie tras, wysyłanie tras, pobieranie przejazdów, reguły i alerty działają bez logowania, a twoje ustawienia zostają na telefonie. Konto istnieje tylko dla śledzenia na żywo, e-maili z powiadomieniami o przejeździe, połączenia ze Strava, synchronizacji tras, jeśli ją włączysz (§3.2), i — jeśli masz Plus i ją włączysz — kopii zapasowej twoich ustawień (§3.1).
- Twoje pliki przejazdów i twój głos zostają na telefonie, a twoje trasy też, chyba że włączysz synchronizację tras. Rozpoznawanie mowy działa na urządzeniu; celowo nie ma chmurowej warstwy mowy. Synchronizacja tras, a także zapisanie trasy w planerze tras na tej stronie, przechowują kopię twoich tras na twoim koncie (§3.2).
- Śledzenie na żywo to jedyna funkcja, która publikuje twoją pozycję — każdemu, kto ma link, na czas przejazdu. Tętno, moc i kadencja są domyślnie wyłączone. Twoje punkty pozycji i rekord sesji są usuwane razem, 7 dni po zakończeniu lub wygaśnięciu przejazdu.
- Dwie rzeczy aplikacja robi bez pytania: przy uruchomieniu sprawdza, czy jest łatka kodu, przez Shorebird, i tego sprawdzenia nie da się wyłączyć. Nie niesie żadnej tożsamości od nas — ale łączy się z serwerem. §10.1 wyjaśnia dokładnie, co wiemy, a czego nie. A przy uruchomieniu pyta RevenueCat, który obsługuje dla nas zakupy Plus, czy masz Plus (§10).
- Nic nie jest sprzedawane, wynajmowane ani udostępniane do celów reklamowych. Nigdy.
1. Kto jest odpowiedzialny
Administratorem opisanego tutaj przetwarzania, w rozumieniu Art. 4(7) GDPR, jest:
OpenBikeControl UG (haftungsbeschränkt)Ulrichstraße 24
71636 Ludwigsburg, Germany
E-mail: support@bikeotter.app
Pełne dane firmy znajdziesz na stronie z impressum. Nie ma ustawowego inspektora ochrony danych; we wszystkich sprawach z tej strony pisz na powyższy adres.
2. Co nigdy nie opuszcza twojego telefonu
Poniższe dane są trzymane we własnej pamięci aplikacji na twoim urządzeniu i BikeOtter nigdzie ich nie wysyła. Opuszczają telefon tylko wtedy, gdy osobiście je wyeksportujesz lub udostępnisz.
- Twoja biblioteka tras, chyba że włączysz synchronizację tras albo zapiszesz trasy w planerze tras na tej stronie. Trasy to pliki na telefonie: geometria plus indeks. Udostępnienie trasy tworzy samowystarczalny link, który niesie trasę w sobie; żadna trasa nie jest wysyłana na serwer po to, żeby ją udostępnić.
- Twoje przejazdy. Przejazdy pobrane z licznika i przejazdy nagrane telefonem są zapisywane jako pliki FIT i GPX na urządzeniu. Opuszczają go tylko wtedy, gdy je udostępnisz lub gdy masz włączone przesyłanie do Strava.
- Sterowanie głosem. Rozpoznawanie mowy jest skonfigurowane tak, żeby działało na urządzeniu, a polecenia są interpretowane najpierw przez gramatykę offline, a potem, w razie potrzeby, przez model na urządzeniu (Apple Foundation Models lub Gemini Nano). Celowo nie ma chmurowej warstwy mowy ani chmurowego modelu językowego — żadne audio ani żadna transkrypcja nie są wysyłane na żaden serwer.
- Twoje ustawienia, reguły, zapisane miejsca i konfiguracja przekazywania powiadomień — chyba że masz Plus i włączysz kopię zapasową ustawień. Wtedy kopia twoich ustawień i reguł (nigdy zapisanych miejsc) jest przechowywana na naszych serwerach, żebyś mógł ją przywrócić na innym telefonie, dopóki znów nie wyłączysz kopii zapasowej.
- Powiadomienia przekazywane na licznik (tylko Android). Jeśli przyznasz dostęp do powiadomień, aplikacja odczytuje powiadomienia telefonu po to, żeby wyświetlić je na liczniku, i przekazuje je bezpośrednio przez Bluetooth. Ich treść nie jest zapisywana przez aplikację i nigdy nie trafia na serwer.
- Wszystko, co aplikacja robi z samym licznikiem — parowanie, wysyłanie tras, pobieranie przejazdów, alerty na ekranie — dzieje się przez bezpośrednie połączenie Bluetooth między twoim telefonem a urządzeniem. Na tej drodze nie stoi żadna chmura producenta ani żaden serwer BikeOtter.
3. Twoje konto
Konto jest wymagane tylko do śledzenia na żywo, e-maili z powiadomieniami o przejeździe, połączenia ze Strava, synchronizacji tras (łącznie z zapisaniem trasy na tej stronie) i opcjonalnej kopii zapasowej ustawień dla użytkowników Plus. Cała reszta działa bez logowania.
Możesz zalogować się na jeden z dwóch sposobów: magicznym linkiem wysłanym na twój adres e-mail albo przez logowanie przez Strava. Nie ma hasła i nie ma profilu. Przechowywany jest rekord użytkownika u naszego dostawcy backendu (Supabase), zawierający twój adres e-mail i znaczniki czasu logowań, a przy logowaniu przez Strava — dodatkowo id sportowca Strava i wyświetlaną nazwę.
Twój adres e-mail służy do identyfikacji, a jego część lokalna (fragment przed
@) staje się nazwą rowerzysty pokazywaną obserwującym link na żywo. Jeśli twój
adres to [email protected], obserwujący widzą jane.doe. Miej to na
uwadze, wybierając adres do logowania.
Żeby usunąć konto i wszystko, co jest z nim związane, napisz na support@bikeotter.app z adresu, którym się logujesz. Usunięcie konta działa kaskadowo: sesje śledzenia na żywo i ich punkty pozycji, przejazdy grupowe, wiadomości wysłane ci przez obserwujących, zapisane kontakty i ich grupy, rekordy powiadomień, połączenie ze Strava, twoja kopia zapasowa ustawień oraz twoje zsynchronizowane trasy — wszystko znika razem z nim. W aplikacji nie ma jeszcze przycisku samoobsługi — strona usuwania konta podaje kroki, pełną listę tego, co znika, i tego, co pozostaje potem.
Lista życzeń. Po zalogowaniu — na stronie listy życzeń albo w aplikacji — możesz zaproponować funkcję i głosować na propozycje innych. Propozycja zapisuje tytuł, podany przez ciebie opis i twoje konto jako autora; głos zapisuje, które konto głosowało na co. Dopóki propozycja nie zostanie przyjęta, widzisz ją tylko ty i my. Jeśli zaznaczysz „Możecie się ze mną skontaktować w sprawie tego pomysłu”, zapisujemy tę zgodę przy propozycji oraz — gdy twoje konto nie ma adresu, na który możemy pisać (logowanie przez Strava go nie ma) — adres, który nam w tym celu podasz. Oba służą wyłącznie do pytań o ten jeden pomysł lub odpowiedzi na niego i żadne z nich nigdy nie jest pokazywane publicznie. Możemy też odpowiedzieć ci w rozmowie ze wsparciem w aplikacji, niezależnie od tego, czy zaznaczyłeś pole; jak przy każdej odpowiedzi wsparcia, e-mail z informacją o niej wychodzi tylko wtedy, gdy mamy twój prawdziwy adres. Notatka od twórcy pod propozycją jest publiczna, tak jak sama propozycja. Usunięcie konta usuwa twoje głosy i automatycznie kasuje zgodę oraz adres kontaktowy; propozycja, która jest już na liście, zostaje na niej, bez powiązania z tobą.
3.1 Kopia zapasowa ustawień (Plus)
Domyślnie wyłączona i tylko wtedy, gdy ją włączysz. Kopia zapasowa ustawień to funkcja BikeOtter Plus. Nic nie jest wysyłane, dopóki — zalogowany — nie włączysz jej w Ustawienia → Kopia zapasowa ustawień i nie zgodzisz się na to, co zapisuje. Od tej chwili aplikacja trzyma kopię twoich ustawień w naszym backendzie — Supabase, u tego samego dostawcy i w tym samym regionie West EU (Ireland) co wszystko inne z §10 — żebyś po zalogowaniu na nowym lub drugim telefonie mógł je przywrócić jednym krokiem. Dopóki jest włączona, kopia aktualizuje się automatycznie kilka sekund po zmianie ustawienia, a Utwórz kopię teraz aktualizuje ją na żądanie.
Co zawiera kopia:
- twoje jednostki i średnią prędkość jazdy;
- twoją masę ciała oraz rowery i konfigurację opon, używane do porad dotyczących ciśnienia w oponach;
- twój typ skóry, używany do przypomnienia o kremie z filtrem;
- twoje reguły alertów — szablony i własne reguły oraz to, które są włączone;
- listę aplikacji, które mogą przekazywać powiadomienia na licznik — tylko nazwy pakietów, nigdy treść powiadomienia;
- twoje progi stref tętna i mocy;
- domyślne traktowanie podpowiedzi skrętów, sortowanie i filtr biblioteki tras oraz próg objazdu dla głosowego wyznaczania trasy od nowa;
- twoje preferencje alertów głosowych;
- przełączniki udostępniania na żywo („udostępniaj prędkość”, „udostępniaj tętno i moc”, zezwalaj na wiadomości) oraz przełączniki automatycznego przechodzenia na żywo i wysyłania pozostałych rowerzystów na licznik;
- preferencje automatycznego przesyłania do Strava i notatki do przesyłania — tylko to, czy są włączone, nigdy token Strava;
- to, czy dziennik diagnostyczny jest włączony;
- model telefonu, z którego pochodzi kopia (na przykład „Pixel 8”), wersję aplikacji, datę twojej zgody i datę ostatniej aktualizacji kopii.
Czego nie zawiera: twoich tras, przejazdów, pozycji, zapisanych miejsc, zapisanych treningów, informacji, które liczniki lub czujniki sparowałeś, żadnych tokenów konta ani Strava, treści żadnych powiadomień ani dziennika diagnostycznego.
Jedna kopia na konto. Każda kopia zastępuje poprzednią; nie ma historii. Baza danych pozwala ją odczytać tylko twojemu własnemu kontu — nie obserwującym, nie innym rowerzystom.
Usuwanie. Wyłączenie kopii zapasowej ustawień natychmiast usuwa kopię z naszych serwerów — w ten sposób wycofujesz zgodę. Usunięcie konta też ją usuwa. Poza tym nie wygasa automatycznie. Jeśli twoja subskrypcja Plus się skończy, nowe kopie nie są tworzone; istniejąca kopia zostaje, dopóki nie wyłączysz kopii zapasowej lub nie usuniesz konta, a wyłączyć ją — i tym samym usunąć — możesz także bez Plus.
Dlaczego zgoda. Typ skóry i masa ciała mogą być odczytane jako dane o twoim zdrowiu, dlatego kopia zapasowa opiera się na twojej wyraźnej zgodzie (Art. 6(1)(a) i Art. 9(2)(a) GDPR, zob. §13). Włączenie jej jest tą zgodą; wyłączenie ją wycofuje.
3.2 Synchronizacja tras
Wyłączona, dopóki jej nie włączysz. Synchronizacja tras przechowuje kopię twoich tras na twoim koncie BikeOtter, żeby ta sama biblioteka była widoczna w aplikacji i w planerze tras na tej stronie (bikeotter.app/plan). W aplikacji nic nie jest wysyłane, dopóki, będąc zalogowanym, nie włączysz jej w Ustawienia → Synchronizacja w chmurze. Na stronie trasa jest zapisywana, gdy zapiszesz ją, będąc zalogowanym, oraz raz przy logowaniu: trasa zaplanowana bez logowania, która wciąż jest na ekranie, zostaje wtedy zapisana na twoim koncie. Poza tym trasa, którą planujesz, zostaje w twojej przeglądarce (zob. §8). Kopię przechowuje Supabase, w tym samym regionie West EU (Ireland) co wszystko inne z §10.
Co jest zapisywane dla każdej trasy: trasa w takiej postaci, w jakiej przechowuje ją sama aplikacja, czyli linia z profilem wysokości, wskazówki skrętów i przystanki (POI) wzdłuż niej, nawierzchnia na całej drodze, zaplanowane przystanki i profil wyznaczania trasy, jeśli była planowana, ewentualne interwały i plan tętna, jej nazwa, to, czy oznaczyłeś ją gwiazdką, jej ustawienie wskazówek skrętów, skąd pochodzi (na przykład zaplanowana, import GPX albo Strava) i czy powstała na telefonie, czy na stronie, oraz odcisk jej zawartości, żeby ponowny import tego samego pliku został rozpoznany. Obok tego: krótkie podsumowanie (dystans, przewyższenie, liczba przystanków, punkt startu i obszar mapy, który obejmuje), żeby bibliotekę dało się wylistować bez wczytywania każdej trasy, numer rewizji i znaczniki czasu, żeby twoje urządzenia wiedziały, która kopia jest nowsza, a gdy poprosisz stronę o wysłanie trasy na licznik, flaga, która mówi twojemu telefonowi, żeby wgrał ją na licznik przy następnym połączeniu. Dla każdego konta przechowujemy też jeden znacznik czasu: kiedy konto ostatnio się synchronizowało.
Co zostaje na telefonie: na który licznik wysłano trasę i powiązanie aplikacji z kopią na tym urządzeniu, miniatury map w twojej bibliotece oraz to, która trasa jest aktywna na twoim liczniku.
Plus i Free. Z Plus synchronizowana jest cała twoja biblioteka. Bez Plus w chmurze przechowywanych jest do 10 tras: te, które utworzyłeś na stronie, i te, które w aplikacji postanowisz zachować w chmurze. To, czy masz Plus, sprawdzamy na naszym serwerze na podstawie id twojego konta. Jeśli twoja subskrypcja Plus się skończy, nic nie jest usuwane: trasy, które już są w chmurze, zostają, nadal możesz je otwierać i usuwać, a ponad 10 nic nie zostanie dodane.
Kto może je zobaczyć. Baza danych pozwala czytać twoje trasy w chmurze tylko twojemu własnemu kontu; nie obserwującym, nie innym rowerzystom. Każda zmiana przechodzi przez jedną funkcję serwerową, która najpierw sprawdza, kim jesteś. Gdy aplikacja jest otwarta, nasłuchuje zmian w twoich trasach, żeby trasa zapisana na stronie od razu pojawiła się na telefonie.
Jak długo są przechowywane. Zsynchronizowana trasa zostaje, dopóki jej nie usuniesz, albo dopóki nie miną 24 miesiące bez żadnej synchronizacji z twojego konta, z aplikacji ani ze strony; wtedy wszystkie trasy konta w chmurze są usuwane, razem ze znacznikiem czasu jego ostatniej synchronizacji. Usunięcie trasy od razu kasuje jej zawartość. Zostaje znacznik (jej id, numer rewizji, skąd pochodzi i kiedy ją usunięto) na 180 dni, żeby twoje inne urządzenia też usunęły swoją kopię, zamiast wysłać ją ponownie. Wyłączenie synchronizacji zatrzymuje synchronizowanie, ale nie usuwa tego, co już jest w chmurze. Żeby zdjąć trasę z naszych serwerów, wybierz przy niej w aplikacji Zachowaj tylko na tym telefonie (zostaje na twoim telefonie) albo usuń ją na stronie, co usuwa ją także z twojego telefonu. Usunięcie konta usuwa to wszystko (zob. stronę usuwania konta).
4. Śledzenie na żywo
To jedyna funkcja, która publikuje, gdzie jesteś. Jest wyłączona, dopóki jej nie uruchomisz, i kończy się razem z przejazdem.
Czym jest udostępniony link
Rozpoczęcie przejazdu na żywo tworzy sesję z tokenem udostępniania: 20 znaków z kryptograficznego źródła losowości, co daje link postaci bikeotter.app/r/<token>. Każdy, kto ma ten link, może oglądać — bez konta i bez logowania. Link jest poświadczeniem, więc traktuj go jak poświadczenie — przekazuj go osobom, które naprawdę mają cię obserwować. Obserwujący widzą tylko to, co wymieniono niżej; nigdy nie dostają twojego adresu e-mail, id twojego konta ani tokenu żadnej innej sesji.
Przeglądarka obserwującego otrzymuje krótkotrwały token dostępu ograniczony do tej jednej sesji i do najwyżej sześciu godzin. Baza danych wymusza to kolumna po kolumnie: właściciel sesji i jej token udostępniania są dla obserwujących w ogóle nieczytelne.
Aplikacja pokazuje ci na żywo, ile osób ogląda. Nie mówi, kim są — tożsamość obserwujących nie jest zbierana.
Co zawiera punkt na żywo
Punkty są wysyłane podczas jazdy, dławione według czasu i dystansu. Każdy niesie:
| Pole | Wysyłane | Uwagi |
|---|---|---|
| Szerokość i długość geograficzna | Zawsze | Istota tej funkcji. |
| Wysokość, czas trwania, nachylenie, stan przejazdu | Zawsze | Wysokość to twoje położenie nad poziomem morza — trzecia współrzędna pozycji,
którą już udostępniasz, i ten sam odczyt, z którego wyliczane jest nachylenie obok,
więc te dwa nie są wysyłane osobno. Stan przejazdu to active,
paused, auto_paused lub not_started, żeby
strona mogła pokazać PAUZA zamiast kłamliwej plakietki NA ŻYWO.
Cała czwórka jest wysyłana niezależnie od dwóch przełączników poniżej — celowo. |
| Okrążenie i pozycja na okrążeniu | Tylko w wyścigu | Ile okrążeń ukończyłeś i jak daleko jesteś na bieżącym, licząc od linii startu/mety. Obliczane na twoim telefonie z pozycji powyżej, więc nie mówią nic, czego pozycja już nie mówi. |
| Słaba bateria | Tylko gdy słaba — bez przełącznika | Flaga, nie procent — ta strona nigdy nie dowiaduje się, ile baterii ci zostało, tylko że jest jej mało. Jest wysyłana tylko wtedy, gdy bateria twojego telefonu jest słaba i telefon się nie ładuje, żeby osoba, która cię obserwuje, mogła odróżnić umierający telefon od zgubionego sygnału. Dopóki tak jest, aplikacja wysyła też twoją pozycję rzadziej. |
| Prędkość, przebyty dystans, dotychczasowe przewyższenie, pozostały dystans i pozostałe podjazdy, ETA | Tylko przy włączonym „udostępniaj prędkość” — domyślnie włączone | Wyłącz go, a żadna z tych sześciu wartości nie jest w ogóle wysyłana. „Dotychczasowe przewyższenie” to łączna liczba metrów, jakie masz już wspięte w tym przejeździe — inna wartość niż wysokość powyżej: jedno to suma narastająca, drugie to miejsce, w którym jesteś teraz. |
| Tętno, moc, kadencja | Tylko przy włączonym „udostępniaj tętno i moc” — domyślnie wyłączone | Tętno to dane o zdrowiu. Jest wysyłane tylko wtedy, gdy to włączysz, a przełącznik startuje wyłączony. Kadencja — jak szybko pedałujesz, w obrotach na minutę — podlega temu samemu przełącznikowi, choć nie ma jej w jego nazwie: to odczyt czujnika tego samego rodzaju i mówi o twoim wysiłku tyle samo co moc. Przełącznik w aplikacji ma to napisane pod spodem. |
Co zawiera sama sesja
Obok punktów: twoja nazwa rowerzysty (zob. §3), nazwa trasy, zaplanowana linia trasy, jej łączny dystans, współrzędne startu trasy, dwa przełączniki udostępniania powyżej, informacja, czy wiadomości są włączone, status sesji i jej znaczniki czasu, a przy przejeździe grupowym — do której grupy należy.
Kiedy się kończy i kiedy jest usuwana
Sesja wygasa w tym z poniższych momentów, który nadejdzie pierwszy, a wygaśnięcie jest sprawdzane co minutę:
- czas wygaśnięcia ustawiony przy starcie — domyślnie sześć godzin;
- 45 minut po ostatnim punkcie lub sygnale podtrzymania z aplikacji, żeby zapomniany przejazd nie wisiał „na żywo” przez cały wieczór;
- 60 minut po utworzeniu, jeśli nigdy nie dotarła żadna pozycja.
Usuwanie następuje potem automatycznie:
- Rekord sesji jest usuwany 7 dni po jej zakończeniu lub wygaśnięciu, zabierając ze sobą wszystko, co wciąż jest z nią związane.
- Twoje punkty pozycji są usuwane razem z nią — te same 7 dni, ani chwili dłużej. Kiedyś były czyszczone po 24 godzinach, wcześniej niż sesja; teraz są trzymane przez całe życie samej sesji, żeby przejazd, którego nagranie zgubił licznik, dało się jeszcze odbudować w aplikacji ze śladu na żywo. Nic więcej w tym mechanizmie czyszczenia się nie zmieniło, a zewnętrzna granica tego, jak długo przechowywany jest udostępniony przejazd, pozostaje bez zmian: 7 dni.
Przejazdy grupowe działają tak samo, gdy przejazd już trwa: link grupy jest ważny przez 12 godzin od rozpoczęcia, mieści najwyżej 50 rowerzystów (15 w wyścigu), a rekord grupy jest usuwany 7 dni po jej zakończeniu. Przejazd zaplanowany z wyprzedzeniem działa inaczej: link — wraz z imionami wszystkich, którzy już potwierdzili udział — pozostaje otwarty do dołączenia przez maksymalnie 30 dni, zanim ktokolwiek faktycznie wyruszy; 12-godzinny zegar zaczyna biec dopiero, gdy pierwszy rowerzysta przejdzie na żywo. Zakończenie udostępniania z aplikacji natychmiast zatrzymuje wysyłanie; potem mechanizmy czyszczące usuwają zapisane dane według powyższego harmonogramu.
Przejazd grupowy może być wyścigiem. Telefon każdego zawodnika zapisuje wtedy dodatkowo jego czasy okrążeń w osobnym rekordzie, razem z nazwą wyścigu i imieniem widocznym na liście uczestników. Te czasy mogą odczytać zawodnicy tego wyścigu oraz — tylko dopóki przejazd grupowy jeszcze istnieje — każdy, kto ma do niego link. Są kasowane 90 dni po ostatniej zmianie, czyli później niż sam przejazd grupowy, aby każdy zawodnik mógł potem jeszcze obejrzeć wyniki.
Przejazd grupowy może też zostać utworzony przez aplikację partnerską, obecnie Ride Alert, w której organizatorzy ogłaszają przejazdy grupowe dla swoich rowerzystów. Partner przesyła nam tytuł przejazdu, godzinę startu, opcjonalnie trasę, opcjonalnie wyświetlaną nazwę organizatora (pokazywaną jako „Prowadzi: …”) oraz link z powrotem do przejazdu na swojej stronie; tak utworzony przejazd można zaplanować z wyprzedzeniem do 366 dni. O rowerzystach partner nie dostaje nic: przesyłamy mu tylko, ilu rowerzystów dołączyło i ilu jest na żywo. Dołącza się nadal w aplikacji BikeOtter z kontem BikeOtter i nic z twojego konta nie trafia do partnera. Partner może też osadzić na swojej stronie mapę przejazdu tylko do oglądania; pokazuje ona trasę oraz, w trakcie przejazdu, pozycję na żywo każdego rowerzysty oznaczoną jego inicjałami zamiast imienia. Osadzona mapa nigdy nie otrzymuje imienia rowerzysty: odczytuje przejazd z węższym dostępem niż link grupy, obejmującym pozycje i trasę, ale żadnych imion, a inicjały są wyliczane na naszym serwerze. Przejazd utworzony przez partnera jest przechowywany i usuwany dokładnie tak samo jak każdy inny przejazd grupowy (patrz wyżej).
5. Wiadomości od obserwujących
Jeśli włączysz wiadomości, osoba, która trafiła na twój link przez jeden z twoich e-maili z powiadomieniem, może wysyłać ci krótkie wiadomości, które pojawiają się na twoim liczniku. Zwykły obserwujący, który po prostu ma link, nie może — wysyłanie wymaga tokenu przypisanego do kontaktu, a niesie go tylko link z e-maila.
Wiadomość zapisuje swoją treść, wysyłający kontakt i znacznik czasu. Nadawcy są ograniczeni do trzech wiadomości na godzinę. Wiadomości są przypięte do sesji i usuwane razem z nią — czyli w tym samym 7-dniowym oknie co w §4. Wiadomości są przechowywane na serwerze w formie czytelnej; nie są szyfrowane end-to-end.
6. E-maile z powiadomieniami o przejeździe
Możesz zapisać kontakty, żeby rozpoczęcie przejazdu na żywo wysyłało im link e-mailem. Nic nie jest wysyłane, dopóki przy starcie nie wybierzesz grupy; wybór „nikt w tym przejeździe” nie wysyła niczego.
Co jest przechowywane dla każdego kontaktu: adres e-mail (małymi literami), opcjonalna nazwa, token wypisania się, token wiadomości oraz — jeśli dotyczy — kiedy dana osoba się wypisała lub kiedy poczta do niej została trwale odrzucona (hard bounce). Kontakty są widoczne tylko dla ciebie; baza danych całkowicie odmawia do nich anonimowego dostępu.
Co e-mail zawiera i co ujawnia: twoją nazwę rowerzysty, nazwę i dystans trasy, link do
oglądania, czas wygaśnięcia linku oraz link do wypisania się. Jest wysyłany z
[email protected] przez Cloudflare Worker w naszym imieniu, a jego
Reply-To jest ustawione na twój własny adres e-mail, żeby odbiorca mógł
odpowiedzieć ci bezpośrednio — co znaczy, że odbiorcy widzą adres, którym się logujesz.
E-mail o powrocie (opcjonalny i wyłączony, dopóki go nie włączysz): jeśli włączysz dla grupy kontaktów „Daj im znać, gdy wrócisz”, osoby, którym wysłano link do tego przejazdu — tylko one i tylko wtedy, gdy e-mail z linkiem faktycznie do nich dotarł — dostaną krótką wiadomość, gdy przejazd się zakończy: że skończyłeś, dystans i czas w ruchu, które przejazd opublikował, godzinę powrotu oraz ten sam link do oglądania. Na przejeździe z wczytaną trasą możesz też dostać opcjonalne wcześniejsze powiadomienie mniej więcej piętnaście minut przed szacowanym przyjazdem. Dystans pojawia się tylko wtedy, gdy dla tego przejazdu włączone było udostępnianie „Prędkość i dystans”: liczby są odczytywane z tego, co przejazd faktycznie opublikował, i nigdy nie są odtwarzane z zaplanowanej trasy. Sesja, która po prostu wygasa albo kończy się po upływie limitu czasu, nie wysyła nic — wygaśnięcie to nie powrót. Żadne z tych powiadomień nie niesie tokenu wiadomości, bo przejazd się skończył.
Limity: najwyżej jeden e-mail każdego rodzaju na kontakt na przejazd — link, opcjonalne wcześniejsze powiadomienie i wiadomość o powrocie (kontakt nie może dostać dwa razy e-maila tego samego rodzaju dla tej samej sesji), najwyżej 50 członków w grupie i najwyżej 200 e-maili z powiadomieniami na rowerzystę w kroczącym oknie 24 godzin.
Wypisanie się: każdy e-mail ma w stopce link do wypisania się i standardowe nagłówki wypisania jednym kliknięciem, więc działa też własny przycisk „wypisz się” programu pocztowego. Wypisanie się nie wymaga konta i zatrzymuje wszystkie dalsze powiadomienia o przejazdach na ten adres.
Twoja odpowiedzialność: dodając czyjś adres e-mail, prosisz nas o wysłanie wiadomości do osoby, która nie miała z nami styczności. Dodawaj tylko osoby, które spodziewają się wieści od ciebie. Kontakty nie wygasają automatycznie — są przechowywane, dopóki nie usuniesz kontaktu albo konta.
Zaproszenia na wyścig: przygotowując wyścig, możesz zaprosić kontakty jako
zawodników albo jako widzów. Każde zaproszenie jest zapisywane — który kontakt, który wyścig,
zawodnik czy widz i kiedy zostało wysłane — żeby nikt nie dostał wiadomości dwa razy; zapis
widzisz tylko ty i jest kasowany razem z przejazdem grupowym wyścigu, 7 dni po jego
zakończeniu. Zaproszenie przychodzi z [email protected] pod twoim imieniem, z
Reply-To ustawionym na twój własny adres e-mail. Zaproszenie dla zawodnika
zawiera twoje imię, nazwę wyścigu, godzinę startu, liczbę okrążeń i długość pętli, obraz trasy
na mapie, link do wyścigu i krótki opis tego, co BikeOtter robi w wyścigu; zaproszenie dla
widza zawiera twoje imię, nazwę i godzinę startu wyścigu oraz link do oglądania. Oba mają ten
sam link do wypisania się co każda inna wiadomość. Na jeden wyścig można zaprosić najwyżej
15 zawodników i 30 widzów, a zaproszenia wliczają się do tych samych 200 e-maili na
każde kroczące 24 godziny.
7. Strava
Połączenie ze Strava jest opcjonalne. Autoryzacja odbywa się w przeglądarce systemowej na stronach samej Strava; BikeOtter nigdy nie widzi twojego hasła do Strava.
- Żądane uprawnienia:
read,read_all,activity:read_alliactivity:write— tyle, żeby wylistować i zaimportować twoje trasy i aktywności oraz przesyłać przejazdy. - Gdzie żyją tokeny: twoje tokeny dostępu i odświeżania Strava są przechowywane wyłącznie po stronie serwera, w naszym backendzie, i nie może ich odczytać nic poza funkcją serwerową, która ich używa. Telefon trzyma tylko krótkotrwałą wartość w pamięci na czas uzgadniania logowania, nigdy nie zapisywaną na dysk.
- Co idzie w górę: sam plik przejazdu (skompresowany FIT) plus opcjonalna nazwa i opis, gdy przesyłasz przejazd.
- Co idzie w dół: twoje trasy i aktywności ze Strava, eksporty tras w GPX oraz strumienie pozycji/wysokości/czasu aktywności, gdy importujesz ją jako trasę. Odpowiedzi są buforowane dla twojego konta i usuwane po 48 godzinach.
- Odłączenie unieważnia token po stronie Strava i usuwa zapisane połączenie. Dopóki się nie odłączysz, rekord połączenia trwa — nie wygasa automatycznie.
To, co Strava robi potem z twoimi danymi, reguluje własna polityka prywatności Strava. Strava to firma amerykańska i korzystanie z niej wiąże się z przekazaniem danych do Stanów Zjednoczonych.
8. Pogoda, POI, geokodowanie, wyznaczanie tras i mapy
Kilka funkcji musi zapytać zewnętrzną usługę o miejsce. Jest istotna różnica w tym, jak są pytane:
- Przez nasz backend — prognozy pogody, wyszukiwanie POI, geokodowanie i wszystko związane ze Strava. Twój telefon pyta naszą funkcję serwerową. W przypadku pogody, geokodowania i Strava funkcja serwerowa pyta następnie usługę zewnętrzną, która widzi więc współrzędne lub szukane frazy, ale nie twój adres IP. Wyszukiwanie POI nie pyta żadnej usługi zewnętrznej: odpowiada z naszej własnej kopii danych OpenStreetMap (zob. niżej).
- Bezpośrednio z twojego telefonu — wyznaczanie trasy (BRouter) i kafelki mapy (serwer kafelków OpenStreetMap). Te usługi otrzymują żądanie z twojego urządzenia, więc widzą twój adres IP razem ze współrzędnymi lub oglądanym obszarem mapy i mogą go logować według własnych zasad.
- Przez nasze proxy do wyznaczania tras, z planera tras na tej stronie
(bikeotter.app/plan). Przeglądarka na tej stronie nie może
zapytać BRoutera bezpośrednio, więc punkty, które stawiasz, i wybrany profil trafiają do
naszego własnego proxy do wyznaczania tras pod
map.bikeotter.app, czyli Cloudflare Workera, który pyta BRouter (brouter.de) i odsyła ci odpowiedź. BRouter widzi więc współrzędne i profil, ale nie twój adres IP. Proxy przechowuje każdą odpowiedź do 24 godzin, kluczowaną punktami i profilem, żeby o tę samą trasę nie pytać dwa razy; twojego adresu IP używa tylko do liczenia żądań na potrzeby limitu częstotliwości i nie zapisuje żadnego śladu tego, kto pytał. Wyszukiwanie miejsc i nazwy wyświetlane dla twoich przystanków przechodzą przez tę samą serwerową funkcję geokodowania co w aplikacji, opisaną wyżej.
Planowanie na tej stronie nie wymaga konta, a nic z tego, co planujesz, nie trafia na nasze serwery, dopóki tego nie zapiszesz. Poza opisanymi tutaj krótkotrwałymi buforami, które przechowują miejsca i trasy, a nie ludzi, nic z tego, co planujesz, nie trafia do naszej pamięci. Trasa, którą rysujesz, jest trzymana tylko w twojej własnej przeglądarce (zob. §15), dopóki nie wyeksportujesz jej jako pliku GPX, który zostaje zapisany na twoim urządzeniu i nie jest nigdzie wysyłany, albo nie zalogujesz się i jej nie zapiszesz; wtedy trafia do twoich tras, jak opisano w §3.2.
O twoją bieżącą lokalizację ta strona prosi tylko wtedy, gdy naciśniesz przycisk lokalizacji na mapie planera tras albo „Dodaj moją lokalizację”, a twoja przeglądarka najpierw pyta cię o zgodę. Pozycja jest używana w twojej przeglądarce do wyśrodkowania mapy; jeśli ją dodasz, staje się przystankiem jak każdy inny i jest wysyłana, żeby wyznaczyć trasę, jak opisano wyżej. Nie przechowujemy jej.
Przystanki wzdłuż trasy na tej stronie są wyszukiwane tylko wtedy, gdy jesteś zalogowany, przez tę samą funkcję wyszukiwania POI co w aplikacji, opisaną wyżej. Zapytanie zawiera linię trasy, wybrane przez ciebie kategorie i id twojego konta. Dzięki id konta funkcja sprawdza, czy masz Plus, i liczy darmowe użycia na konto, a nie na przeglądarkę (zob. następny akapit).
Darmowe użycia. Wyszukiwanie POI, pogoda, wyszukiwanie miejsc i organizowanie przejazdu grupowego to funkcje Plus, które można kilka razy wypróbować bez Plus. Żeby policzyć te użycia, aplikacja wysyła losowy identyfikator, który tworzy na twoim telefonie i przechowuje w bezpiecznej pamięci telefonu, razem z twoim identyfikatorem klienta RevenueCat, żeby nasz serwer mógł zapytać RevenueCat, czy masz Plus (zob. §10). Nasz serwer prowadzi jeden mały wpis na identyfikator i funkcję: ile użyć wykorzystano i kiedy to się ostatnio zmieniło. Identyfikator nie jest powiązany z twoim kontem, więc wpis nie wygasa automatycznie i nie da się go przypisać do ciebie, gdy usuwasz konto; mówi tylko, ile razy dana instalacja użyła danej funkcji. Na tej stronie licznik jest natomiast prowadzony według id twojego konta, a ten wpis jest usuwany razem z twoim kontem.
Odpowiedzi o pogodzie i geokodowaniu są buforowane po naszej stronie, żeby powtórzone zapytania nie pytały ponownie: pogoda przez 2 godziny, geokodowanie przez około tydzień. Bufory są kluczowane miejscem, nie rowerzystą.
Skąd pochodzą POI. Wyszukiwanie POI odpowiada z tabeli w naszej własnej bazie danych (Supabase, zob. §10), która zawiera około 10 milionów punktów zainteresowania, takich jak woda pitna, jedzenie, toalety i sklepy rowerowe, wziętych z wyciągu z całej bazy danych OpenStreetMap. Aktualizujemy ją ręcznie od czasu do czasu z nowszego wyciągu, bez stałego harmonogramu, więc miejsca dodanego niedawno do OpenStreetMap może tam jeszcze nie być. Obszar wyszukiwania (punkt z promieniem albo linia trasy) i kategorie nie wychodzą poza nasz serwer, a odpowiedzi nie są buforowane.
9. Dziennik diagnostyczny
Aplikacja prowadzi techniczny dziennik, żeby problemy z Bluetooth i sprawy dla wsparcia dało się zgłosić.
- Jest włączony domyślnie. Rowerzysta, który natrafi na problem, ma dziennik do załączenia bez potrzeby wcześniejszej przezorności, żeby najpierw włączyć nagrywanie. Wyłącz go w każdej chwili w Ustawienia → Diagnostyka.
- Hasła, tokeny i klucze API są usuwane, zanim cokolwiek zostanie zapisane — token bearer, klucz API, token magicznego linku lub kod OAuth pojawiający się gdziekolwiek w dzienniku staje się jednokierunkowym znacznikiem, nie samym poświadczeniem.
- Zostaje na telefonie, dopóki nie załączysz go do zgłoszenia dla wsparcia. Dwa rotowane pliki we własnej pamięci aplikacji; nic nie opuszcza telefonu wcześniej. Nie ma kroku z oknem tworzenia e-maila — zgłoszenie dla wsparcia jest wysyłane z samej aplikacji, jako wiadomość w trwającym wątku wsparcia (zob. następny punkt). Załączenie tam dziennika wysyła go do prywatnego zasobnika przechowywania, a ta wysłana kopia jest usuwana po 180 dniach. Kopię na telefonie możesz wyczyścić, a rejestrowanie wyłączyć, w każdej chwili w Ustawienia → Diagnostyka.
- Zgłoszenie dla wsparcia to wątek, nie jednorazowy e-mail. Cokolwiek napiszesz — z załączonym dziennikiem czy bez — jest przechowywane jako część trwającej rozmowy ze wsparciem, powiązanej z twoim kontem i adresem e-mail, którym się logujesz. Może ją czytać personel BikeOtter odpowiadający na zgłoszenia — i nikt inny. Sama rozmowa jest przechowywana, dopóki nie usuniesz konta, i wtedy jest usuwana razem z nim (zob. stronę usuwania konta); wysłany dziennik ma niezależnie swój własny 180-dniowy zegar, niezwiązany z kontem.
- Zrzut ekranu, który załączasz sam, jest przechowywany tak samo. Edytor wsparcia przyjmuje jeden obraz na wiadomość — wybrany przez ciebie z biblioteki zdjęć telefonu, nigdy nie czytany automatycznie i nigdy nie pobierany z galerii w tle. To, co wybrałeś, trafia do osobnego prywatnego zasobnika, mogą to odczytać osoby z BikeOtter odpowiadające na zgłoszenia i nikt inny, a po 180 dniach zostaje usunięte — na tym samym zegarze co wysłany dziennik. Zrzut ekranu pokazuje to, co akurat było na ekranie: obejrzyj go przed załączeniem; aż do wysłania wiadomości możesz go usunąć w edytorze.
- Opinia zostawiona bez konta jest naprawdę anonimowa. Skrót Zostaw opinię na ekranie głównym nie prosi o zalogowanie. Przechowywane jest to, co napisałeś, wersja aplikacji i platforma, losowy identyfikator wygenerowany na twoim telefonie, który istnieje tylko po to, żebyśmy mogli ograniczać nadużycia, oraz — tylko jeśli zdecydujesz się go wpisać — adres e-mail, żebyśmy mogli odpowiedzieć. Zostaw to pole puste, a nie mamy żadnego sposobu, żeby powiązać wiadomość z tobą: ani z kontem, ani z imieniem, ani z urządzeniem, które moglibyśmy zidentyfikować. Może ją czytać personel BikeOtter — i nikt inny.
- Uczciwa konsekwencja tej anonimowości: jeśli nie zostawiłeś adresu, nie możemy rozpoznać wiadomości z opinią jako twojej, co oznacza, że nie możemy jej też usunąć na żądanie — nie ma niczego, z czym moglibyśmy cię powiązać. Jeśli chcesz mieć tę możliwość, zostaw adres albo skorzystaj zamiast tego z rozmowy ze wsparciem, która jest powiązana z twoim kontem i znika razem z nim.
- Co w nim jest: wersja i build aplikacji, model telefonu, wersja systemu operacyjnego, ustawienia regionalne i strefa czasowa, plus techniczny ślad połączeń z urządzeniami i zdarzeń aplikacji. Tokeny udostępniania na żywo są ucinane przed zapisem. Może zawierać współrzędne pozycji — co najmniej jedna funkcja urządzenia loguje szerokość i długość geograficzną rowerzysty — plus współrzędne tras, zapisane miejsca i numery seryjne urządzeń. To nie jest redagowane, więc traktuj dziennik diagnostyczny jak dane o tobie i wysyłaj go tylko komuś, komu ufasz.
10. Podmioty zewnętrzne, z których korzystamy
Pełna lista zewnętrznych usług, z którymi łączą się aplikacja, backend i ta strona. Innych nie ma, a w szczególności nigdzie w produkcie nie ma usługi analityki, atrybucji, reklamy ani raportowania awarii.
| Usługa | Do czego | Co otrzymuje |
|---|---|---|
| Supabase | Baza danych, logowanie, funkcje serwerowe i kanał czasu rzeczywistego stojący za śledzeniem na żywo i synchronizacją tras | Wszystko z §3–§8, co w ogóle jest przechowywane, plus metadane połączenia widoczne dla każdego hosta. Hostowane w UE — projekt działa w regionie Supabase West EU (Ireland), więc te dane są przechowywane wewnątrz EOG. |
| Cloudflare | Hosting bikeotter.app i stron podglądu; Worker,
który wysyła e-maile z powiadomieniami o przejeździe; serwer map i proxy do
wyznaczania tras dla planera tras tej strony pod map.bikeotter.app | Żądania do tej strony i do punktu wysyłki poczty, łącznie z adresem IP, w ramach ich obsługi i ochrony. W przypadku planera tras także punkty, które stawiasz, i wybrany profil (zob. §8). Logi żądań Workera są przechowywane według własnych domyślnych zasad Cloudflare. |
| Open-Meteo | Prognozy pogody | Współrzędne i czasy, wysyłane przez nasz serwer, nie twój telefon. |
Photon (photon.komoot.io) i Nominatim
(nominatim.openstreetmap.org) | Zamiana nazw miejsc na współrzędne i z powrotem | Szukana fraza lub współrzędne, wysyłane przez nasz serwer. |
BRouter (brouter.de) | Wyznaczanie trasy między twoimi punktami | Współrzędne twoich punktów trasy i wybrany profil — wysyłane bezpośrednio przez twój telefon, więc widzi twój adres IP. Z planera tras na tej stronie wysyła je zamiast tego nasze proxy do wyznaczania tras, więc tam BRouter nie widzi twojego adresu IP. |
| Serwer kafelków OpenStreetMap | Obraz mapy w aplikacji i na stronie podglądu | Które kafelki mapy oglądasz — żądane bezpośrednio, więc widzi twój adres IP. |
| Strava | Opcjonalny import tras/aktywności i przesyłanie przejazdów | Zob. §7. Stany Zjednoczone. |
| RevenueCat (RevenueCat, Inc.) | Zakupy Plus i sprawdzanie, czy masz Plus | Z aplikacji, bezpośrednio i przy każdym uruchomieniu: twój identyfikator klienta RevenueCat (losowy, dopóki się nie zalogujesz, potem id twojego konta), zakupy i potwierdzenia zakupu z App Store lub Google Play oraz zwykłe dane aplikacji i urządzenia, takie jak platforma oraz wersja systemu i aplikacji. Żądanie idzie bezpośrednio, więc RevenueCat widzi twój adres IP. Z naszego serwera, gdy funkcja musi wiedzieć, czy masz Plus: ten identyfikator klienta (z tej strony id twojego konta). Zapisujemy odpowiedź, tak lub nie, z czasem zapytania i pytamy ponownie po 10 minutach. Stany Zjednoczone. |
| Shorebird | Zdalne dostarczanie poprawek kodu do zainstalowanej aplikacji | Sprawdzenie aktualizacji przy uruchomieniu. Zob. §10.1 — nie jest opcjonalne. |
| YouTube (Google Ireland Limited) | Odtwarzanie dwóch filmów na stronie głównej tej witryny — i dopiero po naciśnięciu odtwarzania | Twój adres IP, strona, z której uruchomiono odtwarzanie, i zwykłe dane przeglądarki — pobierane bezpośrednio przez twoją przeglądarkę z youtube-nocookie.com, więc Google widzi twój adres IP. Zob. §15. |
Sklepy z aplikacjami to osobna sprawa: jeśli instalujesz BikeOtter z App Store Apple lub z Google Play, między tobą a nimi obowiązują własne zasady tego sklepu dotyczące konta, zakupów i raportowania awarii, na które nie mamy wpływu.
10.1 Shorebird i dlaczego łączy się z serwerem bez pytania
BikeOtter jest wydawany przez Shorebird, który pozwala nam dostarczyć poprawkę kodu Dart aplikacji zdalnie, między wydaniami sklepowymi. To mechanizm stojący za łatką, która przychodzi bez aktualizacji ze sklepu.
Część, którą warto znać: aplikacja sprawdza, czy jest łatka, przy uruchomieniu, automatycznie, i nie ma ustawienia, które to wyłącza. Nasza konfiguracja nie wyłącza automatycznego sprawdzania, a aplikacja nie daje możliwości rezygnacji — jedyny sposób, żeby je zatrzymać, to nie uruchamiać aplikacji. Wolimy powiedzieć to wprost, niż to zakopać.
Nie prowadzimy serwerów Shorebird i nie możemy podejrzeć, co wysyła jego aktualizator, bo aktualizator jest wbudowany w środowisko uruchomieniowe aplikacji, a nie w kod, który piszemy. To, czego takie sprawdzenie z konieczności wymaga, nie jest jednak kwestią opinii: żeby w ogóle dostać odpowiedź, musi wskazać, która aplikacja pyta (nasz id aplikacji Shorebird, który nie jest tajny i jest ten sam w każdej instalacji) oraz która wersja i który poziom łatki są już zainstalowane, a — jak każde żądanie sieciowe — dociera do serwerów Shorebird z twojego adresu IP. Załóż, że Shorebird widzi co najmniej tyle i że może to logować, tak jak każdy host loguje żądania.
Dwóch rzeczy nie udało nam się ustalić i nie będziemy ich zgadywać: dokładnej zawartości tego żądania poza powyższym oraz kraju, w którym stoją jego serwery. Jeśli potrzebujesz którejś z nich przed instalacją, zapytaj nas, a zdobędziemy pisemną odpowiedź samego Shorebird, zamiast tu spekulować.
Co możemy wykluczyć: sprawdzenie nie jest powiązane z twoim kontem, a BikeOtter działa bez logowania, więc żądanie nie niesie żadnej tożsamości, którą byśmy mu nadali. Łatka zmienia kod aplikacji — nigdy twoje dane, twoje przejazdy ani twoje trasy.
11. Uprawnienia telefonu
Aplikacja prosi o tak mało, jak się da, a każde uprawnienie służy dokładnie jednej rzeczy.
| Uprawnienie | Po co |
|---|---|
| Bluetooth | Żeby znaleźć twój licznik i czujniki i się z nimi komunikować. Na Androidzie uprawnienie skanowania jest zadeklarowane jako nigdy nieużywane do ustalania lokalizacji. |
| Lokalizacja | Przybliżona lokalizacja na Androidzie, „podczas używania aplikacji” na iOS: żeby szukać POI w twojej okolicy i zacząć przeliczanie trasy z miejsca, w którym jesteś. Lokalizacja w tle nie jest żądana na żadnej z platform. Podczas przejazdu udostępniana pozycja pochodzi z licznika przez Bluetooth. |
| Mikrofon i rozpoznawanie mowy | Polecenia głosowe. Rozpoznawanie działa na urządzeniu; dźwięk nie jest nigdzie wysyłany. |
| Powiadomienia | Żeby pokazywać trwające powiadomienie przejazdu i alerty. |
| Dostęp do powiadomień (tylko Android) | Opcjonalny. Pozwala aplikacji czytać przychodzące powiadomienia telefonu, żeby wyświetlać je na twoim liczniku. Przyznajesz go samodzielnie w ustawieniach systemu, a treść powiadomień nigdy nie jest zapisywana ani wysyłana. |
| Uruchamianie przy starcie / wyjątek baterii (tylko Android) | Żeby przerwany przejazd mógł wznowić się po restarcie i nie był zabijany w trakcie jazdy. |
Aplikacja nie prosi o zdjęcia, aparat, listę kontaktów telefonu, kalendarz ani żaden identyfikator reklamowy i nie używa uprawnienia śledzenia Apple, bo nie śledzi.
12. Okresy przechowywania w skrócie
| Dane | Przechowywane przez |
|---|---|
| Punkty pozycji na żywo | 7 dni po zakończeniu lub wygaśnięciu przejazdu — usuwane razem z sesją |
| Rekord sesji na żywo | 7 dni po jej zakończeniu lub wygaśnięciu |
| Rekord przejazdu grupowego | 7 dni po jego zakończeniu lub wygaśnięciu |
| Czasy okrążeń wyścigu | 90 dni po ostatniej zmianie — zostają także po skasowaniu samego przejazdu grupowego |
| Zaproszenia na wyścig (kogo zaprosiłeś) | Kasowane razem z przejazdem grupowym wyścigu — 7 dni po jego zakończeniu lub wygaśnięciu |
| Wiadomości od obserwujących | Usuwane razem z sesją — czyli w tym samym oknie 7 dni |
| Bufor pogody | 2 godziny |
| Bufor geokodowania | 8 dni |
| Bufor tras proxy planera tras na stronie | Do 24 godzin |
| Bufor odpowiedzi Strava | 48 godzin |
| Kontakty i ich rekordy powiadomień | Dopóki nie usuniesz kontaktu lub konta — bez automatycznego wygasania |
| Połączenie ze Strava | Dopóki się nie odłączysz lub nie usuniesz konta |
| Licznik darmowych użyć (zob. §8) | W aplikacji: prowadzony według identyfikatora na twoim telefonie, nie według konta, bez automatycznego wygaśnięcia. Na tej stronie: dopóki nie usuniesz konta |
| Nasz wpis o tym, czy masz Plus (z RevenueCat) | Sprawdzany ponownie po 10 minutach, gdy jest potrzebny. Wpis dla id twojego konta jest usuwany razem z kontem; wpis dla losowego identyfikatora używanego przed zalogowaniem nie wygasa automatycznie |
| Zsynchronizowane trasy (synchronizacja tras albo zapisane na tej stronie) i to, kiedy ostatnio synchronizowałeś | Dopóki nie usuniesz ich albo konta, albo 24 miesiące po twojej ostatniej synchronizacji, zależnie od tego, co nastąpi wcześniej |
| Znacznik pozostawiony przez trasę, którą usunąłeś z chmury | 180 dni, żeby twoje inne urządzenia też usunęły swoją kopię |
| Kopia zapasowa ustawień (Plus, tylko jeśli ją włączyłeś) | Dopóki nie wyłączysz kopii zapasowej — co natychmiast ją usuwa — lub nie usuniesz konta; bez automatycznego wygasania |
| Rekord konta | Dopóki nie poprosisz nas o jego usunięcie — zob. jak usunąć konto |
| Rozmowa ze wsparciem (wątek i wiadomości) | Dopóki nie usuniesz konta — zob. jak usunąć konto |
| Adres kontaktowy z listy życzeń (tylko jeśli wyraziłeś zgodę) | Dopóki nie usuniesz konta |
| Anonimowa opinia (skrót na ekranie głównym) | Przechowywana, dopóki się nią nie zajmiemy — bez automatycznego wygasania. Jeśli nie zostawiłeś adresu do odpowiedzi, nie da się jej rozpoznać jako twojej, więc nie można jej usunąć na żądanie |
| Dziennik diagnostyczny | Domyślnie na twoim telefonie, rotowany automatycznie, możesz go usunąć w każdej chwili; po załączeniu do zgłoszenia dla wsparcia wysłana kopia jest przechowywana 180 dni na własnym zegarze, niezależnie od konta |
| Zrzut ekranu załączony do wiadomości wsparcia | 180 dni, na własnym zegarze, niezależnie od konta |
Logi serwerów i platform prowadzone przez naszych dostawców hostingu (Supabase, Cloudflare) podlegają własnym domyślnym okresom przechowywania tych dostawców i mogą przez krótki czas zawierać adresy IP jako nieuniknioną część obsługi żądania.
13. Podstawy prawne
- Art. 6(1)(b) GDPR — wykonanie tego, o co prosisz. Logowanie cię, prowadzenie uruchomionego przez ciebie udostępniania na żywo, wysyłanie zamówionych przez ciebie e-maili z powiadomieniami, przesyłanie przejazdu na połączone przez ciebie konto Strava, wyznaczenie narysowanej przez ciebie trasy, przechowywanie tras, które zsynchronizowałeś albo zapisałeś na tej stronie, sprawdzanie, czy masz Plus, i liczenie twoich darmowych użyć, i wysłanie zgłoszenia dla wsparcia z załączonym dziennikiem diagnostycznym.
- Art. 9(2)(a) GDPR — wyraźna zgoda na dane o zdrowiu. Tętno i moc to dane o zdrowiu. Są wysyłane tylko wtedy, gdy włączysz „udostępniaj tętno i moc”; przełącznik jest domyślnie wyłączony, a jego wyłączenie zatrzymuje wysyłanie. Kadencja jest wysyłana pod tym samym przełącznikiem. Nie twierdzimy, że kadencja to dane o zdrowiu w rozumieniu Art. 9 — to odczyt z czujnika na korbie, nie z twojego ciała — ale należy do tej samej rodziny i dostaje tę samą ochronę, a nie słabszą.
- Art. 6(1)(a) i Art. 9(2)(a) GDPR — wyraźna zgoda, dla kopii zapasowej ustawień. Kopia twoich ustawień jest wysyłana dopiero wtedy, gdy jako użytkownik Plus włączysz kopię zapasową ustawień; domyślnie jest wyłączona. Ponieważ kopia zawiera twój typ skóry i masę ciała, które mogą być odczytane jako dane o zdrowiu, traktujemy jej włączenie jako wyraźną zgodę w rozumieniu Art. 9. Wyłączenie wycofuje tę zgodę i usuwa kopię. Zob. §3.1.
- Art. 6(1)(a) GDPR (a w zakresie tego, co odtwarzacz zapisuje w twojej przeglądarce, § 25(1) TDDDG) — zgoda, dla filmów na stronie głównej. Naciśnięcie odtwarzania to prośba o wczytanie odtwarzacza YouTube; wcześniej nic z YouTube się nie wczytuje. Wycofujesz ją, po prostu nie naciskając ponownie odtwarzania: opuszczenie lub odświeżenie strony usuwa odtwarzacz.
- § 25(2) No. 2 TDDDG — niezbędne przechowywanie w twojej przeglądarce, dla kilku wpisów, które ta strona trzyma w pamięci lokalnej twojej przeglądarki: wybranego języka i motywu, tego, co zostawia po sobie demo, logowania na liście życzeń albo w planerze tras (wraz z jego jednorazowym kodem dla Stravy) oraz trasy, którą rysujesz w planerze tras, wraz z informacją, która to z twoich zapisanych tras. §15 wymienia każdy z nich. Nie wymagają one zgody i nikt cię o nią nie prosi.
- Art. 6(1)(f) GDPR — prawnie uzasadnione interesy w utrzymaniu usługi działającej i wolnej od nadużyć: limity częstotliwości, zabezpieczenia typu jeden e-mail na kontakt na przejazd, obsługa odrzuconej poczty, minimalne logowanie żądań, jakie wykonują nasi dostawcy hostingu, oraz domyślnie włączony dziennik diagnostyczny na urządzeniu, żeby zgłoszenie dla wsparcia mogło go zawierać — możesz go wyłączyć w Ustawienia → Diagnostyka w każdej chwili.
Wycofanie zgody jest zawsze możliwe i działa na przyszłość: zakończ udostępnianie, wyłącz przełącznik tętna i mocy, wyłącz dziennik, odłącz Strava, usuń kontakt, wyłącz kopię zapasową ustawień, usuń zsynchronizowaną trasę albo zachowaj ją tylko na swoim telefonie.
14. Twoje prawa
Na mocy GDPR masz prawo dostępu do swoich danych (Art. 15), ich sprostowania (Art. 16) lub usunięcia (Art. 17), ograniczenia przetwarzania (Art. 18), otrzymania ich w przenośnej formie (Art. 20) oraz sprzeciwu wobec przetwarzania opartego na prawnie uzasadnionych interesach (Art. 21). Tam, gdzie przetwarzanie opiera się na zgodzie, możesz ją wycofać w każdej chwili.
Napisz na support@bikeotter.app, a my się tym zajmiemy. Wiele z tego możesz też zrobić samodzielnie w aplikacji: zakończyć udostępnianie, usunąć kontakt, odłączyć Strava, wyczyścić dziennik diagnostyczny, wyłączyć kopię zapasową ustawień (co usuwa kopię na naszych serwerach), usunąć zsynchronizowaną trasę albo zachować ją tylko na swoim telefonie.
Usunięcie danych (Art. 17) ma własną stronę, bo zasługuje na szczegóły: jak usunąć konto — kroki, co jest z nim usuwane, co pozostaje potem i na jak długo.
Jeśli uważasz, że robimy to źle, możesz złożyć skargę do organu nadzorczego ochrony danych — w UE do organu w miejscu, w którym mieszkasz, w którym pracujesz lub w którym doszło do domniemanego naruszenia (Art. 77 GDPR).
15. Ta strona
bikeotter.app to zestaw statycznych stron hostowanych na Cloudflare. Nie ustawia żadnych ciasteczek i nie prowadzi żadnej analityki. Trzyma natomiast kilka małych wpisów w pamięci lokalnej twojej przeglądarki, a każdy z nich jest zapisywany z powodu czegoś, co wybrałeś, albo funkcji, z której skorzystałeś. Wszystkie oprócz dwóch nigdy nie opuszczają twojej przeglądarki: odczytuje je sama strona i nic poza nią — ani my, ani nikt inny. Te dwa, które ją opuszczają, istnieją tylko wtedy, gdy się zalogujesz, na stronie listy życzeń albo w planerze tras: są wysyłane do naszego backendu, bo na tym polega logowanie. Pełna lista:
| Wpis (klucz) | Co zawiera i dlaczego | Czy jest gdzieś wysyłany? |
|---|---|---|
bikeotter:lang | Kod języka, na przykład de. Zapisywany, gdy wybierzesz język w stopce strony — albo przy twojej pierwszej wizycie na angielskiej stronie, jeśli twoja przeglądarka prosi o niemiecki, hiszpański, francuski, włoski lub polski: strona przełącza cię wtedy raz na ten język i zapamiętuje, że to zrobiła, żeby nigdy więcej nie przełączać cię wbrew twojemu wyborowi. | Nie |
bikeotter-site-theme | light lub dark. Zapisywany tylko wtedy, gdy naciśniesz przycisk jasnego/ciemnego motywu w nagłówku, żeby następna strona otworzyła się w wybranym przez ciebie motywie. Dopóki go nie naciśniesz, nic nie jest zapisywane, a strony podążają za ustawieniem twojego systemu. | Nie |
FlutterSecureStorage i FlutterSecureStorage.plus_device_key | Tylko z dema pod /demo/ i dopiero wtedy, gdy rozpoczniesz w nim przejazd grupowy: losowy identyfikator, zaszyfrowany kluczem przechowywanym obok niego. Demo to prawdziwa aplikacja, która tworzy ten identyfikator, gdy rozpoczynasz przejazd grupowy; w demie ten przejazd jest symulowany w twojej przeglądarce, więc identyfikator do niczego nie służy i po prostu zostaje. | Nie |
sb-ccskijubebzhwpknjkpl-auth-token | Tylko jeśli zalogujesz się na stronie listy życzeń albo w planerze tras: twoja sesja logowania — token dostępu, token odświeżania oraz id użytkownika i adres e-mail twojego konta — żebyś po powrocie nadal był zalogowany. | Tak, do naszego backendu (Supabase, zob. §10), z każdym żądaniem, które strona listy życzeń albo planer tras wysyła, gdy jesteś zalogowany — tak każde z nich rozpoznaje, że głos, propozycja lub zapisana trasa pochodzą od ciebie |
bikeotter.strava.web.pending | Tylko podczas logowania do planera tras przez Stravę: losowy kod do jednego użycia, tworzony w twojej przeglądarce, gdy naciśniesz „Kontynuuj ze Stravą”, i przechowywany przez tych kilka chwil, które spędzasz na stronie Stravy. Udowadnia naszemu backendowi, że logowanie wracające ze Stravy jest tym, które rozpoczęła ta przeglądarka. Jest przechowywany w pamięci sesji tej karty, którą przeglądarka czyści po zamknięciu karty, i usuwany, gdy tylko logowanie się zakończy. | Tak, raz, do naszego backendu (Supabase, zob. §10), żeby dokończyć to logowanie. Na początku wysyłany jest tylko odcisk kodu (skrót SHA-256) |
bikeotter.planner.cloud.v1 | Tylko jeśli zalogujesz się w planerze tras: id użytkownika twojego konta, id i numer wersji otwartej zapisanej trasy (puste dla trasy jeszcze niezapisanej) oraz informacja, czy ma niezapisane zmiany. Dzięki temu po przeładowaniu otwiera się ta sama zapisana trasa, a trasa narysowana przed zalogowaniem nie zostaje zapisana dwa razy. Wpis jest nadpisywany, gdy otwierasz, zapisujesz lub edytujesz trasę, i usuwany, gdy wylogujesz się z planera tras. | Nie. Zapisanie trasy wysyła jej id i wersję do naszego backendu (zob. §3.2), ale sam ten wpis nigdy nie opuszcza twojej przeglądarki |
bikeotter.planner.draft.v1 | Tylko jeśli korzystasz z planera tras pod bikeotter.app/plan: trasa, którą rysujesz (jej przystanki i ich nazwy, profil, to, czy wraca do startu, oraz kiedy została ostatnio zapisana), albo zaimportowany przez ciebie plik GPX, żeby przeładowanie strony lub zamknięcie karty jej nie skasowało. Wpis jest nadpisywany podczas edycji i zostaje, dopóki nie wyczyścisz danych tej strony w przeglądarce. | Nie. Punkty są wysyłane, żeby wyznaczyć trasę (zob. §8), ale sam ten wpis nigdy nie opuszcza twojej przeglądarki |
bikeotter.planner.poiTypes.v1 | Tylko jeśli w planerze tras szukasz przystanków wzdłuż trasy: które kategorie masz włączone (woda pitna, jedzenie, kawa i tak dalej), żeby następne wyszukiwanie szukało tych samych. Wpis jest zapisywany od nowa, gdy włączasz lub wyłączasz kategorię, i zostaje, dopóki nie wyczyścisz danych tej strony w przeglądarce. | Nie. Kategorie są wysyłane z każdym wyszukiwaniem (zob. §8), ale sam ten wpis nigdy nie opuszcza twojej przeglądarki |
Żeby je usunąć, wyczyść dane tej witryny w przeglądarce — w większości przeglądarek przez ikonę po lewej stronie paska adresu albo w ustawieniach ciasteczek i danych witryn. Okno prywatne startuje bez żadnego z nich i zapomina je, gdy je zamkniesz. Jeśli twoja przeglądarka blokuje dane witryn, strony nadal działają: podążają za językiem i motywem twojego systemu i po prostu nie mogą zapamiętać wyboru.
Dlaczego nikt cię najpierw nie pyta. Zapisywanie i odczytywanie tych wpisów nie wymaga zgody na mocy § 25(2) No. 2 TDDDG, bo każdy z nich jest niezbędny do czegoś, o co prosisz tę stronę: stron w twoim języku i w wybranym przez ciebie motywie, dema, które otworzyłeś, trasy, którą planujesz, i pozostania zalogowanym na liście życzeń albo w planerze tras. Sesja logowania to dane osobowe i dla niej podstawą jest Art. 6(1)(b) GDPR (§13). Nie ma tu nic innego, na co trzeba by wyrażać zgodę — dlatego nikt cię o nią nie pyta. Jedynym wyjątkiem jest film na stronie głównej, opisany niżej: naciśnięcie jego przycisku odtwarzania jest zgodą.
Każdy zasób, którego potrzebuje tutejsza strona, jest serwowany z tej witryny. Kroje pisma (Archivo i Geist Mono) hostujemy sami, zamiast pobierać je z CDN-u fontów — właśnie po to, żeby czytanie strony nie przekazywało twojego adresu IP podmiotowi trzeciemu. Nie ma menedżera tagów, widżetu udostępniania, usługi fontów webowych ani odtwarzacza wideo, dopóki sam go nie wywołasz. Jedyną stroną, która z konieczności widzi twoje żądanie, jest Cloudflare, który hostuje te strony — nie da się tego uniknąć, bo coś musi je serwować.
Filmy na stronie głównej są jedynym wyjątkiem — i dopiero po naciśnięciu odtwarzania. Strona główna pokazuje dwa filmy BikeOtter hostowane na YouTube. Razem ze stroną wczytują się tylko obraz podglądu i przycisk odtwarzania, oba serwowane z tej witryny; żadne żądanie nie trafia do YouTube ani Google, dopóki nie naciśniesz odtwarzania. Naciśnięcie odtwarzania zastępuje podgląd odtwarzaczem YouTube, wczytywanym z youtube-nocookie.com — trybu rozszerzonej prywatności YouTube, obsługiwanego przez Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irlandia. Od tej chwili twoja przeglądarka komunikuje się bezpośrednio z Google: Google otrzymuje twój adres IP, adres strony i zwykłe dane przeglądarki, a w trakcie odtwarzania odtwarzacz może zapisywać identyfikatory w twojej przeglądarce i wysyłać do Google informacje o odtwarzaniu, które Google może przetwarzać także w Stanach Zjednoczonych (Google LLC ma certyfikację w ramach EU-US Data Privacy Framework). Tryb rozszerzonej prywatności oznacza, że YouTube nie wykorzystuje obejrzenia osadzonego filmu do personalizowania tego, co pokazuje ci w innych miejscach YouTube — ale nie jest anonimowy. My nie otrzymujemy z tego niczego. Obowiązuje polityka prywatności Google: policies.google.com/privacy. Jeśli nie naciśniesz odtwarzania, nic z tego się nie dzieje. Link „Obejrzyj na YouTube” pod każdym filmem otwiera go zamiast tego na youtube.com, gdzie obowiązują zwykłe warunki YouTube.
Podgląd śledzenia na żywo pod bikeotter.app/r/… i podgląd grupowy pod /g/… oraz mapa tylko do oglądania osadzana przez partnera pod /w/… dodatkowo ładują dane udostępnionego przejazdu z naszego backendu i kafelki mapy z OpenStreetMap. Otwarcie linku podglądu celowo nie zostawia żadnej sesji w twojej przeglądarce: używany token dostępu jest trzymany w pamięci tylko na czas tej wizyty i nie jest utrwalany. Obserwujący są liczeni, nie identyfikowani.
Planer tras pod bikeotter.app/plan dodatkowo ładuje swoją mapę z
naszego własnego serwera map pod map.bikeotter.app i wysyła punkty, które
stawiasz, do naszego proxy do wyznaczania tras, a to, co wpisujesz w jego pole wyszukiwania,
do naszej funkcji geokodowania, jak opisano w §8. Działa bez konta i nie
zapisuje niczego na naszych serwerach, chyba że się zalogujesz i zapiszesz trasę
(§3.2). Po zalogowaniu wczytuje też twoje zapisane trasy z naszego backendu i
wyszukuje przystanki wzdłuż trasy przez naszą funkcję wyszukiwania POI (§8).
Linki podglądu są wyłączone z wyszukiwarek przez robots.txt, a każdy niesie
instrukcję noindex, więc udostępniony przejazd nie ma pojawiać się w wynikach
wyszukiwania.
16. Dzieci
BikeOtter nie jest kierowany do dzieci i nie jest przeznaczony do użytku przez osoby poniżej 16 lat. Nie zbieramy świadomie danych od dzieci. Jeśli uważasz, że dziecko korzystało z aplikacji z kontem, napisz do nas, a je usuniemy.
17. Zmiany
Aplikacja jest młoda i wciąż się zmienia. Jeśli zmieni się to, co zbiera, ta strona zmieni się razem z nią, a wersja i data u góry pójdą do przodu. Istotne zmiany zostaną wskazane w aplikacji, a nie przemycone po cichu.
18. Kontakt
Pytania, wnioski lub poprawka do czegoś na tej stronie: support@bikeotter.app.
Zobacz też warunki korzystania i zastrzeżenie dotyczące bezpieczeństwa oraz impressum.