diff --git a/sentry.client.config.js b/sentry.client.config.js index 0b7b65c..a8c2925 100644 --- a/sentry.client.config.js +++ b/sentry.client.config.js @@ -1,8 +1,11 @@ import * as Sentry from "@sentry/astro"; +import { scrubEvent, scrubBreadcrumb } from "./src/lib/sentryScrub.js"; Sentry.init({ dsn: "https://bf8afd06f49d13d2e136c99d78e88626@o4511568346021888.ingest.de.sentry.io/4511568347856976", // To disable sending user data, uncomment the line below. For more info visit: // https://docs.sentry.io/platforms/javascript/guides/astro/configuration/options/#dataCollection dataCollection: { userInfo: false }, -}); \ No newline at end of file + beforeSend: scrubEvent, + beforeBreadcrumb: scrubBreadcrumb, +}); 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..517e547 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' && (
Dernière mise à jour : juin 2026
+Dernière mise à jour : septembre 2026
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.
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.
| Service | Données transmises | Finalité |
|---|---|---|
| Photon (komoot GmbH, DE) | Texte saisi dans les champs adresse | Suggestions d'autocomplétion |
| Nominatim (OSM Foundation, UK) | Adresse saisie ; coordonnées GPS si géolocalisation activée | Géocodage et géocodage inverse |
| OpenRouteService (HeiGIT, DE) | Coordonnées de départ et d'arrivée | Calcul des itinéraires |
| Overpass API (serveurs OSM) | Zone géographique de l'itinéraire | Données bâtiments et arbres |
| CartoCDN (Carto Inc., USA) | Zone de la carte affichée | Tuiles cartographiques |
| Umami | Page visitée, type d'appareil, langue du navigateur — sans cookies, IP anonymisée | Statistiques 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ées | Mise à disposition du site |
| Stadia Maps | Zone de la carte affichée | Fond de carte |
| Photon komoot GmbH, DE | Texte saisi dans les champs adresse ; lieu déjà choisi dans l'autre champ | Suggestions d'autocomplétion |
| Nominatim OSM Foundation, UK | Adresse saisie ; coordonnées GPS si vous utilisez la géolocalisation | Géocodage et géocodage inverse |
| Open-Meteo | Point central de l'itinéraire | Météo : nébulosité et température |
| Relais MeridianWay Cloudflare Workers | Coordonnées de départ et d'arrivée ; zone de l'itinéraire | Relais 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ée | Calcul des itinéraires |
| Overpass API serveurs OSM, via le relais | Zone géographique de l'itinéraire | Données bâtiments et arbres |
| Umami | Adresse 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 cookie | Statistiques d'utilisation agrégées, dont les zones où des itinéraires sont recherchés ; désactivables (voir plus bas) |
| Sentry serveurs EU, Allemagne | Erreurs techniques, adresse de la page sans ses paramètres, 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 la reçoit avec des points arrondis à 100 m environ et sans le texte saisi : de quoi voir dans quelles zones des itinéraires sont recherchés, pas de retrouver une adresse précise. Sentry la reçoit sans aucune de ces informations.
+ +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.
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.
+ +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.
+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' && (Zuletzt aktualisiert: Juni 2026
+Zuletzt aktualisiert: September 2026
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.
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 Daten | Zweck |
|---|---|---|
| Photon (komoot GmbH, DE) | In den Adressfeldern eingegebener Text | Autocomplete-Vorschläge |
| Nominatim (OSM Foundation, UK) | Eingegebene Adresse; GPS-Koordinaten bei aktivierter Standortbestimmung | Geo- und Reverse-Geocoding |
| OpenRouteService (HeiGIT, DE) | Start- und Zielkoordinaten | Routenberechnung |
| Overpass API (OSM-Server) | Geografischer Bereich der Route | Gebäude- und Baumdaten |
| CartoCDN (Carto Inc., USA) | Angezeigter Kartenausschnitt | Kartenkacheln |
| Umami | Besuchte Seite, Gerätetyp, Browsersprache — ohne Cookies, anonymisierte IP | Aggregierte Nutzungsstatistiken |
| Sentry (EU-Server, Deutschland) | Technische Fehler, Seiten-URL, Browsertyp — ohne Identitätsdaten | Fehlererkennung und -behebung |
| Fly.io Hosting | Aufgerufene Seiten | Bereitstellung der Website |
| Stadia Maps | Angezeigter Kartenausschnitt | Hintergrundkarte |
| Photon komoot GmbH, DE | In den Adressfeldern eingegebener Text; im anderen Feld bereits gewählter Ort | Autocomplete-Vorschläge |
| Nominatim OSM Foundation, UK | Eingegebene Adresse; GPS-Koordinaten, wenn Sie die Standortbestimmung nutzen | Geo- und Reverse-Geocoding |
| Open-Meteo | Mittelpunkt der Route | Wetter: Bewölkung und Temperatur |
| MeridianWay-Relais Cloudflare Workers | Start- und Zielkoordinaten; Bereich der Route | Weiterleitung 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 Zielkoordinaten | Routenberechnung |
| Overpass API OSM-Server, über das Relais | Geografischer Bereich der Route | Gebäude- und Baumdaten |
| Umami | Seitenadresse, 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 Cookies | Aggregierte Nutzungsstatistiken, auch zu den Gebieten, in denen Routen gesucht werden; abschaltbar (siehe unten) |
| Sentry EU-Server, Deutschland | Technische Fehler, Seitenadresse ohne Parameter, Browsertyp; ohne Identitätsdaten | Fehlererkennung 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 erhält sie mit auf rund 100 m gerundeten Punkten und ohne den eingegebenen Text: genug, um zu sehen, in welchen Gebieten Routen gesucht werden, aber nicht, um eine genaue Adresse zu finden. Sentry erhält sie ohne jede dieser Angaben.
+ +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.
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:
+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.
+ +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.
+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' && (Ultimo aggiornamento: giugno 2026
+Ultimo aggiornamento: settembre 2026
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.
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.
| Servizio | Dati trasmessi | Finalità |
|---|---|---|
| Photon (komoot GmbH, DE) | Testo inserito nei campi indirizzo | Suggerimenti di completamento automatico |
| Nominatim (OSM Foundation, UK) | Indirizzo inserito; coordinate GPS se la geolocalizzazione è attivata | Geocodifica e geocodifica inversa |
| OpenRouteService (HeiGIT, DE) | Coordinate di partenza e arrivo | Calcolo degli itinerari |
| Overpass API (server OSM) | Area geografica dell'itinerario | Dati edifici e alberi |
| CartoCDN (Carto Inc., USA) | Area della mappa visualizzata | Tile cartografiche |
| Umami | Pagina visitata, tipo di dispositivo, lingua del browser — senza cookie, IP anonimizzato | Statistiche 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 richieste | Messa a disposizione del sito |
| Stadia Maps | Area della mappa visualizzata | Mappa di base |
| Photon komoot GmbH, DE | Testo inserito nei campi indirizzo; luogo già scelto nell'altro campo | Suggerimenti di completamento automatico |
| Nominatim OSM Foundation, UK | Indirizzo inserito; coordinate GPS se usi la geolocalizzazione | Geocodifica e geocodifica inversa |
| Open-Meteo | Punto centrale dell'itinerario | Meteo: nuvolosità e temperatura |
| Relay MeridianWay Cloudflare Workers | Coordinate di partenza e arrivo; area dell'itinerario | Inoltro 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 arrivo | Calcolo degli itinerari |
| Overpass API server OSM, tramite il relay | Area geografica dell'itinerario | Dati edifici e alberi |
| Umami | Indirizzo 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 cookie | Statistiche d'uso aggregate, comprese le zone in cui si cercano itinerari; disattivabili (vedi sotto) |
| Sentry server EU, Germania | Errori tecnici, indirizzo della pagina senza parametri, 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 lo riceve con i punti arrotondati a circa 100 m e senza il testo inserito: abbastanza per vedere in quali zone si cercano itinerari, non per risalire a un indirizzo preciso. Sentry lo riceve senza nessuna di queste informazioni.
+ +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.
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:
+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.
+ +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.
+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' && (Last updated: June 2026
+Last updated: September 2026
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.
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.
| Service | Data sent | Purpose |
|---|---|---|
| Photon (komoot GmbH, DE) | Text typed in address fields | Autocomplete suggestions |
| Nominatim (OSM Foundation, UK) | Address entered; GPS coordinates if geolocation is enabled | Geocoding and reverse geocoding |
| OpenRouteService (HeiGIT, DE) | Start and end coordinates | Route calculation |
| Overpass API (OSM servers) | Geographic area of the route | Building and tree data |
| CartoCDN (Carto Inc., USA) | Displayed map area | Map tiles |
| Umami | Page visited, device type, browser language — no cookies, anonymised IP | Aggregated usage statistics |
| Sentry (EU servers, Germany) | Technical errors, page URL, browser type — no identity data | Bug detection and fixing |
| Fly.io hosting | Pages requested | Serving the site |
| Stadia Maps | Displayed map area | Base map |
| Photon komoot GmbH, DE | Text typed in address fields; place already chosen in the other field | Autocomplete suggestions |
| Nominatim OSM Foundation, UK | Address entered; GPS coordinates if you use geolocation | Geocoding and reverse geocoding |
| Open-Meteo | Midpoint of the route | Weather: cloud cover and temperature |
| MeridianWay relays Cloudflare Workers | Start and end coordinates; area of the route | Relay 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 coordinates | Route calculation |
| Overpass API OSM servers, via the relay | Geographic area of the route | Building and tree data |
| Umami | Page 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 cookies | Aggregated usage statistics, including the areas where routes are searched; you can turn them off (see below) |
| Sentry EU servers, Germany | Technical errors, page address without its parameters, browser type; no identity data | Bug 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 receives it with the points rounded to about 100 m and without the typed text: enough to see the areas where routes are searched, not to find a precise address. Sentry receives it without any of this information.
+ +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.
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:
+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.
+ +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.
+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' && (Ultima actualisaziun: zercladur 2026
+Ultima actualisaziun: settember 2026
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.
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.
| Servetsch | Datas transmessas | Finamira |
|---|---|---|
| Photon (komoot GmbH, DE) | Text endatà en ils champs d’adressas | Propostas da cumplettaziun automatica |
| Nominatim (OSM Foundation, UK) | Adressa endatada; coordinatas GPS sche la geolocaziun è activada | Geocodaziun e geocodaziun inversa |
| OpenRouteService (HeiGIT, DE) | Coordinatas da partenza e d’arriv | Calculaziun da la ruta |
| Overpass API (servers OSM) | Zona geografica da la ruta | Datas d’edifizis e da plantas |
| CartoCDN (Carto Inc., USA) | Zona da la charta mussada | Plattinas da charta |
| Umami | Pagina visitada, tip da l’apparat, lingua dal navigatur — senza cookies, adressa IP anonimisada | Statisticas d’utilisaziun agregadas |
| Sentry (servers UE, Germania) | Sbagls tecnics, URL da la pagina, tip dal navigatur — senza datas d’identitad | Chattar e reparar sbagls |
| Fly.io hosting | Paginas dumandadas | Metter a disposiziun la website |
| Stadia Maps | Zona da la charta mussada | Charta da basa |
| Photon komoot GmbH, DE | Text endatà en ils champs d’adressas; lieu gia tschernì en l’auter champ | Propostas da cumplettaziun automatica |
| Nominatim OSM Foundation, UK | Adressa endatada; coordinatas GPS sche Vus utilisais la geolocaziun | Geocodaziun e geocodaziun inversa |
| Open-Meteo | Punct central da la ruta | Aura: nivels e temperatura |
| Relais MeridianWay Cloudflare Workers | Coordinatas da partenza e d’arriv; zona da la ruta | Transmissiun 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’arriv | Calculaziun da la ruta |
| Overpass API servers OSM, tras il relais | Zona geografica da la ruta | Datas d’edifizis e da plantas |
| Umami | Adressa 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 cookies | Statisticas d’utilisaziun agregadas, er davart las zonas nua che rutas vegnan tschertgadas; Vus las pudais deactivar (guardai sutvart) |
| Sentry servers UE, Germania | Sbagls tecnics, adressa da la pagina senza parameters, tip dal navigatur; senza datas d’identitad | Chattar 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 la survegn cun ils puncts arrundads a var 100 m e senza il text endatà: avunda per vesair en tge zonas che rutas vegnan tschertgadas, ma betg per chattar ina adressa precisa. Sentry la survegn senza naginas da questas indicaziuns.
+ +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.
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:
+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.
+ +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.
+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