Changelog

v0.33

Garmin devient la seule source d'activités.

  • Fin de l'intégration Strava : la synchronisation et la liaison de compte Strava sont retirées. Vos activités se collectent désormais uniquement via Garmin Connect, que vous reliez depuis votre espace Mon compte. L'historique déjà importé depuis Strava est conservé et continue d'alimenter vos prédictions ; seules les nouvelles activités passent par Garmin. La connexion au service se fait par lien magique e-mail.
  • Reconnexion Garmin plus fiable : le jeton de rafraîchissement renouvelé par Garmin est désormais correctement conservé. Fini les re-saisies répétées du mot de passe et du code à deux facteurs : une fois vos jetons importés, la synchronisation se renouvelle toute seule.
  • Écart prédit/réalisé plus lisible : sur la page de comparaison, l'écart s'affiche en grand avec un émoji d'humeur selon la performance, les trois estimations (optimiste / centrale / prudente) passent sur des lignes séparées, et une ligne précise la part de pauses ravitaillement incluse dans le temps prédit.
  • Import de trace GPX en glisser-déposer : l'ajout ou le remplacement d'un fichier GPX se fait désormais par glisser-déposer. Une course qui réutilise la trace officielle est signalée par un repère « trace officielle ».

v0.32

Temps de passage plus justes sur les montées et descentes.

  • Vitesse par pente recalée : en confrontant les prédictions aux traces GPS réelles de ~80 courses (point de contrôle par point de contrôle), on a mis en évidence un biais systématique invisible sur le temps total : le modèle était trop lent en montée (d'autant plus que ça grimpe) et trop rapide en descente. Sur une boucle ces deux écarts se compensaient à l'arrivée, mais faussaient chaque temps de passage intermédiaire. Une correction générique par classe de pente redresse désormais chaque segment : les passages prédits aux ravitaillements collent bien mieux au réel (p. ex. une grosse côte d'ouverture prédite à 3 h 52 ramenée à 2 h 32, conforme aux finishers), sans changer le temps d'arrivée.

v0.31

Fatigue mieux calibrée sur les très longues distances.

  • Fatigue longue durée : sur les efforts de plus de 15 heures, le modèle ralentissait jusqu'ici comme sur un ultra « court » et finissait donc trop vite sur les méga-trails (100 miles et au-delà). La fatigue s'accentue désormais progressivement avec la durée, ce qui rapproche les temps prédits des temps réels sur ces formats. Calibré en confrontant les prédictions aux temps de passage réels de coureurs sur une série d'ultras (Diagonale des Fous, TDS, Andorra, Val d'Aran…). Les courses de moins de 15 heures ne changent pas.

v0.30

Calibration individuelle de la prédiction.

  • Calibration individuelle : dès que votre historique compte plus de 5 courses représentatives (terminées et comparables), la prédiction ne se limite plus au modèle générique : elle mesure l'écart systématique entre vos temps réalisés et prédits sur ces courses passées, puis recale l'estimation centrale sur votre niveau réel. Les résultats aberrants sont écartés et la correction est atténuée quand les courses sont peu nombreuses, pour qu'une poignée de résultats atypiques ne fausse pas l'ensemble de vos prédictions. La page de prédiction indique désormais si le modèle personnalisé ou le modèle générique a été utilisé.

v0.29

Vitesse affinée selon la pente et activités Garmin Connect.

  • Identification par e-mail (lien magique) : vous vous connectez désormais sans mot de passe, grâce à un lien à usage unique envoyé par courriel. Vos comptes Strava et Garmin se rattachent ensuite depuis votre espace — ils ne sont plus l'unique porte d'entrée.
  • Vitesse personnalisée selon la pente : le modèle apprend désormais, à partir de vos courses terminées avec trace GPS, comment votre allure se compare au modèle générique dans chaque classe de pente — des fortes montées aux fortes descentes — et applique une correction par classe pour affiner l'estimation, aussi bien en montée qu'en descente. Un coureur plus rapide que le modèle en côte mais plus prudent en descente raide voit ses temps ajustés en conséquence. Ces facteurs correctifs sont affichés sur votre page Profil physiologique (« Ton allure par pente ») et s'activent dès 3 courses terminées avec trace.
  • Activités Garmin Connect : vos activités peuvent désormais être collectées directement via l'API Garmin Connect, en parallèle de Strava. La synchronisation interroge les deux sources, dédoublonne les activités présentes des deux côtés (la donnée Garmin faisant foi) et les fusionne dans un historique unique.

v0.28

Fatigue personnalisée, dénivelé plus juste et courses officielles enrichies.

  • Courbe de fatigue personnalisée : votre page Profil physiologique affiche désormais une courbe de fatigue individualisée, ajustée sur vos courses terminées — un faisceau de courbes selon le dénivelé négatif accumulé (la casse musculaire en descente accélère la fatigue). Sur une course terminée, la courbe de fatigue observée et sa tendance lissée sont tracées.
  • Dénivelé (D+/D−) plus juste : le bruit d'altitude des traces GPS est désormais lissé avant la mesure du dénivelé, ce qui élimine le sur-comptage — p. ex. un D+ affiché à ~3200 m ramené à ~2100 m, conforme aux chiffres des organisateurs.
  • Trace perso sur une course officielle : vous pouvez importer votre propre trace GPX même sur une course rattachée au catalogue.
  • Points de contrôle typés : ravitaillement, point d'eau, base de vie ou pointage — avec un temps de pause par défaut sur les ravitaillements.
  • Catalogue enrichi : davantage de courses officielles avec trace et points de contrôle prêts à l'emploi au moment de choisir votre objectif. Vous pouvez signaler une course manquante depuis le formulaire de création (avec le lien du site officiel), et vous êtes prévenu par e-mail quand la référence d'une course que vous suivez est validée.
  • Connexion Garmin simplifiée : par import de jetons, compatible avec les comptes en double authentification (2FA) ; les jetons sont stockés chiffrés.
  • Vérification de l'adresse e-mail : confirmation via un lien signé envoyé par courriel (l'e-mail est désormais obligatoire).
  • Communauté WhatsApp : un lien vers le groupe a été ajouté à la page contact.
  • Plan d'entraînement adaptatif (aperçu en développement) : un plan qui s'adapte automatiquement à votre charge réelle semaine après semaine, avec validation des séances (renfo cochée, ou séance de course reliée à une sortie Strava avec récupération du ressenti/RPE), affichage du réalisé (durée, D+) et synchronisation forcée. Encore en cours de mise au point.

v0.27

Catalogue des courses officielles : une trace prête à l'emploi.

  • Sélection d'une course officielle : à la création d'une course, un sélecteur propose les épreuves officielles autour de la date saisie, présentées sous forme de cartes (logo, pays, distances en cartouches cliquables). On rattache sa course à l'épreuve et à la distance d'un clic.
  • Une trace entièrement définie, sans saisie : choisir une course du catalogue récupère immédiatement sa trace complète — profil, segments, points de contrôle et barrières horaires — sans aucun import GPX ni reconstitution manuelle.
  • Sortie en « Off » : la création d'une course indépendante du catalogue, à partir de votre propre trace GPX, reste bien sûr possible — il suffit de basculer le sélecteur sur « Sortie en Off ».
  • Personnalisation : vous ajustez vos propres paramètres (temps de pause par ravitaillement, heure de départ, ajout d'un point perso…) sans réimporter la trace ; le reste demeure celui de la course officielle.
  • Course absente ? Signalez-la : si votre épreuve n'est pas encore au catalogue, une case « Fais-le-nous savoir » nous la signale (avec, en option, le site de la course) pour qu'on l'ajoute.

v0.26

Prise en compte de la température (prévisions météo).

  • Profil & météo au fil de la course : nouvelle carte sur la page de prédiction. Le profil altimétrique y est tracé en temps de course (et non plus en distance) ; chaque point de contrôle est placé à son heure de passage estimée (format HHhMM, en rouge s'il dépasse une barrière horaire) et son nom s'affiche au survol. Une bande météo alignée sur l'axe temps montre, pour chaque moment de la course, l'icône de condition, la température et l'humidité sur un fond coloré.
  • Source météo : prévision horaire Open-Meteo lorsque la course est à moins de 16 jours, normales saisonnières au-delà, relevé réel pour une course passée. La température est corrigée à l'altitude du coureur (gradient adiabatique, −6,5 °C / 1000 m).
  • Facteur température dans la prédiction : la chaleur ralentit désormais l'estimation de temps. Un facteur W(température) est appliqué à la vitesse de chaque segment — W = 1 jusqu'à 15 °C, puis −0,6 %/°C (plancher 0,85, soit −9 % à 30 °C) — en utilisant la température à l'altitude et à l'heure de passage du segment. Approche inspirée des travaux de Ely et al. (2007) et El Helou et al. (2012), détaillée dans la page Comment ça marche.
  • Heure de départ et barrière d'arrivée : le formulaire de points de contrôle accueille une ligne Départ (heure de départ) et une ligne Arrivée (barrière horaire). L'heure de départ, requise pour la météo, sert à convertir les temps de course en horaires réels. Les barrières sont affichées à la fois en temps de course et en horaire (HHhMM, avec mention « J+1 » si elle tombe le lendemain).
  • Édition rapide de la date de course : la date se modifie désormais en ligne directement depuis la liste des courses, et s'affiche au format JJ/MM/AAAA.

v0.25

Effort ressenti et suivi de la charge d'entraînement.

  • Import du RPE (Rate of Perceived Exertion) : la note d'effort ressenti saisie sur la montre Garmin en fin de séance est récupérée depuis le champ perceived_exertion de l'API Strava (endpoint détaillé /activities/{id}). Stockée sur chaque activité pour pondérer à terme la charge d'entraînement côté subjectif, en complément du TRIMP cardiaque.
  • Rattrapage automatique à la synchro : les activités pré-existantes sans RPE sont reprises par lots de 50 à chaque synchronisation Strava (best-effort, plafonné pour rester sous la limite Strava de 100 requêtes / 15 min). Sur plusieurs synchros successives, l'historique entier est rempli.
  • Charge aïgue / chronique (ACWR) : nouveau graphique sous la courbe Forme / Fatigue. Calcule la moyenne quotidienne de charge sur 7 jours (aïgue) et 28 jours (chronique), puis le ratio ACWR = aïgue / chronique (Gabbett). Bandes de zone : sous-charge < 0,8, sweet spot 0,8–1,3, vigilance 1,3–1,5, zone à risque > 1,5.
  • Repères de courses sur les graphes : chaque date de course cible ou passée (y compris les courses importées d'ITRA / UTMB) apparaît sous la forme d'une ligne pointillée orange verticale traversant les trois graphiques (Forme / Fatigue, ACWR, TSB), surmontée d'un petit cercle survolable qui affiche le nom de la course en infobulle.

v0.24

Profil physiologique simplifié.

  • Les champs liés aux tests de laboratoire (seuils ventilatoires SV1 / SV2, VO2max, économie de course) ont été retirés du profil. Ils étaient peu exploités par le modèle et rarement disponibles chez les coureurs récréatifs.
  • Restent VMA, FC repos, FC max, poids et genre. La formule de Karvonen continue de servir au calcul des zones cardiaques quand FC repos et FC max sont renseignées.

v0.23

Adoucissement des pentes montées et calibration des bornes plus robuste.

  • Le facteur de pente A (modèle Minetti) est légèrement adouci sur les montées : Aeff = A + 0.15 × (1 − A). Le coût métabolique théorique surestime la pénalité réelle d'un coureur trail qui gère sa cadence dans une montée : la prédiction sur les premières grosses ascensions tombe désormais dans la fenêtre observée plutôt qu'au-dessus du dernier finisseur.
  • Calibration empirique des bornes plus robuste : les ratios passés outliers (course mal classée en technicité au moment de l'import GPX) sont désormais éliminés avant le calcul du multiplicateur. Si la dispersion résiduelle reste trop forte ou si l'on ne dispose pas d'au moins 5 courses comparables, on bascule sur la prédiction brute du modèle plutôt que d'hériter d'un biais systématique.
  • Indicateur affiché sur la page prédiction sous la marge d'incertitude : « Estimation ajustée sur la base de N courses similaires » quand la calibration s'applique, sinon « Estimation brute du modèle ».

v0.22

Vitesse de base adaptée à la durée de course et score d'endurance moins saturé.

  • Les poids du composite v30 / v60 / v120 glissent vers v120 quand la durée estimée de la course augmente : formule courte inchangée ≤ 4 h, transition linéaire, plafond à 0.6 au-delà de 26 h. Un coureur dont l'endurance soutenue est modeste n'est plus survalué par ses meilleurs efforts intenses sur les ultras.
  • Score d'endurance pondéré par la durée des activités observées : une séance d'une heure ne compte plus autant qu'une sortie de plusieurs heures, et un coureur dont l'historique se limite à des entraînements courts ne sature plus à 100.
  • Score d'endurance amorti par le rapport v120 / v30 : un profil rapide-court mais faible sur la durée (ratio sous 0,75) voit son score baisser proportionnellement, jusqu'à −50 % sur les profils les plus déséquilibrés.
  • Indicateur de qualité du fit (R²) retiré de la page activités : une régression sur trois points donne presque toujours un R² élevé, même sur un profil très déséquilibré. L'indicateur suggérait une confiance qui n'existait pas.

v0.21

Répartition des temps de passage et fatigue mieux modélisée.

  • Réserve de fraîcheur en début de course : nouveau facteur F(départ) dans le modèle de vitesse par segment. La réserve anaérobie autorise un sur-régime au départ qui s'estompe en quelques heures (bonus +15 % à t = 0, divisé par 2 chaque heure). Sans ce terme, le modèle prédisait des temps de passage aux premiers points de contrôle plus lents que ceux des derniers finisseurs réels. Calibré sur le Tour des Lacs 2025 (GRP 80 km, 1006 finisseurs) : au CP Merlans (15,5 km / +1547 m D+) la prédiction tombe dans la fenêtre observée pour un coureur d'index UTMB autour de 500.
  • Unification du modèle de fatigue : le facteur D(t) appliqué segment par segment passe de 1 − rate × t (linéaire) à 1 − rate × t1.5, qui était déjà la formule du moteur d'introspection et de la calibration du rate. Les deux variantes coexistaient : la formule linéaire sous-estimait systématiquement la fatigue au-delà de 6 h parce que rate était optimisé pour la courbe t1.5. Impact sur l'historique d'un coureur endurant : courses 6-8 h ajustées de -7 à -12 min, ultras de -16 min sur un 13 h, sans régression observée.
  • Couplage technicité × fatigue : le facteur technicité B est désormais amplifié par la fatigue accumulée : Beff = B × (1 − k × (1 − B) × (1 − D)) avec k = 1. Sur terrain lisse (B = 1) la formule est neutre ; sur un sentier très technique (B = 0,65) avec fatigue au plancher (D = 0,70), la pénalité effective passe de 35 % à 41 %. Modélise l'observation que l'attention et le contrôle postural coûtent plus en fin de course : moins d'engagement en descente, posé plus défensif, perte de cadence sur terrain irrégulier. Calibré sur l'historique du Trail Saint-Jacques 2026 (cohorte UTMB 450-550, temps 12-15 h, n=302).
  • Documentation des trois facteurs dans la page Algorithme (lignes B, D et F du tableau).

v0.20

Import de l'historique de courses depuis ITRA et UTMB.

  • Import des courses passées depuis le profil ITRA public du coureur (lien « Importer mon historique ITRA » sous la liste des courses passées).
  • Import des courses passées depuis le profil UTMB World du coureur, utile pour les courses du circuit UTMB non référencées par ITRA.
  • Saisie de l'indice ITRA par course directement dans la liste, avec confirmation au focus.
  • Recherche d'une activité Strava correspondante à une course importée : confirmation utilisateur puis promotion en course trail-predict avec génération de la trace GPX depuis Strava.
  • Statut de course (Finisher / Blessure / Abandon / Hors délai) saisi lors de l'association d'une activité à une course passée ; badge correspondant affiché dans la liste et sur la page résultat.
  • Matching activité-course passée fondé sur la date uniquement : un DNF à mi-course n'est plus écarté par le filtre distance.
  • Masquage automatique du bouton « Résultat » et de la comparaison quand l'historique d'entraînement ne couvre pas la fenêtre nécessaire à la prédiction (courses passées trop anciennes).
  • Bouton de suppression sur chaque ligne du tableau des courses passées.

v0.19

Ajustement de l'algo de fatigue.

  • Prédictions moins optimistes sur les ultras au-delà de 8 h.
  • Classification automatique de la technicité des segments à l'import GPX via OpenStreetMap.
  • Fourchette de prédiction calibrée sur l'historique des courses passées du coureur.
  • Saisie de l'indice ITRA d'une course pour affiner la prédiction.
  • Séparation des courses cibles à venir et des courses passées.
  • Correction de l'écart affiché à la ligne d'arrivée sur la comparaison.
  • Documentation des choix d'algorithme de fatigue dans la page Algorithme.

v0.18

  • Feuille des passages aux ravitaillements imprimable.
  • Dénivelé par section dans la table des passages.

v0.17

  • Zones de fraîcheur (TSB) recalibrées, échelle de charge clarifiée.

v0.16

  • Export d'une séance d'intervalles vers la montre (format TCX).
  • Remplacement du GPX d'une course existante sans devoir la recréer.

v0.15

  • Prise en compte des randonnées et sorties vélo en équivalence d'entraînement.

v0.14

  • Pauses prises en compte dans les passages aux ravitaillements.
  • Plan d'entraînement enrichi : sortie longue spécifique, affûtage sur 3 semaines, séances clés mises en valeur.

v0.13

  • Plan d'entraînement structuré vers un objectif.
  • Barrières horaires (cutoffs) sur les ravitaillements.
  • Connexion 100 % Strava : simplification de l'authentification.