From da8695c214c13f3ce336e85caa03103768b2c831 Mon Sep 17 00:00:00 2001 From: paul lahana Date: Fri, 25 Sep 2026 08:23:33 +0200 Subject: [PATCH 1/2] feat: add analytics opt-out control AddAnalyticsOptOut component to AboutDrawer and PrivacyContent pages to allow users to disable analytics tracking. Initialize analytics opt-out functionality when about drawer loads. Update privacy policy documentation to reflect current data handling practices and service providers. --- src/app/aboutDrawer.ts | 2 + src/components/AnalyticsOptOut.astro | 69 +++++++++ src/components/PrivacyContent.astro | 220 +++++++++++++++++++-------- src/components/app/AboutDrawer.astro | 4 + src/layouts/PrivacyLayout.astro | 2 + src/lib/analyticsOptOut.js | 35 +++++ src/lib/i18n.ts | 10 ++ src/styles/main.css | 5 + tests/analyticsOptOut.test.js | 49 ++++++ tests/e2e/analytics-optout.spec.js | 81 ++++++++++ 10 files changed, 416 insertions(+), 61 deletions(-) create mode 100644 src/components/AnalyticsOptOut.astro create mode 100644 src/lib/analyticsOptOut.js create mode 100644 tests/analyticsOptOut.test.js create mode 100644 tests/e2e/analytics-optout.spec.js diff --git a/src/app/aboutDrawer.ts b/src/app/aboutDrawer.ts index 112099a..38f55d3 100644 --- a/src/app/aboutDrawer.ts +++ b/src/app/aboutDrawer.ts @@ -1,4 +1,5 @@ import { el } from './dom'; +import { initAnalyticsOptOut } from '../lib/analyticsOptOut.js'; const drawer = () => el('about-drawer'); @@ -50,4 +51,5 @@ export function initAboutDrawer() { el('about-overlay').addEventListener('click', dismissAbout); document.addEventListener('keydown', (e: KeyboardEvent) => { if (e.key === 'Escape') dismissAbout(); }); document.addEventListener('keydown', trapAboutFocus); + initAnalyticsOptOut(); } diff --git a/src/components/AnalyticsOptOut.astro b/src/components/AnalyticsOptOut.astro new file mode 100644 index 0000000..2a0d4c2 --- /dev/null +++ b/src/components/AnalyticsOptOut.astro @@ -0,0 +1,69 @@ +--- +import { translations, type Lang } from '../lib/i18n'; + +interface Props { + lang: Lang; +} + +const { lang } = Astro.props; +const t = translations[lang]; +--- + + + + diff --git a/src/components/PrivacyContent.astro b/src/components/PrivacyContent.astro index d905938..7e0ba70 100644 --- a/src/components/PrivacyContent.astro +++ b/src/components/PrivacyContent.astro @@ -1,5 +1,6 @@ --- import type { Lang } from '../lib/i18n'; +import AnalyticsOptOut from './AnalyticsOptOut.astro'; interface Props { lang: Lang; @@ -11,33 +12,48 @@ const { lang } = Astro.props; {lang === 'fr' && (

Politique de confidentialité

-

Dernière mise à jour : juin 2026

+

Dernière mise à jour : septembre 2026

Ce que MeridianWay fait (et ne fait pas)

-

MeridianWay est une application entièrement statique : elle ne possède pas de serveur propre, ne crée pas de compte utilisateur et ne stocke aucune donnée personnelle en base de données. Tout le calcul (position du soleil, score d'ombre) s'effectue directement dans votre navigateur.

+

MeridianWay ne crée pas de compte utilisateur, ne vous demande aucune information personnelle et ne tient aucun fichier de ses utilisateurs. Tout le calcul (position du soleil, score d'ombre) s'effectue directement dans votre navigateur. Le site est hébergé par Fly.io, et trois relais (Cloudflare Workers) opérés par MeridianWay transmettent une partie des requêtes et en gardent les réponses en cache.

Données transmises à des services tiers

-

Pour fonctionner, l'application envoie certaines données à des services externes. Ces services reçoivent votre adresse IP ainsi que les données listées ci-dessous.

+

Pour fonctionner, l'application envoie certaines données à des services externes. Chaque service que votre navigateur contacte directement reçoit aussi votre adresse IP. OpenRouteService et Overpass sont interrogés par un relais MeridianWay et ne la reçoivent pas.

- - - - - - - + + + + + + + + + +
ServiceDonnées transmisesFinalité
Photon (komoot GmbH, DE)Texte saisi dans les champs adresseSuggestions d'autocomplétion
Nominatim (OSM Foundation, UK)Adresse saisie ; coordonnées GPS si géolocalisation activéeGéocodage et géocodage inverse
OpenRouteService (HeiGIT, DE)Coordonnées de départ et d'arrivéeCalcul des itinéraires
Overpass API (serveurs OSM)Zone géographique de l'itinéraireDonnées bâtiments et arbres
CartoCDN (Carto Inc., USA)Zone de la carte affichéeTuiles cartographiques
UmamiPage visitée, type d'appareil, langue du navigateur — sans cookies, IP anonymiséeStatistiques d'utilisation agrégées
Sentry (serveurs EU, Allemagne)Erreurs techniques, URL de la page, type de navigateur — sans données d'identitéDétection et correction de bugs
Fly.io
hébergement
Pages demandéesMise à disposition du site
Stadia MapsZone de la carte affichéeFond de carte
Photon
komoot GmbH, DE
Texte saisi dans les champs adresse ; lieu déjà choisi dans l'autre champSuggestions d'autocomplétion
Nominatim
OSM Foundation, UK
Adresse saisie ; coordonnées GPS si vous utilisez la géolocalisationGéocodage et géocodage inverse
Open-MeteoPoint central de l'itinéraireMétéo : nébulosité et température
Relais MeridianWay
Cloudflare Workers
Coordonnées de départ et d'arrivée ; zone de l'itinéraireRelais vers OpenRouteService et Overpass, hauteurs des bâtiments suisses ; réponses gardées en cache 7 à 30 jours, sans lien avec qui les a demandées
OpenRouteService
HeiGIT, DE, via le relais
Coordonnées de départ et d'arrivéeCalcul des itinéraires
Overpass API
serveurs OSM, via le relais
Zone géographique de l'itinéraireDonnées bâtiments et arbres
UmamiAdresse de la page, site de provenance, localisation approximative (pays, région) déduite de l'adresse IP, qui n'est pas conservée ; navigateur, système, taille d'écran, langue ; actions dans l'app (recherche lancée, partage…). Sans cookieStatistiques d'utilisation agrégées, désactivables (voir plus bas)
Sentry
serveurs EU, Allemagne
Erreurs techniques, adresse de la page, type de navigateur ; sans données d'identitéDétection et correction de bugs
-

La géolocalisation est optionnelle et uniquement déclenchée si vous cliquez sur le bouton de localisation.

+

Après une recherche, l'adresse de la page contient les points de départ et d'arrivée, ainsi que le texte saisi pour les désigner : c'est ce qui rend un itinéraire partageable. Umami et Sentry reçoivent donc ces informations avec l'adresse de la page.

+ +

La géolocalisation est optionnelle : l'app n'y a accès qu'avec votre autorisation, demandée par le navigateur. Elle sert quand vous appuyez sur un bouton de localisation et, dans l'app installée sur l'écran d'accueil, à proposer votre position comme départ à l'ouverture. Si vous avez déjà donné l'autorisation, l'app s'en sert aussi pour centrer la carte au démarrage.

Cookies et stockage local

-

MeridianWay n'utilise aucun cookie. Aucune donnée n'est enregistrée dans le stockage local de votre navigateur.

+

MeridianWay n'utilise aucun cookie. L'app enregistre en revanche jusqu'à trois informations dans le stockage local de votre navigateur :

+ +

Ces informations restent sur votre appareil. La position n'en sort que lorsqu'elle est reprise comme point de départ, et suit alors le même chemin que tout point de départ. Pour tout effacer, supprimez les données du site dans les réglages de votre navigateur.

+ +

Statistiques de visite

+

MeridianWay mesure son audience avec Umami, sans cookie et sans enregistrer d'identifiant sur votre appareil. Si vous préférez que vos visites ne soient pas comptées, désactivez l'interrupteur ci-dessous, ou celui du panneau À propos de l'app : plus rien n'est envoyé à Umami depuis ce navigateur, sans rechargement. Le réglage vaut pour ce navigateur sur cet appareil. Sur iPhone, l'app installée sur l'écran d'accueil a son propre stockage et se règle séparément. Il ne coupe pas les rapports d'erreurs envoyés à Sentry.

+

Vos droits

Conformément à la loi fédérale suisse sur la protection des données (nLPD) et au RGPD pour les utilisateurs de l'Union européenne, vous pouvez à tout moment demander quelles données vous concernant ont été traitées. Les données transmises aux services tiers sont régies par leurs propres politiques de confidentialité.

@@ -50,33 +66,48 @@ const { lang } = Astro.props; {lang === 'de' && (

Datenschutzerklärung

-

Zuletzt aktualisiert: Juni 2026

+

Zuletzt aktualisiert: September 2026

Was MeridianWay tut (und nicht tut)

-

MeridianWay ist eine vollständig statische Anwendung: Sie verfügt über keinen eigenen Server, erstellt keine Benutzerkonten und speichert keine personenbezogenen Daten in einer Datenbank. Alle Berechnungen (Sonnenposition, Schattenbewertung) erfolgen direkt in Ihrem Browser.

+

MeridianWay erstellt keine Benutzerkonten, fragt keine persönlichen Angaben ab und führt keine Kartei über seine Nutzerinnen und Nutzer. Alle Berechnungen (Sonnenposition, Schattenbewertung) erfolgen direkt in Ihrem Browser. Die Website wird bei Fly.io gehostet; drei von MeridianWay betriebene Relais (Cloudflare Workers) leiten einen Teil der Anfragen weiter und speichern die Antworten zwischen.

An Drittanbieter übermittelte Daten

-

Für den Betrieb sendet die Anwendung bestimmte Daten an externe Dienste. Diese Dienste erhalten Ihre IP-Adresse sowie die nachstehend aufgeführten Daten.

+

Für den Betrieb sendet die Anwendung bestimmte Daten an externe Dienste. Jeder Dienst, den Ihr Browser direkt kontaktiert, erhält auch Ihre IP-Adresse. OpenRouteService und Overpass werden über ein MeridianWay-Relais abgefragt und erhalten sie nicht.

- - - - - - - + + + + + + + + + +
DienstÜbermittelte DatenZweck
Photon (komoot GmbH, DE)In den Adressfeldern eingegebener TextAutocomplete-Vorschläge
Nominatim (OSM Foundation, UK)Eingegebene Adresse; GPS-Koordinaten bei aktivierter StandortbestimmungGeo- und Reverse-Geocoding
OpenRouteService (HeiGIT, DE)Start- und ZielkoordinatenRoutenberechnung
Overpass API (OSM-Server)Geografischer Bereich der RouteGebäude- und Baumdaten
CartoCDN (Carto Inc., USA)Angezeigter KartenausschnittKartenkacheln
UmamiBesuchte Seite, Gerätetyp, Browsersprache — ohne Cookies, anonymisierte IPAggregierte Nutzungsstatistiken
Sentry (EU-Server, Deutschland)Technische Fehler, Seiten-URL, Browsertyp — ohne IdentitätsdatenFehlererkennung und -behebung
Fly.io
Hosting
Aufgerufene SeitenBereitstellung der Website
Stadia MapsAngezeigter KartenausschnittHintergrundkarte
Photon
komoot GmbH, DE
In den Adressfeldern eingegebener Text; im anderen Feld bereits gewählter OrtAutocomplete-Vorschläge
Nominatim
OSM Foundation, UK
Eingegebene Adresse; GPS-Koordinaten, wenn Sie die Standortbestimmung nutzenGeo- und Reverse-Geocoding
Open-MeteoMittelpunkt der RouteWetter: Bewölkung und Temperatur
MeridianWay-Relais
Cloudflare Workers
Start- und Zielkoordinaten; Bereich der RouteWeiterleitung an OpenRouteService und Overpass, Schweizer Gebäudehöhen; Antworten werden 7 bis 30 Tage zwischengespeichert, ohne Bezug zur anfragenden Person
OpenRouteService
HeiGIT, DE, über das Relais
Start- und ZielkoordinatenRoutenberechnung
Overpass API
OSM-Server, über das Relais
Geografischer Bereich der RouteGebäude- und Baumdaten
UmamiSeitenadresse, verweisende Website, ungefährer Standort (Land, Region) aus der IP-Adresse, die nicht gespeichert wird; Browser, System, Bildschirmgrösse, Sprache; Aktionen in der App (Suche gestartet, Teilen …). Ohne CookiesAggregierte Nutzungsstatistiken, abschaltbar (siehe unten)
Sentry
EU-Server, Deutschland
Technische Fehler, Seitenadresse, Browsertyp; ohne IdentitätsdatenFehlererkennung und -behebung
-

Die Standortbestimmung ist optional und wird nur aktiviert, wenn Sie auf die Standortschaltfläche klicken.

+

Nach einer Suche enthält die Seitenadresse Start- und Zielpunkt sowie den dafür eingegebenen Text: So lässt sich eine Route teilen. Umami und Sentry erhalten diese Angaben daher mit der Seitenadresse.

+ +

Die Standortbestimmung ist optional: Die App erhält nur mit Ihrer Erlaubnis Zugriff darauf, die Ihr Browser abfragt. Sie wird genutzt, wenn Sie auf eine Standortschaltfläche tippen, und in der auf dem Startbildschirm installierten App, um beim Öffnen Ihren Standort als Start vorzuschlagen. Haben Sie die Erlaubnis bereits erteilt, zentriert die App damit auch die Karte beim Start.

Cookies und lokaler Speicher

-

MeridianWay verwendet keine Cookies. Es werden keine Daten im lokalen Speicher Ihres Browsers gespeichert.

+

MeridianWay verwendet keine Cookies. Die App speichert jedoch bis zu drei Angaben im lokalen Speicher Ihres Browsers:

+
    +
  • Ihren letzten Standort, falls Sie die Standortbestimmung genutzt haben: In der installierten App dient er als Ersatzstart, wenn die Ortung fehlschlägt.
  • +
  • Dass Sie das Installationsbanner geschlossen haben, damit es nicht mehr erscheint.
  • +
  • Dass Sie die Besuchsstatistik ausgeschaltet haben, falls zutreffend (siehe unten).
  • +
+

Diese Angaben bleiben auf Ihrem Gerät. Der Standort verlässt es nur, wenn er als Startpunkt übernommen wird, und nimmt dann denselben Weg wie jeder Startpunkt. Um alles zu löschen, entfernen Sie die Websitedaten in den Einstellungen Ihres Browsers.

+ +

Besuchsstatistik

+

MeridianWay misst seine Besuche mit Umami, ohne Cookies und ohne eine Kennung auf Ihrem Gerät zu speichern. Möchten Sie nicht gezählt werden, schalten Sie den Schalter unten aus oder den im Bereich «Über die App»: Von diesem Browser wird dann nichts mehr an Umami gesendet, ohne Neuladen. Die Einstellung gilt für diesen Browser auf diesem Gerät. Auf dem iPhone hat die auf dem Startbildschirm installierte App einen eigenen Speicher und wird separat eingestellt. Fehlerberichte an Sentry werden dadurch nicht abgeschaltet.

+

Ihre Rechte

Gemäss dem Schweizer Bundesgesetz über den Datenschutz (DSG) und der DSGVO für Nutzer der Europäischen Union können Sie jederzeit anfragen, welche Daten über Sie verarbeitet wurden. Die an Drittanbieter übermittelten Daten unterliegen deren eigenen Datenschutzrichtlinien.

@@ -89,33 +120,48 @@ const { lang } = Astro.props; {lang === 'it' && (

Informativa sulla privacy

-

Ultimo aggiornamento: giugno 2026

+

Ultimo aggiornamento: settembre 2026

Cosa fa (e non fa) MeridianWay

-

MeridianWay è un'applicazione completamente statica: non dispone di un proprio server, non crea account utente e non memorizza dati personali in alcun database. Tutti i calcoli (posizione del sole, punteggio ombra) vengono eseguiti direttamente nel tuo browser.

+

MeridianWay non crea account utente, non chiede informazioni personali e non tiene alcun archivio dei suoi utenti. Tutti i calcoli (posizione del sole, punteggio ombra) vengono eseguiti direttamente nel tuo browser. Il sito è ospitato da Fly.io, e tre relay (Cloudflare Workers) gestiti da MeridianWay inoltrano parte delle richieste e ne conservano le risposte in cache.

Dati trasmessi a servizi di terze parti

-

Per funzionare, l'applicazione invia alcuni dati a servizi esterni. Questi servizi ricevono il tuo indirizzo IP e i dati elencati di seguito.

+

Per funzionare, l'applicazione invia alcuni dati a servizi esterni. Ogni servizio che il tuo browser contatta direttamente riceve anche il tuo indirizzo IP. OpenRouteService e Overpass vengono interrogati da un relay di MeridianWay e non lo ricevono.

- - - - - - - + + + + + + + + + +
ServizioDati trasmessiFinalità
Photon (komoot GmbH, DE)Testo inserito nei campi indirizzoSuggerimenti di completamento automatico
Nominatim (OSM Foundation, UK)Indirizzo inserito; coordinate GPS se la geolocalizzazione è attivataGeocodifica e geocodifica inversa
OpenRouteService (HeiGIT, DE)Coordinate di partenza e arrivoCalcolo degli itinerari
Overpass API (server OSM)Area geografica dell'itinerarioDati edifici e alberi
CartoCDN (Carto Inc., USA)Area della mappa visualizzataTile cartografiche
UmamiPagina visitata, tipo di dispositivo, lingua del browser — senza cookie, IP anonimizzatoStatistiche d'uso aggregate
Sentry (server EU, Germania)Errori tecnici, URL della pagina, tipo di browser — senza dati di identitàRilevamento e correzione dei bug
Fly.io
hosting
Pagine richiesteMessa a disposizione del sito
Stadia MapsArea della mappa visualizzataMappa di base
Photon
komoot GmbH, DE
Testo inserito nei campi indirizzo; luogo già scelto nell'altro campoSuggerimenti di completamento automatico
Nominatim
OSM Foundation, UK
Indirizzo inserito; coordinate GPS se usi la geolocalizzazioneGeocodifica e geocodifica inversa
Open-MeteoPunto centrale dell'itinerarioMeteo: nuvolosità e temperatura
Relay MeridianWay
Cloudflare Workers
Coordinate di partenza e arrivo; area dell'itinerarioInoltro a OpenRouteService e Overpass, altezze degli edifici svizzeri; risposte conservate in cache da 7 a 30 giorni, senza legame con chi le ha richieste
OpenRouteService
HeiGIT, DE, tramite il relay
Coordinate di partenza e arrivoCalcolo degli itinerari
Overpass API
server OSM, tramite il relay
Area geografica dell'itinerarioDati edifici e alberi
UmamiIndirizzo della pagina, sito di provenienza, posizione approssimativa (paese, regione) ricavata dall'indirizzo IP, che non viene conservato; browser, sistema, dimensioni dello schermo, lingua; azioni nell'app (ricerca avviata, condivisione…). Senza cookieStatistiche d'uso aggregate, disattivabili (vedi sotto)
Sentry
server EU, Germania
Errori tecnici, indirizzo della pagina, tipo di browser; senza dati di identitàRilevamento e correzione dei bug
-

La geolocalizzazione è opzionale e viene attivata solo se fai clic sul pulsante di localizzazione.

+

Dopo una ricerca, l'indirizzo della pagina contiene i punti di partenza e di arrivo e il testo inserito per indicarli: è ciò che rende condivisibile un itinerario. Umami e Sentry ricevono quindi queste informazioni insieme all'indirizzo della pagina.

+ +

La geolocalizzazione è opzionale: l'app vi accede solo con il tuo permesso, richiesto dal browser. Viene usata quando tocchi un pulsante di localizzazione e, nell'app installata sulla schermata Home, per proporre la tua posizione come partenza all'apertura. Se hai già dato il permesso, l'app la usa anche per centrare la mappa all'avvio.

Cookie e archiviazione locale

-

MeridianWay non utilizza alcun cookie. Nessun dato viene salvato nell'archiviazione locale del tuo browser.

+

MeridianWay non utilizza alcun cookie. L'app salva però fino a tre informazioni nell'archiviazione locale del tuo browser:

+
    +
  • La tua ultima posizione, se hai usato la geolocalizzazione: nell'app installata serve da partenza di riserva quando la localizzazione non riesce.
  • +
  • La chiusura del banner di installazione, per non mostrarlo più.
  • +
  • La disattivazione delle statistiche di visita, se l'hai scelta (vedi sotto).
  • +
+

Queste informazioni restano sul tuo dispositivo. La posizione ne esce solo quando viene ripresa come punto di partenza, e segue allora lo stesso percorso di qualsiasi punto di partenza. Per cancellare tutto, elimina i dati del sito nelle impostazioni del browser.

+ +

Statistiche di visita

+

MeridianWay misura le visite con Umami, senza cookie e senza salvare alcun identificativo sul tuo dispositivo. Se preferisci che le tue visite non vengano contate, disattiva l'interruttore qui sotto o quello nel pannello Informazioni dell'app: da questo browser non viene più inviato nulla a Umami, senza ricaricare la pagina. L'impostazione vale per questo browser su questo dispositivo. Su iPhone, l'app installata sulla schermata Home ha una propria memoria e si imposta a parte. Non disattiva le segnalazioni di errore inviate a Sentry.

+

I tuoi diritti

In conformità con la legge federale svizzera sulla protezione dei dati (LPD) e il RGPD per gli utenti dell'Unione europea, puoi richiedere in qualsiasi momento quali dati che ti riguardano sono stati trattati. I dati trasmessi a servizi di terze parti sono disciplinati dalle rispettive informative sulla privacy.

@@ -128,33 +174,48 @@ const { lang } = Astro.props; {lang === 'en' && (

Privacy Policy

-

Last updated: June 2026

+

Last updated: September 2026

What MeridianWay does (and doesn't do)

-

MeridianWay is a fully static application: it has no server of its own, creates no user accounts, and stores no personal data in any database. All calculations (sun position, shadow scoring) run directly in your browser.

+

MeridianWay creates no user accounts, asks for no personal information and keeps no records of its users. All calculations (sun position, shadow scoring) run directly in your browser. The site is hosted by Fly.io, and three relays (Cloudflare Workers) run by MeridianWay forward some of the requests and cache the responses.

Data sent to third-party services

-

To function, the application sends certain data to external services. These services receive your IP address along with the data listed below.

+

To function, the application sends certain data to external services. Every service your browser contacts directly also receives your IP address. OpenRouteService and Overpass are queried by a MeridianWay relay and do not receive it.

- - - - - - - + + + + + + + + + +
ServiceData sentPurpose
Photon (komoot GmbH, DE)Text typed in address fieldsAutocomplete suggestions
Nominatim (OSM Foundation, UK)Address entered; GPS coordinates if geolocation is enabledGeocoding and reverse geocoding
OpenRouteService (HeiGIT, DE)Start and end coordinatesRoute calculation
Overpass API (OSM servers)Geographic area of the routeBuilding and tree data
CartoCDN (Carto Inc., USA)Displayed map areaMap tiles
UmamiPage visited, device type, browser language — no cookies, anonymised IPAggregated usage statistics
Sentry (EU servers, Germany)Technical errors, page URL, browser type — no identity dataBug detection and fixing
Fly.io
hosting
Pages requestedServing the site
Stadia MapsDisplayed map areaBase map
Photon
komoot GmbH, DE
Text typed in address fields; place already chosen in the other fieldAutocomplete suggestions
Nominatim
OSM Foundation, UK
Address entered; GPS coordinates if you use geolocationGeocoding and reverse geocoding
Open-MeteoMidpoint of the routeWeather: cloud cover and temperature
MeridianWay relays
Cloudflare Workers
Start and end coordinates; area of the routeRelay to OpenRouteService and Overpass, Swiss building heights; responses cached for 7 to 30 days, with no link to who requested them
OpenRouteService
HeiGIT, DE, via the relay
Start and end coordinatesRoute calculation
Overpass API
OSM servers, via the relay
Geographic area of the routeBuilding and tree data
UmamiPage address, referring site, approximate location (country, region) derived from the IP address, which is not stored; browser, system, screen size, language; actions in the app (search started, share…). No cookiesAggregated usage statistics, which you can turn off (see below)
Sentry
EU servers, Germany
Technical errors, page address, browser type; no identity dataBug detection and fixing
-

Geolocation is optional and only triggered if you click the location button.

+

After a search, the page address contains the start and end points and the text typed to name them: that is what makes a route shareable. Umami and Sentry therefore receive this information with the page address.

+ +

Geolocation is optional: the app only gets access with your permission, which your browser asks for. It is used when you tap a location button and, in the app installed on your home screen, to suggest your position as the start when it opens. If you have already granted permission, the app also uses it to centre the map at start-up.

Cookies and local storage

-

MeridianWay uses no cookies. No data is saved in your browser's local storage.

+

MeridianWay uses no cookies. The app does save up to three items in your browser's local storage:

+
    +
  • Your last position, if you have used geolocation: in the installed app, it is the fallback start when locating you fails.
  • +
  • That you closed the install banner, so it is not shown again.
  • +
  • That you turned off visit statistics, if you did (see below).
  • +
+

These items stay on your device. The position only leaves it when it is used as a starting point, and then follows the same path as any starting point. To erase them all, clear this site's data in your browser settings.

+ +

Visit statistics

+

MeridianWay measures its audience with Umami, without cookies and without saving any identifier on your device. If you would rather your visits were not counted, turn off the switch below, or the one in the app's About panel: nothing more is sent to Umami from this browser, with no reload needed. The setting applies to this browser on this device. On iPhone, the app installed on your home screen has its own storage and is set separately. It does not turn off the error reports sent to Sentry.

+

Your rights

Under the Swiss Federal Act on Data Protection (FADP) and the GDPR for users in the European Union, you may at any time request details of what data concerning you has been processed. Data transmitted to third-party services is governed by their own privacy policies.

@@ -167,33 +228,48 @@ const { lang } = Astro.props; {lang === 'rm' && (

Disposiziuns davart la protecziun da datas

-

Ultima actualisaziun: zercladur 2026

+

Ultima actualisaziun: settember 2026

Tge che MeridianWay fa (e na fa)

-

MeridianWay è ina app cumplettamain statica: ella n’ha nagin agen server, na fa nagins contos d’utilisader e n’arcunescha naginas datas persunalas en ina banca da datas. Tut las calculaziuns (posiziun dal sulegl, evaluaziun da la sumbriva) vegnan fatgas directamain en Voss navigatur.

+

MeridianWay na fa nagins contos d’utilisader, na dumonda naginas indicaziuns persunalas e na maina nagina cartoteca da ses utilisaders. Tut las calculaziuns (posiziun dal sulegl, evaluaziun da la sumbriva) vegnan fatgas directamain en Voss navigatur. La website vegn ospitada da Fly.io, e trais relais (Cloudflare Workers) manads da MeridianWay transmettan ina part da las dumondas ed arcuneschan las respostas en il cache.

Datas surdadas a servetschs da terzas persunas

-

Per funcziunar tramet l’app tschertas datas a servetschs externs. Quests servetschs survegnan Vossa adressa IP sco er las datas menziunadas qua sutvart.

+

Per funcziunar tramet l’app tschertas datas a servetschs externs. Mintga servetsch che Voss navigatur contactescha directamain survegn er Vossa adressa IP. OpenRouteService ed Overpass vegnan dumandads tras in relais da MeridianWay e na la survegnan betg.

- - - - - - - + + + + + + + + + +
ServetschDatas transmessasFinamira
Photon (komoot GmbH, DE)Text endatà en ils champs d’adressasPropostas da cumplettaziun automatica
Nominatim (OSM Foundation, UK)Adressa endatada; coordinatas GPS sche la geolocaziun è activadaGeocodaziun e geocodaziun inversa
OpenRouteService (HeiGIT, DE)Coordinatas da partenza e d’arrivCalculaziun da la ruta
Overpass API (servers OSM)Zona geografica da la rutaDatas d’edifizis e da plantas
CartoCDN (Carto Inc., USA)Zona da la charta mussadaPlattinas da charta
UmamiPagina visitada, tip da l’apparat, lingua dal navigatur — senza cookies, adressa IP anonimisadaStatisticas d’utilisaziun agregadas
Sentry (servers UE, Germania)Sbagls tecnics, URL da la pagina, tip dal navigatur — senza datas d’identitadChattar e reparar sbagls
Fly.io
hosting
Paginas dumandadasMetter a disposiziun la website
Stadia MapsZona da la charta mussadaCharta da basa
Photon
komoot GmbH, DE
Text endatà en ils champs d’adressas; lieu gia tschernì en l’auter champPropostas da cumplettaziun automatica
Nominatim
OSM Foundation, UK
Adressa endatada; coordinatas GPS sche Vus utilisais la geolocaziunGeocodaziun e geocodaziun inversa
Open-MeteoPunct central da la rutaAura: nivels e temperatura
Relais MeridianWay
Cloudflare Workers
Coordinatas da partenza e d’arriv; zona da la rutaTransmissiun a OpenRouteService ed Overpass, autezzas dals edifizis svizzers; respostas arcunadas 7 fin 30 dis en il cache, senza colliaziun cun la persuna che las ha dumandadas
OpenRouteService
HeiGIT, DE, tras il relais
Coordinatas da partenza e d’arrivCalculaziun da la ruta
Overpass API
servers OSM, tras il relais
Zona geografica da la rutaDatas d’edifizis e da plantas
UmamiAdressa da la pagina, website da derivanza, lieu approximativ (pajais, regiun) deducì da l’adressa IP, che na vegn betg arcunada; navigatur, sistem, grondezza dal visur, lingua; acziuns en l’app (tschertga cumenzada, parter…). Senza cookiesStatisticas d’utilisaziun agregadas, che Vus pudais deactivar (guardai sutvart)
Sentry
servers UE, Germania
Sbagls tecnics, adressa da la pagina, tip dal navigatur; senza datas d’identitadChattar e reparar sbagls
-

La geolocaziun è opziunala e vegn mo activada sche Vus cliccais sin il buttun da localisaziun.

+

Suenter ina tschertga cuntegna l’adressa da la pagina il punct da partenza e quel d’arriv sco er il text endatà per als numnar: uschia sa lascha ina ruta parter. Umami e Sentry survegnan perquai questas indicaziuns cun l’adressa da la pagina.

+ +

La geolocaziun è opziunala: l’app ha mo access cun Voss permiss, che Voss navigatur dumonda. Ella vegn utilisada cura che Vus tutgais in buttun da localisaziun e, en l’app installada sin il visur da partenza, per proponer Vossa posiziun sco partenza cura che l’app vegn averta. Sche Vus avais gia dà il permiss, centrescha l’app cun quai er la charta tar la partenza.

Cookies e memorisaziun locala

-

MeridianWay n’utilisescha nagins cookies. Naginas datas na vegnan arcunadas en la memorisaziun locala da Voss navigatur.

+

MeridianWay n’utilisescha nagins cookies. L’app arcunescha dentant fin trais indicaziuns en la memorisaziun locala da Voss navigatur:

+
    +
  • Vossa ultima posiziun, sche Vus avais utilisà la geolocaziun: en l’app installada serva ella sco partenza da reserva, sche la localisaziun na reussescha betg.
  • +
  • Che Vus avais serrà il bandier d’installaziun, per ch’el na cumparia betg pli.
  • +
  • Che Vus avais deactivà las statisticas da visitas, sche quai è il cas (guardai sutvart).
  • +
+

Questas indicaziuns restan sin Voss apparat. La posiziun al banduna mo sch’ella vegn utilisada sco punct da partenza, e fa lura il medem viadi sco mintga punct da partenza. Per stizzar tut, stizzai las datas da questa website en ils parameters da Voss navigatur.

+ +

Statisticas da visitas

+

MeridianWay mesira sias visitas cun Umami, senza cookies e senza arcunar in identificatur sin Voss apparat. Sche Vus na vulais betg che Vossas visitas vegnian dumbradas, deactivai il cumutatur qua sutvart u quel en il panel «Pertutgant» da l’app: da quest navigatur na vegn lura nagut pli tramess ad Umami, senza chargiar danovamain. Il parameter vala per quest navigatur sin quest apparat. Sin l’iPhone ha l’app installada sin il visur da partenza sia atgna memoria e sto vegnir parametrada separadamain. El na deactivescha betg ils rapports da sbagls tramess a Sentry.

+

Voss dretgs

Tenor la Lescha federala davart la protecziun da datas (nLPD) e tenor il DSGVO per las utilisadras ed ils utilisaders da l’Uniun europeica pudais Vus dumandar da tut temp tge datas che concernan Vus èn vegnidas elavuradas. Las datas transmessas a servetschs da terzas persunas èn suttamessas a lur atgnas disposiziuns davart la protecziun da datas.

@@ -225,9 +301,24 @@ const { lang } = Astro.props; color: #d8dbc8; margin-bottom: 0.75rem; } + .privacy-pane ul { + margin: 0 0 0.75rem 1.25rem; + padding: 0; + } + .privacy-pane li { + line-height: 1.6; + color: #d8dbc8; + margin-bottom: 0.35rem; + } .privacy-pane a { color: #f0f2a0; } + .privacy-optout { + margin: 1rem 0 1.25rem; + padding: 14px 16px; + border: 1px solid rgba(240,242,160,0.2); + border-radius: 8px; + } table { width: 100%; border-collapse: collapse; @@ -246,6 +337,13 @@ const { lang } = Astro.props; border-bottom: 1px solid rgba(240,242,160,0.07); vertical-align: top; color: #d8dbc8; + /* German compounds otherwise push the table past a phone's width. */ + hyphens: auto; + overflow-wrap: anywhere; + } + td:first-child { overflow-wrap: normal; } + .svc { + color: rgba(216,219,200,0.6); + font-size: 0.75rem; } - td:first-child { white-space: nowrap; } diff --git a/src/components/app/AboutDrawer.astro b/src/components/app/AboutDrawer.astro index a77c5c8..d80d80a 100644 --- a/src/components/app/AboutDrawer.astro +++ b/src/components/app/AboutDrawer.astro @@ -1,6 +1,7 @@ --- import { translations, LANGS, langPath, type Lang } from '../../lib/i18n'; import AboutContent from '../AboutContent.astro'; +import AnalyticsOptOut from '../AnalyticsOptOut.astro'; import githubIcon from '../../icons/github.svg?raw'; interface Props { @@ -31,6 +32,9 @@ const t = translations[lang]; GitHub
+
+ +