🗺️
Carte interactive
Tracé arc-en-ciel ou coloré par score, flèches de vent orientées, points d'eau 🚰, cols ⛰️, radar RainViewer animé, plein écran
📊
Profil altimétrique
Graphique interactif synchronisé avec la carte, zones colorées par score météo, slider de survol, tableau des segments horaires
🔩
Correction barométrique Garmin
Le QNH prévu (pression au niveau de la mer) est affiché dans le widget Profil altimétrique. En zone dépressionnaire votre Garmin Edge peut surestimer l'altitude de 100–200 m — le biais est calculé (formule ICAO : 1 hPa ≈ 8,43 m), l'altitude réelle estimée au départ est affichée, et le réglage à saisir avant votre sortie est indiqué. Sévérité : 🟡 < 50 m · 🟠 50–100 m · 🔴 > 100 m.
🗻
Météo par segment
Cols, montées et descentes détectés automatiquement — température, vent, rafales, score météo, durée estimée et VAM
🌡️
Confort thermique
Ressenti cycliste (wind chill + heat index + vitesse), graphique sur le parcours, recommandations d'équipement et indice UV max
🎬
Survol 3D
Survol Mapbox avec mode cinéma (8 plans), stats Garmin temps réel (pente, watts, BPM, cadence, température), minimap et profil synchronisé
⚡
Puissance & effort
Puissance physique point par point, NP, IF, TSS, W/kg, énergie kJ. Distribution 7 zones FTP Coggan, graphique canvas et recommandations
🤖
Coach virtuel IA
Vignette personnelle au propriétaire (affichée uniquement quand son compte Strava est connecté) : analyse des performances sur 90 jours (volume, tendance hebdo, forme PMC), 🚴 dernière activité (nom, date, km, D+, vitesse, FC, puissance — lien Strava), ⚡ puissance & cadence, 🎯 zones FTP et ❤️ fréquence cardiaque (FC moy/max, zones d'intensité) ignorée si aucun capteur. Bouton 🤖 avis du coach IA : synthèse personnalisée via Groq.
📅
Récap annuel Strava (vélo route)
Vignette ouverte à tout visiteur ayant connecté son Strava (comme le Coach virtuel, pas réservée au propriétaire) : bilan année par année de vos sorties vélo route uniquement (VTT, gravel, home-trainer et vélo électrique exclus) — distance, D+, temps, nombre d'années, meilleure sortie et meilleure année, puis détail complet par année.
📅
Prévisions 16 jours
Meilleure journée sur 7 jours + tendances J+7 à J+15 via ECMWF, score incluant rafales et ensoleillement
🌬️
Carte Windy
Vent, pluie, orages, neige, pression, température en temps réel centrée sur votre zone de parcours
⚖️
Comparaison GPX
Analyse côte à côte de deux parcours, carte superposée, tableau comparatif et recommandation par IA
🔔
Alertes push & groupe
Vent fort, rafales, orage, pluie intense, froid, UV — plus ❄️ neige altitude, ⚡ CAPE et 🌂 pluie quasi certaine. Bouton ⚙️ Seuils : 7 curseurs personnalisables en localStorage. Section 👥 Partager les alertes : créez un groupe pour diffuser vos alertes à votre famille en temps réel (polling 5 min)
📅
Météo week-end automatique
Chaque vendredi (ou samedi), une notification PWA résume le meilleur créneau météo du week-end pour votre dernier parcours analysé : ⭐ heure optimale par jour, température min/max, vent et précipitations. Nécessite les notifications activées dans le panneau 🔔. Sur Chrome Android (PWA installée), fonctionne aussi en arrière-plan via Periodic Background Sync.
📂
Historique
30 dernières analyses conservées localement, rechargement en un clic, scores et distances mémorisés
🤖
Analyse IA
Synthèse en langage naturel via Groq llama-3.3-70b : distance, dénivelé, distribution météo, rafales max, meilleur départ
🔄
Sens de circulation (boucles)
Pour les parcours en boucle, compare automatiquement les deux sens : % vent dans le dos / de face, score météo moyen. Bouton 🤖 IA pour une recommandation argumentée en 3-4 phrases
⬇️
GPX enrichi météo
Export GPX 1.1 avec extensions météo par point : température, ressenti, vent, rafales, précipitations et score. Cochez Komoot/Wahoo : <desc> note de parcours Komoot, <cmt> affiché sur Wahoo Element, waypoints tous les ~5 km
📅
Fenêtre 7 jours
7 badges colorés avec score et meilleure heure par jour — choisissez la meilleure date en un coup d'œil
📤
Export multi-format
PDF 4 pages (alertes, tableau horaire, profil, calories), KML et GeoJSON colorés par score
📷
Carte PNG haute résolution
Export PNG 1280×800 @2× via Mapbox Static Images — tracé coloré, marqueurs départ/arrivée, fond cartographique topo
🔗
Partage par URL
Bouton 🔗 Partager : l'analyse est sauvegardée côté serveur et un lien court est copié dans le presse-papiers
↺
Rejouer l'analyse
Après une analyse, le GPX reste en mémoire. Le widget 🔁 Dernier GPX (date, heure, vitesse, poids kg) permet de relancer sans ré-uploader. Pour les boucles, la vignette 🔄 Sens de circulation optimal affiche deux cartes cliquables (→ Sens du fichier GPX et ← Sens inverse) : cliquez sur une carte pour relancer l'analyse dans ce sens — idéal pour choisir la direction la plus favorable au vent. En mode inversé : pill orange « ↩️ Sens inversé » dans la barre de résumé et barre animée orange en haut de chaque vignette ; la carte du sens en cours est mise en évidence pour revenir en un clic
🏕️
Bikepacking / Multi-jours
Cochez 🏕️ Mode Bikepacking dans le formulaire et indiquez la distance et le D+ max par étape (défaut : 80 km · 1 500 m D+). Le parcours est découpé automatiquement dès que l'un des deux seuils est atteint — la météo de chaque étape est récupérée sur sa date propre (J, J+1, J+2…). La vignette affiche pour chaque étape : date, km, D+, température, vent, précipitations, heure de départ optimale, score /100 et le badge km ou D+ indiquant le critère de coupure
📲
Application PWA
Installable sur iPhone et Android comme une vraie app, fonctionne hors ligne pour consulter les analyses en cache
📂
Ouvrir avec… (Android)
Une fois l'app installée comme PWA sur Android, elle apparaît dans "Ouvrir avec…" pour les fichiers .gpx et .fit. Sélectionnez le fichier → choisissez Météo GPX → l'analyse démarre automatiquement.
🤖
Application Android (APK)
Bouton 🤖 App Android dans la topbar : télécharge directement le fichier .apk de l'application, à installer manuellement sur votre téléphone sans passer par le Play Store. Alternative à l'installation PWA classique — pratique si votre navigateur ne propose pas l'invite d'installation.
📐
Gradient de pente sur le profil
Bouton 📐 Pente dans la barre du widget Graphique : recolorie le fond du profil altimétrique par catégorie — gris <3% · vert 3-6% · jaune 6-9% · orange 9-12% · rouge ≥12%. Re-cliquer rétablit les couleurs score météo.
🌬️
Vent en altitude sur les cols
Le tooltip de chaque col ⛰️ sur la carte Leaflet affiche désormais la température et le vent au sol prévu au passage. Quand le vent à 80m d'altitude (Open-Meteo windspeed_80m) dépasse le vent sol de plus de 5 km/h, il est indiqué en complément (ex : 22 km/h / 38 km/h (80m)). L'alerte cols venteux est aussi déclenchée si le vent à 80m dépasse 40 km/h, même si le vent sol reste sous le seuil.
☀️
Dose UV cumulée
Dans le widget Confort thermique, à côté de l'indice UV max, la dose UV cumulée sur toute la durée du parcours est calculée : dose = Σ(UV_i × durée_i). Seuils : <3 UV·h faible — 3-6 modérée (SPF 30) — 6-10 élevée (SPF 50+) — >10 très élevée. Aide à planifier la protection solaire sur les longues sorties d'été.
🚰
Prochain point d'eau dans X km
Dans le widget Météo par segment clé, chaque carte de montée/descente/col affiche un badge 🚰 +X km indiquant la distance jusqu'au prochain point d'eau potable après la fin du segment. Données OpenStreetMap (fontaines publiques, bornes-fontaines). Les points d'eau sont chargés automatiquement en arrière-plan si la couche 🚰 Eau n'est pas activée. Badge absent = aucun point d'eau référencé à portée sur ce tronçon.
⛰️
Profil détaillé col au clic
Lorsque la couche ⛰️ Cols est activée sur la carte, cliquer sur un marker col ouvre un popup avec le profil complet de l'ascension : longueur (km), D+ (m), pente moyenne, pente maximale, temps d'ascension estimé à la vitesse saisie, température et vent au sommet, score météo. La base de l'ascension est détectée automatiquement comme le point le plus bas dans les 20 km précédant le col sur le tracé GPX.
📥
Export CSV point par point
Bouton ⬇️ CSV dans la barre d'export : télécharge un fichier tableur avec une ligne par point GPX. Colonnes : lat, lon, alt_m, dist_km, heure, temp_C, vent_kmh, pluie_mm, score, pente_pct, power_W. La puissance (W) est estimée à partir de votre poids et de la pente. Compatible Excel, Google Sheets, LibreOffice Calc pour filtrer, trier, créer des graphiques personnalisés.
🎓
Tutoriel first-run
Au premier lancement (ou après effacement du cache), un tutoriel en 3 étapes guide vers les éléments clés : charger un GPX, régler date & vitesse, lancer l'analyse. Chaque étape surligne l'élément concerné avec un halo bleu animé. Bouton "Passer le tutoriel" pour ignorer. Ne réapparaît plus une fois complété.
📊
Simulation multi-vitesses
Sous le tableau de métriques du widget Planning, un tableau "Comparaison allures" compare automatiquement les durées et heures d'arrivée pour 25 / 28 / 32 km/h. Votre allure saisie est mise en évidence. Aucun re-fetch météo : les corrections pente/vent/température sont recalculées instantanément côté JS.
⏰
Prédiction ETA affinée
L'estimation de durée intègre désormais un malus température de −3 % par segment sous 5°C (froid → dépense métabolique accrue → vitesse réduite). Une ligne ⏰ Arrivée s'ajoute dans le widget Planning : heure de départ + durée calculée = heure d'arrivée estimée à l'affichage. La durée affinée tient compte de la pente, du vent et de la température.
🧩
Dashboard personnalisé
Vignettes réorganisables par glisser-déposer, disposition sauvegardée, mode clair / sombre, poids et vitesse mémorisés automatiquement
🌍
Interface multilingue
4 langues : 🇫🇷 Français, 🇺🇸 English, 🇪🇸 Español, 🇩🇪 Deutsch. Changement instantané via les drapeaux en haut de page — titres, formulaire, alertes, codes WMO et scores traduits dynamiquement
🗺️
Routage cycliste sans GPX
Tapez départ + arrivée (ou cliquez sur la carte) — l'itinéraire cyclable est calculé via OSRM (open source), l'altitude récupérée via Open-Meteo, et le GPX généré automatiquement en un clic. Marqueurs glissables. Profil altimétrique interactif en surbrillance sous la carte : survol pour voir l'altitude et le point correspondant sur la carte. Bouton ⛶ plein écran intégré. Durée estimée calculée selon votre vitesse. Ajoutez un point ◆ Via pour forcer un passage. ⇅ Inverser pour échanger départ et arrivée en un clic.
🧭
Parcours suggérés — style Garmin
Dans le widget 🗺️ Calculer un itinéraire, le panneau 🧭 Parcours suggérés génère automatiquement 3 boucles cyclistes depuis votre point de départ A, sans avoir à chercher une arrivée. Réglez : distance cible (5→200 km — boutons rapides 20/30/50/80/100), vitesse moyenne (pour l'estimation de durée), et direction principale via une rose des vents 3×3 (NO / N / NE / O / E / SO / S / SE). Cliquez 🔀 Générer : OSRM calcule 3 boucles aller-retour avec des azimuts légèrement décalés (±25°) pour offrir de la variété — exactement comme Garmin Round-Trip Routing. Chaque carte affiche la distance OSRM réelle et la durée estimée. Bouton ✅ Utiliser : la boucle est tracée sur la carte Leaflet et le GPX injecté dans le formulaire d'analyse en un clic.
🌬️
Variante météo-optimale
Bouton 🌬️ Variante vent dans la barre d'export. Détecte les zones où le vent de face dépasse 15 km/h, calcule des waypoints de contournement côté abrité, et interroge OSRM pour un itinéraire alternatif. La variante s'affiche en vert pointillé sur la carte ; un badge résume : −X% vent de face · +Y km · +Z min
📲
QR code de l'analyse
Après l'analyse, un bouton 📲 apparaît à côté de 🔗 Lien résumé dans la barre en haut. Cliquer dessus génère un QR code encodant l'URL de partage — scannez-le pour ouvrir l'analyse sur votre mobile. Bouton ⬇️ Télécharger PNG pour sauvegarder l'image. La bibliothèque QRCode.js est chargée en lazy (∼10 KB) uniquement au premier clic.
📂
Historique des analyses
Chaque analyse est automatiquement sauvegardée dans l'historique local (jusqu'à 10 entrées). Bouton 📂 Parcours récents dans la barre en haut : ouvre un panneau latéral avec nom GPX, date, score coloré, distance, heure optimale. Clic sur une entrée → recharge immédiatement l'analyse complète depuis le stockage local (IndexedDB). Bouton 🗑️ individuel et "Tout effacer" disponibles. Le badge indique le nombre de parcours enregistrés.
📝
Notes personnelles par analyse
Dans le widget Score météo, un bouton 📝 Note personnelle ouvre une zone de texte collapsible. Saisissez vos remarques sur la sortie (conditions réelles, ressenti, équipement…) — sauvegarde automatique (débounce 800 ms) en localStorage. La note est indexée par GPX + date, donc distincte pour chaque sortie. Compteur de caractères live (max 500). Une prévisualisation en italique s'affiche en permanence sous le bouton si la note est non vide.
🧊
Verglas prédictif
Pour les départs avant 11h, analyse la nuit précédente (J-1 22h→6h) depuis l'archive Open-Meteo : T° min < 2°C + chaussée humide (précipitations, humidité ≥ 80% ou point de rosée ≤ 2°C) → alerte dans le widget Planning. Niveaux danger (T° < -2°C / neige au sol), avertissement ou info. Cache 7 jours.
📥
Import depuis Strava
Bouton 📥 Importer depuis Strava sous le champ GPX : récupère vos 50 dernières sorties vélo (Ride, E-Bike, Gravel…), génère le GPX à la volée depuis les streams GPS Strava et lance l'analyse directement — sans passer par un fichier
💧
Nutrition & Hydratation
Plan ravitaillement calculé à partir de la météo du parcours : eau totale (taux de sudation selon température et humidité), bidons nécessaires, fréquence des arrêts, glucides (g/h, gels + barres), kilocalories dépensées. Alertes automatiques chaleur (> 28 °C) et pluie + électrolytes
📊
Charge d'entraînement (PMC)
Performance Management Chart issu de vos activités Strava : CTL (forme long terme), ATL (fatigue court terme), TSB (fraîcheur du jour). Graphique Canvas 60 jours + projection 7 jours, badge ✅ Forme / 😐 Neutre / 😓 Fatigué. FTP configurable dans le widget.
🧭
Rose des vents
Dans le widget Conditions, un histogramme polaire Canvas montre la distribution des directions de vent sur l'ensemble du parcours — 8 secteurs (N / NE / E / SE / S / SO / O / NO), barres colorées par vitesse moyenne : vert < 20 km/h · orange 20–35 · rouge > 35. Les 3 directions dominantes sont listées avec leur pourcentage et vitesse.
🏕️
Étapes bikepacking sur la carte
En mode Bikepacking, des marqueurs 🏕️ numérotés (colorés par score météo) sont placés au point exact de coupure sur la carte Leaflet. Un badge km (bleu) ou D+ (violet) indique le critère qui a déclenché la coupure. Un clic affiche le popup de l'étape : km, D+, plage de températures, vent max, précipitations et heure de départ optimale — directement sur le tracé, sans quitter la carte.
⚡
Bornes de recharge e-bike
Bouton ⚡ E-bike dans la barre de la carte : interroge OpenStreetMap / Overpass pour charger les bornes de recharge vélo électrique dans un rayon de 2 km du tracé. Marqueurs verts ⚡ avec popup : nom, opérateur, type de connectique (Type 2 / CHAdeMO / CCS), tarification, accès et distance au tracé. Chargement lazy au premier clic, état persisté en localStorage. Alerte planning automatique si aucune borne n'est détectée dans un rayon de 30 km et que le parcours dépasse 60 km.
✂️
Segmentation multijour automatique
En mode Bikepacking, deux critères de découpe combinables : distance/étape (défaut 80 km) ET D+ max/étape (défaut 1 500 m). L'algorithme coupe l'étape dès que l'un des deux seuils est atteint — idéal pour les parcours montagneux où le dénivelé est plus limitant que la distance. Chaque point de coupure est marqué 🏕️ sur la carte avec le score météo du jour, le D+ et l'heure de départ optimale. Le badge km ou D+ indique le critère qui a déclenché la coupure.
🔔
Notification départ J-1
La veille de votre sortie, une notification push locale est envoyée automatiquement : ✅ Bonne météo demain ! si le score moyen (7h–19h) dépasse 70/100, ou ⚠️ Météo défavorable si le score est inférieur à 40. Le résumé inclut température min/max, vent max et précipitations totales. Nécessite les notifications activées dans le panneau 🔔 et un parcours analysé au préalable.
😷
Qualité de l'air (AQI)
Indice européen de qualité de l'air (IEQ) calculé sur la fenêtre départ → arrivée via Open-Meteo Air Quality (PM2.5, PM10, O3, NO2). Badge coloré dans le widget Score : 🟢 Bonne / 🟡 Correcte / 🟠 Modérée / 🔴 Mauvaise / 🟣 Très mauvaise. Alerte planning si IEQ > 60, alerte push temps réel. Seuil ajustable dans le panneau 🔔.
❄️
Isotherme 0°C
Ligne horizontale pointillée bleue sur le profil altimétrique indiquant le niveau de l'isotherme 0°C heure par heure. Bandeau sous le graphique : iso-zéro min du parcours et nombre de points au-dessus (rouge si dépassement). Alerte planning automatique si des points du tracé dépassent l'isotherme — risque verglas / neige en altitude.
🌅
Lever & coucher du soleil
Calcul pur JS (algorithme SunCalc inline, précision ±1 min) sans dépendance externe. Bande 24h avec heures de nuit assombries, emoji 🌅 et 🌇 sur les heures exactes. Lignes verticales pointillées sur le profil altimétrique et le graphique vent. Widget Score : durée de jour. Alertes planning si départ avant le lever ou arrivée après le coucher — éclairage obligatoire.
👥
Alertes de groupe / famille
Dans le panneau 🔔, section 👥 Partager les alertes : créez un groupe en un clic pour générer un lien à partager. Vos proches visitent /meteo-gpx/subscribe.php?token=… et cliquent "S'abonner". Lorsque votre app déclenche une alerte (orage, vent violent, AQI…), elle est automatiquement diffusée au groupe. Les abonnés sont notifiés en temps réel via un polling toutes les 5 minutes — aucune installation d'app requise, notifications locales dans le navigateur.
📤
Export GPX enrichi Komoot / Wahoo
Cochez Komoot/Wahoo à côté du bouton ⬇️ GPX+météo avant d'exporter. Le fichier GPX généré contient : un <desc> structuré avec score, températures, vent max et précipitations (affiché comme note de parcours dans Komoot) ; un <cmt> par point du tracé avec température et vent (affiché sur Wahoo Element pendant la navigation) ; des waypoints tous les ~5 km aux transitions météo importantes.
🌡️
Heatmap intensité du vent
Bouton 🌡️ Intensité dans la barre de la carte. Affiche une couche de chaleur colorée selon la vitesse du vent point par point : bleu (calme) → cyan → vert → orange → rouge (fort). Un slider d'opacité permet de superposer la heatmap avec le fond de carte. Plugin Leaflet.heat (~8 KB) chargé en différé au premier clic.
🔍
Vérification météo a posteriori
Pour les sorties passées, un bouton "📊 Vérifier la prévision réelle" apparaît dans le widget Score. Un clic compare la météo réelle (réanalyse ERA5, Open-Meteo archive) avec la prévision modèle NWP historique sur le créneau de votre sortie. Tableau : température moy/max, vent max, précipitations — colonnes Réel / Prévu / Écart coloré. Un score de précision 0–100 % résume la fidélité de la prévision.
📊
Score de confiance probabiliste
Pour les prévisions J+5 à J+16, le badge "Fiabilité météo" affiche une plage de score (ex. 68–84/100 · 45 %). Le graphique vent montre une zone grisée P10–P90 représentant l'incertitude de la composante face/dos. Alerte planning automatique si la plage dépasse 20 points (J+12+).
🎨
Barres vent face / dos colorées
Sur le graphique vent, un dataset de barres colorées par point s'ajoute à l'aire de remplissage : 🟢 vert = vent dans le dos, 🔴 rouge = vent de face, gris = latéral. La hauteur de chaque barre = valeur absolue de la composante. Tooltip détaillé : "↓ Dos (abs.) : 12 km/h".
⚠️
Risque routier via OSM
Bouton ⚠️ Revêtement sur la carte : interroge Overpass (OpenStreetMap) pour trouver les tronçons à risque à moins de 150 m du tracé — surfaces non goudronnées (gravier, terre, sable, pavés), ou revêtement dégradé (bad/very_bad). Markers ⚠️ avec popup descriptif. Alertes automatiques dans le widget Planning.
📅
Calendrier de scores bikepacking
En mode Bikepacking, une matrice visuelle affiche les 8 fenêtres de départ possibles (J+0 à J+7). Chaque cellule est colorée par score météo : 🟢 ≥70 · 🟠 40–69 · 🔴 <40. La meilleure fenêtre globale est mise en évidence (⭐). Un clic sur Choisir pré-remplit automatiquement la date du formulaire pour l'analyse complète.
🧊
Alerte givre & verglas
Détection automatique du risque de verglas matinal : si la température est < 4 °C et que l'écart avec le point de rosée est < 2 °C, une alerte planning "🧊 Risque verglas" est déclenchée avec les plages horaires à risque. Données dew_point_2m Open-Meteo intégrées à chaque point du tracé.
🌂
Probabilité de pluie sur graphique
La probabilité de précipitations (forecast uniquement) s'affiche en barres bleues sur le graphique vent — couleur renforcée au-delà de 80 %. Alerte planning automatique si ≥ 3 points consécutifs > 80 % : "🌂 Pluie quasi certaine entre Xh et Yh". Données precipitation_probability Open-Meteo.
🌿
Pollen (cyclistes allergiques)
Niveaux de pollen sur la fenêtre de sortie via Open-Meteo Air Quality : 🌿 Graminées, 🌲 Bouleaux, 🌾 Aulnes — échelle 0→5 (SILAM). Badge dans le widget Score si niveau ≥ 3 (Modéré). Alerte push si le pollen dominant dépasse 200 grains/m³. Alerte planning si niveau ≥ 4 (Élevé).
⛄
Neige au sol sur les cols
La variable snow_depth (Open-Meteo, en cm) est récupérée pour chaque point du tracé. Sur les cols détectés (Overpass), le popup affiche l'épaisseur de neige avec un indicateur de praticabilité : 🟠 2–10 cm (attention), 🔴 > 10 cm (col probablement impraticable). Alerte planning si un col du tracé a > 5 cm de neige.
🏋️
Forme × Météo (TSB × Score)
Croisement de votre TSB Strava (fraîcheur du jour) avec le score météo du parcours. 4 cas : 🟢 Sortie idéale (TSB ≥ +5 & score ≥ 70), 🟡 Raisonnable (neutre), 🔴 Récupération conseillée (TSB < −10) ou report si météo défavorable. Badge injecté dans le widget Score après la récupération Strava.
🏆
Comparaison performances Strava × météo
Après analyse, le widget Score affiche vos 3 meilleures sorties Strava sur un tracé similaire (distance ±15 %, D+ ±25 %) avec les conditions météo du jour : vent moyen, température, précipitations et score. Estimation du gain de temps si le vent d'aujourd'hui est plus favorable que lors de votre meilleure performance.
📆
Calendrier bikepacking 16 fenêtres
En mode Bikepacking, la matrice de scores couvre désormais 16 fenêtres de départ (J+0 à J+15). Les fenêtres J+8 à J+15 sont affichées avec un fond hachuré et le score préfixé d'un "~" pour signaler la fiabilité réduite au-delà de 8 jours. La meilleure fenêtre (⭐) est sélectionnée uniquement parmi les 8 premières jours.
💾
Import .FIT (Garmin / Wahoo)
Le formulaire accepte désormais les fichiers .fit en plus du GPX — le format natif des GPS Garmin Edge et Wahoo Element. Parser binaire PHP complet : lit les messages de définition + données FIT (spec SDK publique), extrait lat/lon et altitude (enhanced_altitude uint32 ou altitude uint16). Le reste du pipeline (météo, score, carte, graphiques) est identique.
🏋️♂️
Export TCX (Garmin Connect / TrainingPeaks)
Bouton ⬇️ TCX dans le widget Planning : génère un fichier Garmin Training Center XML importable dans Garmin Connect, TrainingPeaks, Golden Cheetah et Strava. Chaque Trackpoint contient position, altitude, distance et une puissance estimée (extension TPX Watts) calculée à partir du poids, de la pente et de la vitesse (modèle physique Crr/CdA).
📅
Export iCal (.ics) — Ajouter au calendrier
Bouton 📅 Ajouter au calendrier dans le widget Planning : génère un fichier .ics standard (RFC 5545) compatible Google Calendar, Apple Calendar et Outlook. SUMMARY = nom du parcours + score météo. DTSTART calé sur l'heure de départ optimale. DTEND = départ + durée estimée. DESCRIPTION = résumé météo inline. LOCATION = adresse du départ (géocodage serveur).
👆
Swipe navigation mobile
Sur mobile (détection pointer:coarse), un glissement horizontal (swipe) fait défiler vers la vignette suivante ou précédente. L'écran n'est pas un carrousel — le swipe déclenche un scroll smooth automatique vers la vignette cible. Un indicateur de points (dots) en bas de l'écran montre la position courante et permet d'accéder directement à n'importe quelle vignette d'un tap. Zéro impact sur le desktop.
🔍
Filtres & recherche des vignettes
Bouton 🔍 dans la barre de navigation (visible uniquement après analyse) : ouvre une barre de filtre avec un champ de recherche texte par titre de vignette + 4 boutons de catégorie — 🌦️ Météo (score, conditions, journée…) · ⚡ Effort (nutrition, puissance, PMC…) · 🗺️ Carte (carte, graphique, segments…) · 📤 Export (planning & exports). Les vignettes hors filtre sont estompées. État persisté en sessionStorage, réinitialisé à chaque nouvelle analyse.
🔴
Vigilance Météo-France officielle
Après chaque analyse, le niveau de vigilance officiel Météo-France est récupéré pour le département de départ : 🟡 Jaune (soyez attentifs) · 🟠 Orange (soyez très vigilants) · 🔴 Rouge (vigilance absolue). Le badge coloré s'affiche dans le widget Score avec les phénomènes concernés (vent violent, orages, neige-verglas, crues…). Une alerte planning bloquante est déclenchée à partir du niveau Orange.
⚠️
Analyse danger descentes
Détection automatique des segments de descente à risque : pente inférieure à −8 % combinée à des conditions météo défavorables (pluie > 0.3 mm/h ou température < 2 °C). Les tronçons dangereux sont tracés en violet foncé sur la carte Leaflet (au-dessus du tracé principal) avec une légende et un tooltip "⚠️ Descente dangereuse". Une alerte planning est générée avec la pente max, le pourcentage du parcours à risque et le km de la première descente détectée.
📊
Climatologie ERA5 — comparaison avec la normale
Après chaque analyse, les conditions du jour (température, pluie, vent) sont comparées à la normale climatologique 1991–2020 (référence WMO) calculée depuis les réanalyses ERA5 (ECMWF). L'écart est coloré : vert si dans la normale (±1σ), orange si légèrement anormal (±2σ), rouge si très anormal (>2σ). Le widget s'affiche dans le Score global, sous le badge Vigilance.
📷
Webcams météo sur le tracé
Cliquez sur le bouton 📷 Webcams sur la carte pour charger les webcams météo proches du parcours via l'API Windy Webcams. Seules les webcams à moins de 10 km du tracé sont affichées (20 max). Un clic sur un marqueur 📷 ouvre une miniature et un lien ▶ Voir en direct. Nécessite une clé API gratuite (inscription sur api.windy.com/webcams) à renseigner dans includes/secrets.php → WINDY_WEBCAM_KEY.
🏅
Segments KOM/QOM Strava à battre
Après l'analyse, le widget Score global liste automatiquement les segments Strava populaires dont le départ se situe à moins de 400 m du tracé GPX (via l'API Segment Explorer Strava). Pour chaque segment : temps 🏆 KOM (record hommes), 👩 QOM (record femmes) et votre PR personnel avec l'écart en secondes. Cliquez sur le nom pour ouvrir le segment sur Strava. Sur la carte Leaflet, le bouton 🏅 KOM affiche le tracé réel du segment (polyline décodée depuis Strava, pas une ligne droite), avec les marqueurs 🏁 (départ) et 🏅 (arrivée). Résultats mis en cache 2 h.
📊
Corrélation performances × météo
Dans le widget Score global, sous le tableau Strava : scatter plot de vos sorties similaires (distance ±25 %). X = score météo archive · Y = vitesse moyenne km/h. Points vert/orange/rouge selon le score. Ligne de tendance bleue (régression linéaire). Insight auto : "+10 pts météo ≈ +X km/h". Nécessite ≥ 3 sorties et Strava connecté.
🛣️
Revêtement du tracé — graphique circulaire
La vignette 🛣️ Revêtement du tracé affiche un graphique en anneau (donut) avec la répartition des surfaces sur l'ensemble du parcours en km et pourcentage. 5 catégories : 🛣️ Asphalte (asphalte, béton, bitume), 🪨 Gravier (gravel, compacté, empierré), 🧱 Pavés (pavés, dalles), 🌿 Terre (terre, chemin, sentier), ❓ Autre. La surface dominante s'affiche au centre. Source : OpenStreetMap / Overpass — interroge tous les tronçons à moins de 60 m du tracé. Les routes sans tag surface sont classifiées par type de voie (primary → Asphalte, track grade3-5 → Terre…). Résultats mis en cache 12 h.
⚡
Risque foudre / orage en transit
Après l'analyse, les points du tracé dont l'énergie convective (CAPE) dépasse 1 000 J/kg sont signalés : marqueur ⚡ animé sur la carte Leaflet avec le km de début et la valeur CAPE max (faible < 1 000 / modéré 1 000–1 500 / élevé 1 500–2 000 / très élevé > 2 000 J/kg). Le graphique vent affiche un fond ambre sur les segments concernés — intensité proportionnelle à la CAPE. Une alerte planning est générée : warning si CAPE > 1 000 J/kg, danger si des orages effectifs (weathercode ≥ 95) sont prévus au même horaire. Le CAPE est issu des modèles Open-Meteo — déjà présent dans chaque point de tracé sans appel API supplémentaire.
📊
Fan chart d'incertitude sur le vent (J+5+)
Pour les sorties prévues à plus de 4 jours, le graphique de composante vent (face/dos) affiche une bande ambre semi-transparente entre les percentiles P10 et P90 de la prévision — la bande s'élargit avec l'horizon (±5% par jour, max ±35%). La légende indique "↕ Incert. J+N (±X%)" et chaque tooltip précise "📊 Plage modèle ±X% — J+N". Cette représentation visuelle de l'incertitude est calculée entièrement côté client (aucun appel API supplémentaire) à partir du champ forecast_days_ahead déjà dans l'analyse.
📶
Analyse offline — consultation hors ligne
Chaque analyse est automatiquement sauvegardée localement dans IndexedDB (base de données embarquée du navigateur). En cas de perte de connexion, la page offline.html restitue la dernière analyse avec : score global, métriques clés (km, D+, T° min/max, vent), alertes recalculées et le tableau horaire complet. La bannière "📂 Dernière analyse — il y a X min" indique la fraîcheur des données. Compatible avec le mode PWA (appli installée sur l'écran d'accueil) — les données restent accessibles même en zone blanche (montagne, tunnel). Aucune donnée personnelle ni GPX n'est transmise hors du navigateur.
🔗
Partage enrichi via URL hash
Après chaque analyse, un résumé compact est encodé dans l'URL (fragment #share-…) via history.replaceState. Il contient : date, distance, D+, score global, heure de départ optimale, et les 3 principales alertes. Le bouton 🔗 Lien résumé dans la topbar copie cette URL dans le presse-papier — partageable directement par message ou email. Quand le destinataire ouvre le lien, une bannière bleue affiche le résumé en haut de la page avant qu'il lance sa propre analyse. Aucune donnée GPX ni donnée personnelle n'est transmise — résumé uniquement. Fonctionne sans serveur ni base de données.
👁️
Mode daltonien / accessible
Le bouton 👁️ Accessible dans la topbar bascule sur la palette Okabe-Ito, standard en accessibilité scientifique : bleu #0072B2 (favorable), orange doré #E69F00 (modéré) et vermillon #D55E00 (difficile), en remplacement du rouge-vert standard illisible pour ~8 % des hommes (deutéranopie). L'état est persisté en localStorage — actif à chaque visite sans re-configurer. Les couleurs s'appliquent sur l'ensemble de l'interface : tracé GPX sur la carte Leaflet, flèches de vent, graphique de profil altimétrique et vent (Chart.js), badges de score, alertes planning, tableaux horaires et widgets de comparaison. Implémentation via la classe CSS body.theme-a11y + override des propriétés CSS --c-green / --c-orange / --c-red — zéro impact sur les calculs météo.
🔊
Résumé vocal
Après chaque analyse, le bouton 🔊 Résumé vocal dans le widget Score lit à voix haute le résumé du parcours via la Web Speech API (synthèse vocale navigateur, aucune dépendance externe) : distance, dénivelé, score et label météo, heure de départ optimale, températures min/max, vent maximum, précipitations et jusqu'à 3 alertes actives. Voix fr-FR sélectionnée automatiquement parmi les voix système. Un clic sur ⏹ arrête la lecture en cours. Particulièrement utile en mode PWA sur mobile pour préparer une sortie sans regarder l'écran.
🌫️
Alerte brouillard
La variable visibilité (km) est déjà présente dans chaque point du tracé. Si plus de 15 % des points ont une visibilité < 1 km, une alerte planning ⚠️ Brouillard dense est déclenchée avec le km de premier point affecté et la visibilité minimale. Une notification push 🌫️ est également envoyée si la visibilité est prévue < 1 km dans les 6 prochaines heures autour du parcours (alertes push activées). Aucun appel API supplémentaire — donnée déjà fetchée.
🌡️
WBGT — Stress thermique
Le Wet Bulb Globe Temperature (WBGT) est l'indice de stress thermique de référence pour le sport outdoor (ISO 7243). Formule simplifiée : 0,567×T + 0,393×eₐ + 3,94 (eₐ = pression vapeur partielle). Niveaux : <28°C faible · 28–32 modéré · 32–35 élevé · >35 danger. Affiché dans le widget Confort thermique (carte 🌡️ WBGT max, visible uniquement si T° estivale). Alerte planning si WBGT max ≥ 32°C. Aucune dépendance — humidité et température déjà dans le tracé.
🗓️
Fenêtre météo parfaite J+0→J+6
Sous le tableau Comparaison allures dans le widget Planning, un mini-calendrier 7 jours s'affiche dès que les prévisions hebdomadaires sont chargées. Chaque colonne = un jour : score météo coloré + meilleure fenêtre de 3h consécutives (calcul sur vent, précipitations, code météo, température). Un clic sur n'importe quelle colonne préremplit le formulaire avec la date et l'heure optimale et affiche une confirmation. Données issues du widget 📅 Prévisions 16 jours — aucun fetch supplémentaire.
🏕️
Refuges & hébergements bikepacking
Bouton 🏕️ Refuges sur la carte Leaflet (topleft) — charge via Overpass API les refuges alpins, abris, auberges et chambres d'hôtes dans la bbox du tracé. Filtre ≤ 2 km du tracé. Popup : type, nom, capacité, horaires, tarif. État persisté en localStorage. Alerte planning si étape > 80 km et aucun hébergement trouvé dans ce rayon.
📍
Suivi GPS live en sortie
Le widget 📍 Suivi GPS apparaît après analyse (si la géolocalisation est disponible). Cliquer sur ▶ Démarrer lance navigator.geolocation.watchPosition() — le point courant est projeté sur le tracé GPX par plus proche voisin. Affiche en temps réel : km parcourus, km restants, ETA, température, vent et prochain point d'eau. Un marker vert se déplace sur la carte. Fonctionne entièrement hors ligne grâce à ANALYSIS_DATA déjà en mémoire. Alerte batterie si < 20 %.
🗺️
Zoom carte depuis une card de segment
Cliquer sur une card dans le widget 🗻 Météo par segment clé zoom automatiquement la carte Leaflet sur les coordonnées du segment sélectionné (map.fitBounds()) et trace une polyline orange temporaire. La vue revient sur l'étendue complète du parcours après 5 s. Implémenté via l'événement segment-focus déjà dispatché par segment.js — aucune modification de la logique de détection des segments.
☕
Cafés & restaurants sur le tracé
Bouton ☕ Restos sur la carte Leaflet — charge via Overpass API les cafés, restaurants, fast-foods et boulangeries dans la bbox du parcours. Filtre ≤ 500 m du tracé. Popup : type, cuisine, horaires, téléphone. État persisté en localStorage.
📅
Raccourcis de date rapide
Trois boutons Aujourd'hui / Demain / Samedi sous le champ Date du formulaire pour préfill instantané. Calcul JS pur côté client, sans rechargement de page.
📈
Tendance météo J+3
Sous le calendrier 7 jours du widget Planning, un badge coloré compare le score météo du jour J vs J+3. 📈 amélioration (vert) ou 📉 dégradation (orange/rouge) avec le delta en points. Affiché uniquement si l'écart dépasse 5 pts.
✂️
Lissage altitude GPX
Cocher ✂️ Lisser l'altitude dans le formulaire applique une moyenne mobile ±3 points sur les altitudes GPX avant le calcul du D+ / D−. Réduit le bruit des capteurs barométriques (Garmin, Wahoo) qui génèrent des faux D+ importants sur plat. Fonctionne sur tous les formats GPX et FIT.
🔆
Wake Lock — écran allumé GPS
En mode 📍 Suivi GPS, la Screen Wake Lock API (navigator.wakeLock.request('screen')) maintient l'écran allumé pendant la sortie. Libéré automatiquement à l'arrêt du suivi. Compatible Chrome 84+, Edge 84+ et Android. Sur iOS Safari, le Wake Lock n'est pas encore supporté.
📏
Marqueurs kilométriques sur la carte
Bouton 📏 Km sur la carte Leaflet — affiche des repères tous les 5/10/20/50 km (espacement auto selon la distance totale). Labels noirs sur fond sombre, non interactifs. État persisté en localStorage.
📊
Répartition des conditions météo
Sous la légende du widget 🌤️ Conditions, trois barres horizontales montrent la répartition du tracé en % favorable / modéré / difficile. Calculé depuis les score_num de chaque point GPX analysé.
⏸️
Temps de pause dans l'ETA
Champ ⏸️ Pauses (min) dans le formulaire — ajoute les pauses prévues (café, col, ravitaillement) à la durée de route. L'ETA ajusté s'affiche dans le widget Conditions comme ⏸️ ETA + pauses. Calcul purement JS, sans impact sur l'analyse météo.
⭐
Départ optimal surligné dans la bande 24h
Dans le widget ⏱️ Météo heure par heure, la case de la meilleure heure de départ (calculée par le moteur de planning) est encadrée en doré avec un tag ⭐ Optimal — distincte de l'heure réelle de départ (encadrée en bleu).
📋
Copier les statistiques clés
Bouton 📋 dans la barre du haut (à côté du QR code) — copie dans le presse-papiers un résumé texte de l'analyse : nom GPX, distance, D+/D−, score météo, meilleur départ, vent max, plage de températures. Idéal pour partager rapidement dans un chat.
⏱️
Durée estimée de la sortie
Une ligne ⏱️ Durée route s'affiche dans le widget Conditions avec la durée de route estimée (hors pauses). Calculée depuis distance / vitesse — complète la ligne ⏸️ ETA + pauses si des pauses sont saisies.
📐
Pente maximale sur le tracé
Ligne 📐 Pente max dans le widget Conditions : pente montée max et descente max calculées sur fenêtres glissantes de 200 m le long du tracé GPX. Colorée en vert (≤ 8 %), orange (8–15 %) ou rouge (> 15 %).
🏔️
Météo au point culminant
Sur les parcours de montagne (sommet ≥ 800 m), une ligne 🏔️ Sommet affiche la température et le vent prévus au point le plus haut du tracé, colorée par score météo. Utile pour anticiper les conditions en altitude.
🎯
Marqueur de mi-parcours
Un marker ⌛ ½ violet est automatiquement placé au point médian du tracé sur la carte Leaflet. Le popup affiche les km parcourus, les km restants, le D+ restant exact (recalculé depuis l'altimétrie) et la météo à ce point.
💾
Sauvegarde des préférences
Les valeurs Vitesse, Poids et Pauses du formulaire sont automatiquement sauvegardées en localStorage à chaque modification et restaurées au prochain chargement de la page — plus besoin de ressaisir à chaque analyse.
🌬️
Vent net moyen
La composante face / dos du vent est moyennée sur tous les points du tracé. Un résultat négatif = vent dans le dos (favorable), positif = vent de face (pénalisant). Affiché en km/h avec code couleur dans le récapitulatif.
⚡
Puissance estimée
Estimation de la puissance mécanique moyenne (en watts) à partir de la physique du vélo : résistance aérodynamique (CdA 0,35), frottement (Crr 0,004) et puissance de montée (D+). Utilise votre poids + 9 kg pour le vélo.
💧
Humidité moyenne
L'humidité relative est moyennée sur les heures du parcours. Un taux > 85 % peut entraîner de la condensation tôt le matin, > 95 % indique un risque de brouillard et de visibilité réduite.
🌡️
Amplitude thermique
Si l'écart entre la température minimale et maximale du parcours dépasse 8 °C, une recommandation vestimentaire s'affiche : coupe-vent au-dessus de 13 °C d'écart, couches multiples au-delà de 20 °C.
🗺️
Type de parcours
Catégorie du profil basée sur le D+ moyen par km : 🛣️ Plat (< 7 m/km), 🌄 Vallonné (7–15), ⛰️ Montagneux (15–30), 🏔️ Alpin (> 30). Aide à calibrer l'effort et à anticiper les besoins en récupération.
🔄
Inverser le sens du parcours
Bouton 🔄 Inverser dans la zone GPX : retourne l'ordre des points du tracé (départ ↔ arrivée) avant l'analyse. Utile pour comparer aller et retour face au vent. Se réinitialise automatiquement si vous changez de fichier.
🎬
Survol — performances optimisées
Boucle RAF 60 fps améliorée : cache des éléments DOM (≈ 35 getElementById éliminés par frame), fond minimap statique mis en ImageData (tracé + markers dessinés une seule fois), profil altimétrique avec checkpoint O(20) au lieu de O(n), coordonnées GeoJSON pré-calculées et bearings smartSample pré-calculés (2× trig en moins).
📡
Résilience météo API
Si api.open-meteo.com est indisponible (5xx / timeout) : retry automatique après 3 s, puis bascule sur le CDN alternatif historical-forecast-api.open-meteo.com (données identiques), puis cache périmé en dernier recours. Une bannière ambre informe de la source utilisée.
📌
Survol Picture-in-Picture
Bouton 📌 Détacher dans les contrôles Survol — la carte 3D devient une fenêtre flottante 480×300 px en bas à droite, déplaçable par glisser-déposer. Permet de continuer à regarder le survol tout en scrollant vers les autres widgets. Bouton ✕ Rattacher ou second clic pour revenir en mode normal.
✨
Teaser automatique Survol
Dès qu'un GPX est chargé dans le Survol (via l'analyse ou import direct), une pré-visualisation cinématique se lance automatiquement en 4 plans (~9 s) : aperçu global → départ → mi-parcours → arrivée. Annulée automatiquement au clic sur ▶ Lancer ou ⏹ Stop.
👤
Compte personnel (sans email)
Bouton 👤 Compte dans la barre du haut : créez un compte avec un simple pseudo + mot de passe, sans email. À l'inscription, un code de récupération à usage unique est affiché — notez-le, il permet de retrouver l'accès si vous oubliez votre mot de passe. Vous pouvez aussi ajouter un email dans votre profil pour recevoir un lien de réinitialisation en cas d'oubli. Bouton 🚪 Déconnexion dans la barre une fois connecté. Conforme RGPD : 📥 Export de toutes vos données (JSON) et 🗑 Suppression définitive du compte depuis le menu Compte. Mot de passe stocké haché, jamais en clair. L'usage anonyme reste possible sans inscription.
📚
Bibliothèque GPX & dossiers
Une fois connecté, enregistrez vos parcours dans une bibliothèque personnelle (jusqu'à 200, fichiers GPX stockés côté serveur, hors web). La fenêtre 📚 Ma bibliothèque affiche vos parcours avec distance et D+, permet de les recharger en un clic (↻ ré-analyse) ou de les supprimer. Organisez-les en dossiers : créez/renommez/supprimez des dossiers et déplacez chaque parcours via un menu déroulant (supprimer un dossier n'efface pas les parcours, ils repassent en « Non classés »). Vous pouvez enregistrer le parcours analysé ou directement un itinéraire calculé via 🗺️ Calculer un itinéraire → 📚 Enregistrer dans ma bibliothèque.
🔥
Connexion Strava (10 places) & vignettes perso
La connexion Strava (bouton 📥 Importer depuis Strava / liaison de compte) donne accès à l'import d'activités, aux suggestions de parcours, aux segments KOM, au PMC… L'application Strava est plafonnée à 10 athlètes connectés (limite imposée par Strava aux applications non commerciales) : au-delà, la connexion renvoie une erreur « limite atteinte » — réessayez plus tard ou demandez la déconnexion d'un compte. Depuis le 01/07/2026, l'accès à l'API Strava requiert un abonnement Strava payant : un utilisateur sans abonnement Strava payant ne peut pas connecter son compte ni afficher ses activités dans l'application. Le widget 🤖 Coach virtuel s'affiche pour tout utilisateur ayant connecté son compte Strava (même sans créer de compte sur l'application) : il analyse ses propres performances. Le widget 🚴 VéloTaf reste réservé au propriétaire du site : il n'apparaît que lorsque son compte Strava est connecté et qu'il est identifié sur l'application avec son compte personnel « BUD38 ».
🛞
Pression des pneus par vélo
Dans 🔧 Gestion Vélos → 🛞 Pression des pneus : pression cible avant/arrière calculée selon la méthode Berto (chute de pneu ≈ 15 %), à partir du poids total, de la largeur de pneu et des jantes. Réglages ajustables : Montage (Chambre, Boyau, Tubeless, TPU — chacun avec sa propre majoration/minoration de pression selon le risque de pincement réel), Météo (Sec/Pluie), Type de jante (à crochets/Hookless, avec le plafond de sécurité ETRTO à 5 bar), Priorité (Confort/Équilibre/Perf) et Saison (Printemps/Été/Automne/Hiver — effet thermique sur la pression réelle de l'air). Des boutons +/- permettent d'ajuster manuellement chaque roue par pas de 1 psi (bar et psi toujours synchronisés). En Tubeless, une note indique la largeur de fond de jante recommandée pour le pneu choisi et compare aux jantes avant/arrière réellement entrées. Si un compte Strava est connecté, un sélecteur de vélo + bouton Enregistrer permet de garder un jeu de réglages différent par vélo, synchronisé sur votre compte (multi-appareil).
🔩
Usure des composants par vélo
Dans 🔧 Gestion Vélos → 🔩 Usure des composants : suivez la durée de vie de chaque pièce (chaîne, cassette, galets de dérailleur, pneus, plaquettes, disques de frein avant/arrière, câbles, plateaux, boîtier de pédalier, roulements de boîtier, guidoline, selle, tige de selle, roulement de direction…) selon le kilométrage — km au compteur saisi manuellement, ou km réels Strava si connecté. Si un compte Strava est connecté, un sélecteur de vélo + bouton Enregistrer garde un jeu de composants séparé par vélo (réinitialiser un vélo n'efface que ses propres réglages, jamais les autres). Un bouton 📷 Importer une photo permet d'associer une photo à chaque vélo. Tout est synchronisé sur votre compte (multi-appareil), avec repli en local si hors ligne.