Politique de confidentialité

Description des traitements de données personnelles liés à l’application ThruMiles, d’après l’implémentation technique actuelle.

Dernière mise à jour du brouillon : 8 novembre 2026 · Statut : non finalisé juridiquement

Brouillon. Texte aligné sur le code du dépôt ThruMiles (app Flutter, Supabase, service share-api). Les mentions [À COMPLÉTER] et [À VALIDER] doivent être tranchées avant publication store. Aucune affirmation d’analytique produit n’est faite faute de dépendance firebase_analytics dans le pubspec.yaml actuel.

1. Éditeur et contact

  • Éditeur / responsable du traitement : [À COMPLÉTER : raison sociale, forme juridique, RCS si applicable]
  • Adresse postale : [À COMPLÉTER]
  • Contact données personnelles : [À COMPLÉTER : e-mail] (voir aussi Contact)
  • Délégué à la protection des données (si désigné) : [À COMPLÉTER ou « non désigné »]

2. Périmètre

ThruMiles est une application mobile de préparation et de suivi de treks (traces GPX, progression, partage live éventuel avec des proches via share.thrumiles.fr). Cette politique couvre l’app et le backend de partage ; elle ne couvre pas les traitements autonomes d’Apple, Google, MapTiler ou Firebase au-delà de ce que ThruMiles leur transmet pour fournir le service.

3. Catégories de données (constatées dans le code)

3.1 Identité et authentification (Supabase, Google, Apple)

  • Données : identifiant utilisateur Supabase Auth (userId) ; fournisseurs OAuth liés (Google et/ou Apple) ; e-mail éventuel renvoyé par le fournisseur OAuth et exposé côté app comme métadonnée de session (OwnerAccount.email, affichage à minimiser). ThruMiles ne propose pas un formulaire d’e-mail distinct pour le profil de partage.
  • Finalité : connexion au compte propriétaire, monétisation (vérification d’achats), synchro projet côté serveur lorsqu’elle est invoquée (sync_my_project).
  • Destinataires : Supabase Auth ; Apple / Google en tant que fournisseurs d’identité.
  • Conservation : jusqu’à suppression du compte propriétaire. La suppression complète est accessible dans l’application (Apple ou Google) : après réussite des étapes distantes, ThruMiles efface les données de partage associées, puis le compte Supabase Auth. Pour les comptes Apple, le parcours inclut également une demande de révocation du jeton Sign in with Apple auprès d’Apple. L’annulation de l’autorisation Apple ou un échec des étapes distantes interrompt le nettoyage local destructif. Cela n’implique pas l’effacement immédiat de toutes les copies de sauvegarde ni de toutes les données encore présentes sur l’appareil (voir §3.7, §3.8 et §8). Détails pratiques : Suppression.

3.2 Nom, avatar et éléments de profil public (pas l’e-mail de profil)

  • Données : prénom / nom (ou nom d’affichage dérivé), bio, lien social, avatar JPEG, préférences de visibilité du profil, indicateur de notifications journal ; sur une session de partage : hiker_display_name et copies publiques éventuelles (avatar, bio, etc.).
  • Finalité : présentation du randonneur aux personnes qui suivent un trek via lien de partage ; gestion du profil public durable distinct du compte Auth.
  • Destinataires : service share-api (hébergement AWS EC2, région eu-west-3) ; lecteurs du lien /follow/… et listes de followers selon les réglages de visibilité.
  • Conservation : jusqu’à suppression du profil public (voir page Suppression) ; après suppression, les sessions de partage détenues sont anonymisées (PII retirée) mais le lien / la géométrie / le journal lié ne sont pas effacés par cette seule action.

3.3 Localisation GPS et partage live

  • Données : positions GPS utilisées pour le suivi terrain sur l’appareil ; dernière position publiée vers share-api uniquement lorsqu’une session de partage est active (publication par l’app).
  • Finalité : suivi de progression local ; affichage live pour les proches détenteurs du lien.
  • Destinataires : appareil de l’utilisateur ; share-api et lecteurs du lien si partage actif. Pas de publication GPS vers Supabase Auth dans le flux de partage décrit ici.
  • Conservation : locale : tant que l’utilisateur conserve le projet / l’app. Côté partage, deux durées distinctes s’appliquent : (1) durée de vie de la session de partage (TTL) : 7 jours en production ; (2) conservation de la dernière position après fin ou abandon du suivi : 24 heures. En cas de révocation du partage ou d’expiration de la session, la position n’est plus accessible aux détenteurs du lien de suivi selon le fonctionnement actuel de l’API.

3.4 Journaux, textes, photos et médias

  • Données : texte d’entrée de journal ; médias images (image/jpeg, image/png, image/webp) stockés avec la base de partage sur le volume disque de l’instance AWS EC2 (région eu-west-3). Ces médias ne sont pas stockés dans le bucket S3 utilisé pour les sauvegardes SQLite.
  • Finalité : souvenir partagé avec les followers d’un trek / lecteurs du lien.
  • Destinataires : share-api ; personnes autorisées à lire le journal via le jeton de vue.
  • Conservation : purge à la révocation ou à l’expiration TTL de la session ; purge d’inactivité prévue après 30 jours sans activité, avec activation programmée au 9 novembre 2026 (jusqu’à cette date, cette purge d’inactivité n’est pas présentée comme déjà active). La suppression du seul profil public ne purge pas automatiquement journaux et médias.

3.5 Profils publics, abonnés (followers) et likes

  • Données : profil public (ci-dessus) ; relations share_followers (qui suit quelle session) ; likes sur entrées de journal associés à un profil public.
  • Finalité : liste des personnes suivant un trek, interactions journal, notifications éventuelles.
  • Destinataires : share-api ; propriétaire du trek (liste followers) ; lecteurs publics selon filtres de visibilité (trek_followers / privé).
  • Conservation : likes et jetons push liés au profil sont en cascade SQL à la suppression du profil ; les lignes follower du profil sont retirées à la suppression. Les profils des autres utilisateurs ne sont pas effacés lorsqu’une session est révoquée (les followers passent inactifs).

3.6 Notifications FCM

  • Données : jeton FCM, plateforme (ios / android), lié à un profil public ; file d’envoi journal (outbox) côté serveur.
  • Finalité : notifications push liées au journal (lorsque activées côté profil / ops).
  • Destinataires : Firebase Cloud Messaging ; share-api.
  • Conservation : jetons jusqu’à retrait API (DELETE …/push-tokens) ou suppression du profil (cascade). L’app dépend de firebase_core et firebase_messaging uniquement — pas de firebase_analytics dans le pubspec.yaml actuel.

3.7 Achats intégrés Apple / Google et vérification

  • Données : preuves d’achat (ex. jeton Google, JWS Apple / identifiants transaction) ; product id ; états d’entitlement ; pas de données de carte bancaire chez ThruMiles.
  • Finalité : vérifier l’achat auprès des API stores via Edge Function Supabase verify-purchase, octroyer / révoquer des droits d’accès, usage hors ligne via cache local borné.
  • Destinataires : Apple / Google ; Supabase (fonctions / tables entitlements) ; appareil (cache).
  • Conservation : après suppression du compte, des empreintes techniques d’achat (identifiants de transaction boutique, sans jeton Google Play brut) peuvent être conservées dans une table dédiée à la prévention de la fraude (deleted_account_purchase_retention). Aucun mécanisme technique de purge ni aucune durée maximale n’ont été identifiés dans la configuration actuelle — [À COMPLÉTER : durée de conservation antifraude à définir]. ThruMiles ne prétend pas supprimer automatiquement ces empreintes. Les historiques store chez Apple/Google échappent au contrôle de ThruMiles.

3.8 Données locales Drift / SQLite

  • Données : projets, traces analysées, progression, préférences, secrets de partage en attente, identité locale de profil public (secret appareil), profil (prénom, nom, bio, lien, avatar), cache des personnes suivies, etc.
  • Finalité : fonctionnement hors ligne et source de vérité terrain.
  • Destinataires : uniquement l’appareil (sauf actions explicites de partage / synchro / achat).
  • Conservation : la suppression de compte efface les projets locaux et certains secrets / identifiants liés au parcours actuel, mais ne supprime pas nécessairement toutes les données encore présentes sur l’appareil. Peuvent notamment subsister : prénom et nom, biographie et lien de profil, avatar local, cache des personnes suivies, ainsi que certaines préférences et données techniques. Pour retirer ces résidus, l’utilisateur peut effacer les données de l’application ou la désinstaller. La suppression d’un projet seul n’efface que les données de ce projet.

3.9 Cartographie (MapLibre + MapTiler) et Firebase

  • Données : requêtes de styles / tuiles vers MapTiler (clé API côté client, style Outdoor) ; pas de SDK Analytics Firebase dans les dépendances actuelles.
  • Finalité : affichage des cartes dans l’app (MapLibre GL).
  • Destinataires : MapTiler (tuiles / style) ; Firebase uniquement pour la messagerie push lorsqu’utilisée.
  • Conservation : selon politiques MapTiler / Firebase — [À VALIDER / renvoyer vers leurs politiques].

4. Finalités synthétiques

  • Fournir les fonctions de trek (planification, suivi, statistiques locales).
  • Permettre le partage live et le journal avec des proches via lien.
  • Gérer les achats et droits d’accès.
  • Sécuriser le service (auth, révocation, limitation de débit API).

Bases légales : [À COMPLÉTER : contrat, intérêt légitime, consentement — par finalité].

5. Destinataires et sous-traitants

  • Hébergement share-api : AWS EC2, région eu-west-3 (derrière share.thrumiles.fr) — base SQLite et médias sur le volume disque de l’instance.
  • Amazon S3 : sauvegardes SQLite uniquement (les médias de journal ne sont pas inclus dans ces copies).
  • Supabase, région eu-west-1 : authentification et données liées aux achats (Edge Functions / tables monétisation).
  • Apple et Google (identité et/ou paiements).
  • Firebase Cloud Messaging (notifications).
  • MapTiler (fonds de carte).
  • Proches détenteurs d’un lien de suivi volontairement partagé.

Sauvegardes observées : copies SQLite locales sur l’instance avec conservation observée sur 7 jours ; copies SQLite sur S3 avec expiration configurée à 30 jours ; médias exclus de ces sauvegardes. Sur l’offre Supabase Free utilisée actuellement : pas de sauvegarde planifiée incluse et PITR non activé — cela ne constitue pas une garantie d’absence de toute copie technique interne chez le prestataire.

Liste contractualisée (DPA) : [À COMPLÉTER].

6. Transferts hors UE

Apple, Google, Firebase, MapTiler, Supabase et/ou AWS peuvent impliquer des transferts internationaux. Encadrement : [À COMPLÉTER].

7. Droits des personnes

Droits d’accès, rectification, effacement, limitation, opposition, portabilité, et réclamation auprès de l’autorité compétente (ex. CNIL).

Modalités : [À COMPLÉTER : e-mail] · actions déjà possibles : Suppression de compte.

8. Sécurité

  • HTTPS sur le domaine de partage.
  • Secrets de session de partage stockés sous forme d’empreintes (hash) côté API (conception documentée).
  • Secrets et comptes de service hors dépôt Git.
  • Journaux techniques du reverse proxy (Nginx) : rotation quotidienne, conservation d’environ 14 jours.

Les copies de sauvegarde (notamment SQLite) peuvent subsister après la suppression des données dans les bases actives, jusqu’à l’expiration de leur durée de conservation (voir §5). ThruMiles ne promet pas un effacement immédiat de toutes les sauvegardes.

Mesures organisationnelles : [À COMPLÉTER].

9. Mineurs

[À COMPLÉTER : âge minimum / public visé].

10. Modifications

Cette page pourra être mise à jour (date en tête). Notification utilisateurs : [À VALIDER].