Privacy
Goatching is a running & trail coaching app for a small circle of friends. This page explains what data it processes, why, who it is shared with, and how you stay in control of it.
In short. Your data is only used to coach you. It is never sold, nor used for advertising. You can export or delete all of your data at any time, from the app.
Controller
Goatching is a personal project run by Gauthier Perrod. For any question about your data or to exercise your rights: goatching.contact@gmail.com.
Data we process
| Category | Examples |
|---|---|
| Account | Email, display name, password (stored hashed, never in clear text) |
| Sport profile (health data) | Resting/max heart rate, FTP, threshold pace, threshold climbing speed (VAM), date of birth, goals, past injuries, personal records, sports practised |
| Activities | Workouts (GPS track, heart rate, power, distance, elevation, duration), perceived effort, gear — imported from Strava or entered manually |
| Social | Friends, messages with your coach and friends, comments, reactions, profile photo |
| Location | GPS tracks of your activities; privacy zones you define to hide sensitive places (home…) |
| Technical | Notification token and installation identifier, app version, IP address (server logs, map tile loading) |
| Audit log | A record of each sensitive action: what was done, when, by whom, on whose data, from which IP address and with which browser or app — see below |
Why, and on what basis
- Providing the service (account, plan, activities, messages, fitness curve): performance of the service you request.
- Health data (heart rates, injuries, records): based on your consent, requested at sign-up. Used to calibrate your training and reduce injury risk.
- Notifications (session reminders, messages): to alert you; can be turned off from your phone.
Your coach can see your training data — that is the whole point of coaching. Your friends only see what the social feed exposes (activities, leaderboard), with your GPS tracks clipped around your privacy zones.
Sharing with third parties
Goatching relies on a few external services, strictly to function. No data is sold.
| Service | Why | Data shared |
|---|---|---|
| Strava | Import your activities automatically | Strava access token, activities (GPS, HR, power, distance, elevation) |
| intervals.icu | Push your planned sessions to your watch | Athlete ID, access key, your plan's sessions |
| Google (Gemini) | Draft your plan, reschedule a day, comment on a workout, answer you in the AI chat, predict a race time | A bounded extract of your training data — see below |
| Google (Firebase Cloud Messaging) | Push notifications | Device notification token and the installation identifier Firebase attaches to it |
| Sentry | Error tracking on the server, so a bug gets fixed | Stack traces and server logs, with identifiers pseudonymised — see below |
| CARTO | Map tiles | Your IP address (when tiles load) |
| OpenStreetMap (Nominatim) | Address search to place a privacy zone | The searched text, your IP address |
| Open-Meteo | Typical weather on the day of your target race | The coarse coordinates of the race and the dates asked for — no account data |
| Email delivery (SMTP) | Address verification, password reset | Your email address |
| GitHub | “Report a problem” from the app | The message sent, your display name and your email address |
Gemini (AI): what leaves, and what does not
Goatching uses Google's Gemini model to draft training plans and to write the short texts the app shows you. What is sent is a whitelist, fixed in the code and locked by a test — not your profile as a whole.
| Sent | Never sent |
|---|---|
| Physiological numbers (resting/max heart rate, FTP, threshold pace, threshold climbing speed, weight, height, date of birth), your level and sports, your weekly volume and availability, your target events and records, your recent training load, the sessions in the plan being worked on, and — in the AI chat — the messages of that conversation | Your email address, your name, your account identifier, your GPS
tracks, and the free-text fields of your profile: your
notes, your goal in your own words, your sport history, and the
description of an injury — only the year of an
injury is sent, never what it was.
To be precise: text you write FOR the AI does go to it — the messages of an AI conversation, and the “additional context” you may add when asking for a plan. That is the point of those fields. What stays out is the free text of your profile. |
Sentry (errors): server only, pseudonymised
When the server hits a bug, the error is sent to Sentry so it can be fixed. Three things bound it:
- Server only. The app on your phone contains no Sentry SDK; nothing is sent from your device.
- Pseudonymised identifiers. Every identifier is replaced by a short keyed fingerprint before sending. We can recognise that the same athlete hit the same bug five times; Sentry never sees an identifier in the clear and cannot reverse it.
- No payloads, no variables. Request bodies, headers, cookies, query strings and the local variables of each stack frame are switched off — which is what would otherwise carry a profile or a health record.
Audit log
Sensitive actions are written to a log kept in the database — this is not the same thing as the rotating server logs above. Each entry records the action, when it happened, who did it, whose data it concerned, the IP address it came from and the browser or app used. What is covered: signing in (success and failure), signing out, password reset, creating or revoking a personal token, linking and unlinking a coach, profile changes, plan drafts and publications, deleting an activity, exporting your data, deleting an account.
Why: security and proof — so that “who changed my plan?”, “since when did this coach have access to my data?” and “I asked for deletion in March” actually have an answer. The legal basis is our legitimate interest in keeping the service secure and accountable.
What you can do with it: you can read your own
entries, and only yours — a coach cannot read an athlete's log. The IP address
and the browser are shown only for the actions you took, never
for your coach's. Just ask us by email and we'll send it to you — and if
you're comfortable with the API, it also serves it at
/v1/me/audit.
Retention: 12 months. These questions play out on the scale of a training season — a plan runs 12 to 20 weeks, and building up for an ultra takes a year. When you delete your account, the IP address and the browser are erased from your entries; the single entry recording the deletion request is kept for 3 years, as proof that it was honoured.
Hosting & retention
Your data is stored on a private server (Oracle Cloud, Paris region — EU) and backed up in encrypted form. It is kept as long as your account exists. When you delete your account, it is erased; the rotating encrypted backups taken beforehand age out with the backup cycle, which purges anything older than 30 days.
Transfers outside the EU. The server, the backups and the error tracking all stay in the EU (Paris, and Germany for Sentry). Two services are Google's and involve a transfer to the United States: Gemini (the AI coach) and Firebase (Android notifications). Those transfers rely on the EU–US Data Privacy Framework. Everything else — map tiles, address search, race-day weather — stays in the EU.
Your rights
- Access and portability: export all your data from your account, in a readable format.
- Erasure: Account → Session → Delete my account removes your profile, activities, plans and photos. The full detail — and how to ask for it without installing the app — is on the account deletion page.
- Rectification: edit your profile at any time in the app.
- Withdraw consent: your health data is processed on the basis of your explicit consent, and you can withdraw it at any time. Be aware of what that means in practice: without those figures Goatching cannot build or adjust a plan, so withdrawing amounts to deleting your account. You can also simply blank the health fields in your profile — the app then keeps working for the social side, but the coaching stops being able to do its job.
You can also email us at goatching.contact@gmail.com.
Security
Traffic runs over HTTPS, passwords are hashed, backups are encrypted, and your sensitive places can be hidden by privacy zones that clip your GPS tracks for others. To be exact, three layers: traffic and backups are encrypted, and the server's storage volume is encrypted at rest by the host (Oracle-managed keys) — which covers a stolen or decommissioned disk. What is not encrypted is the database file itself: someone with access to the running machine could read it. That is a deliberate choice, not an oversight — the key would have to live on the same disk, so it would not protect against the very scenario that matters. Access to the machine is restricted by SSH key, the API port is not published, and the container does not run as root.
Minors
Goatching is not intended for people under 15 — that is the age at which, in France, someone can consent on their own to this kind of processing.
Being straight with you: we do not verify age. There is no check at sign-up, and the birth date in your profile is optional and used for training zones, not for gating access. This is a declarative limit, and an app made for a handful of friends. If you believe a minor under 15 has an account, write to us and we will delete it.
Changes
This policy may change. The date below shows the last update; any significant change will be flagged in the app.
Last updated: 7 August 2026.
Confidentialité
Goatching est une app de coaching course & trail entre amis. Cette page explique quelles données elle traite, pourquoi, avec qui elles sont partagées, et comment tu gardes la main dessus.
L'essentiel. Tes données servent uniquement à te coacher. Elles ne sont ni vendues, ni utilisées pour de la publicité. Tu peux exporter ou supprimer l'intégralité de tes données à tout moment, depuis l'app.
Responsable
Goatching est un projet personnel géré par Gauthier Perrod. Pour toute question sur tes données ou pour exercer tes droits : goatching.contact@gmail.com.
Données traitées
| Catégorie | Exemples |
|---|---|
| Compte | E-mail, pseudo, mot de passe (stocké haché, jamais en clair) |
| Profil sportif (données de santé) | Fréquence cardiaque repos/max, FTP, allure seuil, VAM au seuil, date de naissance, objectifs, blessures passées, records, sports pratiqués |
| Activités | Sorties (trace GPS, fréquence cardiaque, puissance, distance, dénivelé, durée), ressenti, matériel — importées de Strava ou saisies |
| Social | Amis, messages avec ton coach et tes amis, commentaires, réactions, photo de profil |
| Localisation | Traces GPS de tes activités ; zones de confidentialité que tu définis pour masquer tes lieux sensibles (domicile…) |
| Technique | Jeton de notification et identifiant d'installation, version de l'app, adresse IP (journaux serveur, chargement des fonds de carte) |
| Journal d'audit | La trace de chaque acte sensible : ce qui a été fait, quand, par qui, sur les données de qui, depuis quelle adresse IP et avec quel navigateur ou quelle app — voir plus bas |
Pourquoi, et sur quelle base
- Fournir le service (compte, plan, activités, messages, courbe de forme) : exécution du service que tu demandes.
- Données de santé (fréquences, blessures, records) : sur ton consentement, demandé à l'inscription. Elles servent à calibrer ton entraînement et à limiter le risque de blessure.
- Notifications (rappels de séance, messages) : pour te prévenir ; désactivables depuis ton téléphone.
Ton coach a accès aux données de ton suivi : c'est le principe même du coaching. Tes amis ne voient que ce que le fil social expose (activités, classement), avec tes traces GPS tronquées autour de tes zones de confidentialité.
Partage avec des tiers
Goatching s'appuie sur quelques services externes, strictement pour fonctionner. Aucune donnée n'est vendue.
| Service | Pourquoi | Données transmises |
|---|---|---|
| Strava | Importer tes activités automatiquement | Jeton d'accès Strava, activités (GPS, FC, puissance, distance, dénivelé) |
| intervals.icu | Envoyer tes séances planifiées vers ta montre | Identifiant athlète, clé d'accès, séances de ton plan |
| Google (Gemini) | Rédiger ton plan, réajuster un jour, commenter une sortie, te répondre dans le chat IA, prédire un chrono de course | Un extrait borné de tes données d'entraînement — voir plus bas |
| Google (Firebase Cloud Messaging) | Notifications push | Jeton de notification de l'appareil et l'identifiant d'installation que Firebase y associe |
| Sentry | Suivi des erreurs du serveur, pour qu'un bug soit corrigé | Traces d'exception et journaux serveur, identifiants pseudonymisés — voir plus bas |
| CARTO | Fonds de carte | Ton adresse IP (au chargement des tuiles) |
| OpenStreetMap (Nominatim) | Recherche d'adresse pour poser une zone de confidentialité | Le texte recherché, ton adresse IP |
| Open-Meteo | Météo habituelle le jour de ta course cible | Les coordonnées approchées de la course et les dates demandées — aucune donnée de compte |
| Envoi d'e-mails (SMTP) | Vérification d'adresse, réinitialisation de mot de passe | Ton adresse e-mail |
| GitHub | « Signaler un problème » depuis l'app | Le message envoyé, ton pseudo et ton adresse e-mail |
Gemini (IA) : ce qui part, et ce qui ne part pas
Goatching utilise le modèle Gemini de Google pour rédiger les plans d'entraînement et les courts textes que l'app t'affiche. Ce qui est transmis est une liste blanche, fixée dans le code et verrouillée par un test — pas ton profil en entier.
| Transmis | Jamais transmis |
|---|---|
| Des chiffres physiologiques (FC repos/max, FTP, allure seuil, VAM au seuil, poids, taille, date de naissance), ton niveau et tes sports, ton volume hebdomadaire et tes disponibilités, tes courses cibles et tes records, ta charge d'entraînement récente, les séances du plan en cours de travail, et — dans le chat IA — les messages de cette conversation | Ton adresse e-mail, ton nom, ton identifiant de compte, tes traces
GPS, et les champs de texte libre de ton profil :
tes notes, ton objectif écrit avec tes mots, ton historique sportif, et la
description d'une blessure — seule l'année d'une
blessure est transmise, jamais ce qu'elle était.
Pour être précis : le texte que tu écris POUR l'IA lui parvient bien — les messages d'une conversation avec elle, et le « contexte additionnel » que tu peux ajouter en demandant un plan. C'est justement à ça que ces champs servent. Ce qui ne part pas, c'est le texte libre de ton profil. |
Sentry (erreurs) : serveur seulement, et pseudonymisé
Quand le serveur rencontre un bug, l'erreur part vers Sentry pour être corrigée. Trois choses la bornent :
- Serveur uniquement. L'app sur ton téléphone ne contient aucun SDK Sentry : rien ne part de ton appareil.
- Identifiants pseudonymisés. Chaque identifiant est remplacé par une courte empreinte à clé avant l'envoi. On peut reconnaître que le même athlète a rencontré le même bug cinq fois ; Sentry ne voit jamais un identifiant en clair et ne peut pas l'inverser.
- Ni contenus, ni variables. Corps de requête, en-têtes, cookies, paramètres d'URL et variables locales de chaque frame sont coupés — c'est précisément ce qui transporterait sinon un profil ou un dossier de santé.
Journal d'audit
Les actes sensibles sont inscrits dans un journal conservé en base — ce n'est pas la même chose que les journaux serveur cités plus haut, qui tournent. Chaque ligne note l'action, sa date, qui l'a faite, sur les données de qui, depuis quelle adresse IP et avec quel navigateur ou quelle app. Ce qui est couvert : la connexion (réussie comme échouée), la déconnexion, la réinitialisation du mot de passe, la création et la révocation d'un jeton personnel, le lien et la déliaison d'un coach, les modifications de profil, les brouillons et publications de plan, la suppression d'une activité, l'export de tes données, la suppression d'un compte.
Pourquoi : sécurité et preuve — pour que « qui a modifié mon plan ? », « depuis quand ce coach a-t-il accès à mes données ? » et « j'ai demandé la suppression en mars » aient une réponse. La base légale est notre intérêt légitime à garder le service sûr et vérifiable.
Ce que tu peux en faire : tu peux consulter
tes actes, et seulement les tiens — un coach ne lit pas le journal de son
athlète. L'adresse IP et le navigateur ne s'affichent que pour les actions que
tu as faites, jamais pour celles de ton coach. Demande-le-nous
par e-mail et on te l'envoie ; et si l'API te parle, elle le rend aussi sur
/v1/me/audit.
Conservation : 12 mois. Ces questions se posent à l'échelle d'une saison d'entraînement — un plan couvre 12 à 20 semaines, et une préparation d'ultra s'étale sur un an. Quand tu supprimes ton compte, l'adresse IP et le navigateur sont effacés de tes lignes ; seule la ligne qui enregistre la demande de suppression est gardée 3 ans, comme preuve qu'elle a été honorée.
Hébergement & conservation
Tes données sont stockées sur un serveur privé (Oracle Cloud, région de Paris — UE) et sauvegardées de façon chiffrée. Elles sont conservées tant que ton compte existe. Quand tu supprimes ton compte, elles sont effacées ; les sauvegardes chiffrées prises avant, en rotation, disparaissent avec le cycle de sauvegarde, qui purge tout ce qui a plus de 30 jours.
Transferts hors UE. Le serveur, les sauvegardes et le suivi d'erreurs restent dans l'UE (Paris, et l'Allemagne pour Sentry). Deux services sont ceux de Google et impliquent un transfert vers les États-Unis : Gemini (le coach IA) et Firebase (les notifications Android). Ces transferts s'appuient sur le cadre de protection des données UE–États-Unis (Data Privacy Framework). Tout le reste — fonds de carte, recherche d'adresse, météo du jour de course — reste dans l'UE.
Tes droits
- Accès et portabilité : exporte toutes tes données depuis ton compte, dans un format lisible.
- Suppression : Compte → Session → Supprimer mon compte efface ton profil, tes activités, tes plans et tes photos. Le détail complet — et comment la demander sans installer l'app — est sur la page de suppression de compte.
- Rectification : modifie ton profil à tout moment dans l'app.
- Retrait du consentement : tes données de santé sont traitées sur la base de ton consentement explicite, et tu peux le retirer à tout moment. Sache ce que ça implique : sans ces chiffres, Goatching ne peut ni construire ni ajuster un plan — retirer ton consentement revient donc à supprimer ton compte. Tu peux aussi simplement vider les champs de santé de ton profil : l'app continue de fonctionner pour le côté social, mais le coaching n'a plus de quoi travailler.
Tu peux aussi nous écrire à goatching.contact@gmail.com.
Sécurité
Les échanges passent en HTTPS, les mots de passe sont hachés, les sauvegardes sont chiffrées, et tes lieux sensibles peuvent être masqués par des zones de confidentialité qui tronquent tes traces GPS pour les autres. Pour être exact, il y a trois couches : les échanges et les sauvegardes sont chiffrés, et le volume de stockage du serveur est chiffré au repos par l'hébergeur (clés gérées par Oracle) — ce qui couvre le cas d'un disque volé ou mis au rebut. Ce qui n'est pas chiffré, c'est le fichier de base de données lui-même : quelqu'un ayant accès à la machine en fonctionnement pourrait le lire. C'est un choix assumé et non un oubli — la clé devrait vivre sur ce même disque, elle ne protégerait donc pas du scénario qui compte vraiment. L'accès à la machine est restreint par clé SSH, le port de l'API n'est pas publié, et le conteneur ne tourne pas en root.
Mineurs
Goatching n'est pas destiné aux personnes de moins de 15 ans — c'est l'âge à partir duquel, en France, on peut consentir seul à ce type de traitement.
Autant être franc : nous ne vérifions pas l'âge. Il n'y a aucun contrôle à l'inscription, et la date de naissance du profil est optionnelle et sert aux zones d'entraînement, pas à filtrer l'accès. C'est une limite déclarative, sur une app faite pour une poignée d'amis. Si tu penses qu'un mineur de moins de 15 ans a un compte, écris-nous et on le supprime.
Modifications
Cette politique peut évoluer. La date ci-dessous indique la dernière mise à jour ; un changement important te sera signalé dans l'app.
Dernière mise à jour : 7 août 2026.