OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Sortez du peloton, gardez les petites routes. Application web (installable sur iPhone et Android) qui propose des boucles et itinéraires de vélo de route adaptés à ta séance, au vent du jour et loin des grands axes, avec un carnet de cols.查看完整 README ↗
Sortez du peloton, gardez les petites routes.
Application web (installable sur iPhone et Android) qui propose des boucles et itinéraires de vélo de route selon le dénivelé voulu, au vent du jour et loin des grands axes, avec un carnet de cols.
js/services/road-profile.js, dérivé de fastbike-verylowtraffic) : pistes, sentiers et revêtements non asphaltés quasi interdits, trafic évité selon le niveau Standard, Peu de trafic ou Très peu de trafic. Le profil est envoyé au serveur BRouter ; s'il est indisponible, l'app se rabat sur les profils intégrés et le signale.
Les routes aux deux niveaux de trafic mesuré les plus élevés (quasiment jamais atteints par une rue de village, presque toujours par un centre de grande ville type Besançon) sont davantage pénalisées, pour contourner plus franchement ces centres-villes sans pénaliser les petites routes traversant les villages.echappee-sauvegarde-AAAA-MM-JJ.json (profil, favoris, cols faits, réglages) à garder dans Fichiers ou iCloud Drive ; « Restaurer une sauvegarde » le relit, après confirmation, sur le même appareil ou un autre. Chaque personne qui installe l'app a ses propres données, stockées uniquement sur son téléphone.Tout est gratuit et sans clé d'API : BRouter, Open-Meteo, Photon (recherche de lieux), tuiles Esri / OpenStreetMap / CyclOSM / OpenTopoMap / Waymarked Trails. Les données personnelles (profil, favoris) restent dans le navigateur.
L'onglet Cols rassemble environ 160 montées routières : Alpes du Nord, Alpes du Sud et Provence, Alpes suisses, Alpes italiennes, Jura, Vosges et Pyrénées (js/data/cols.js).
Les chiffres sont indicatifs (versant indiqué) : vérifie le profil exact avant une sortie engagée.
L'onglet Courses rassemble 123 cyclosportives et granfondos (js/data/races.js, mise à jour à la main) : la sélection d'origine, complétée en octobre 2026 d'après les calendriers 2026 de finishers.com, velo-cyclosport.com et Miles Republic (Thonon Cycling Race, Megève Mont-Blanc, GF Col de la Loze, L'Ariégeoise, UCI Granfondo Vosges, La Volcane, etc.). Elles sont triées par date avec un intercalaire par mois, filtrables par région (Bourgogne-Franche-Comté ; Savoie, Haute-Savoie, Isère & Ain ; Provence, Alpes du Sud, Drôme & Ardèche ; Auvergne & Massif central ; Pyrénées ; Grand Est & Nord ; Ouest ; Île-de-France & Centre ; Nouvelle-Aquitaine ; Occitanie & Corse ; Suisse) et par recherche (nom ou ville). Les 12 épreuves suisses (Tour des Stations, Alpenbrevet, Granfondo San Gottardo, Cyclotour du Léman, etc.) ont été ajoutées en octobre 2026 d'après cycliste.ch, velo-cyclosport.com et Swiss Cycling.
Autour de : tri par distance (à vol d'oiseau) depuis le départ choisi dans « Sortie », ou depuis Ma position (géolocalisation), avec un curseur de rayon de 25 à 575 km (au maximum : toute la France). Chaque course affiche sa distance. ✓ Mes courses : n'affiche que les courses envisagées, c'est-à-dire mises en surbrillance (présélectionnées, envoyées à Cadence ou marquées avec le bouton rond) ; le bouton indique leur nombre. Pour les épreuves ajoutées, la date de l'édition 2027 est estimée au même jour de la semaine que l'édition 2026 (à vérifier, modifiable avant d'ajouter) et le bouton « Rechercher le site » ouvre une recherche web de l'épreuve.
Une étoile, un bouton. L'étoile à côté du nom présélectionne une course pour la saison (étoile pleine, cadre jaune) : elle reste sur cet appareil uniquement et n'est envoyée nulle part ; un nouvel appui la retire. L'icône calendrier + ajoute la course au planning de l'app Cadence (et donc de Carnet, qui partage les mêmes données) puis passe au vert. Les deux sont indépendants : rien ne part vers Cadence sans l'icône calendrier.
L'envoi passe par le compte Cadence (même compte e-mail / mot de passe que Carnet, Mon Garage, Ma Maison et Mon budget), à connecter une fois dans Profil › Compte Cadence ; dans le navigateur, une session déjà ouverte dans Cadence est reprise. Seule la liste races du compte est modifiée, par une transaction : les autres données de Cadence et de Carnet ne sont jamais réécrites et une course déjà présente (même nom, même date) n'est pas dupliquée. Si le compte n'a pas encore été préparé par Cadence (première ouverture), rien n'est écrit et un message invite à ouvrir Cadence une fois. La distance chiffrée est à préciser dans Cadence. Détail dans js/services/cadence-sync.js.
✓ Mes courses affiche les courses étoilées et celles déjà envoyées à Cadence.
L'onglet Atelier regroupe deux calculateurs, sans aucun service externe (js/core/tools.js, js/ui/atelier.js) :
Sur le profil d'une boucle, glisser le doigt (ou la souris, ou les flèches du clavier) place un repère jaune sur la carte et affiche le kilomètre, l'altitude, la pente et le dénivelé déjà fait. Sur téléphone, la carte flotte en haut de l'écran pendant le glissement.
Dans l'onglet Profil, le bouton « Synchroniser mes mesures » reprend automatiquement le FTP et le poids depuis les dernières valeurs enregistrées dans l'app Cadence, onglet Suivi — lecture seule, avec le même compte que l'envoi des courses (Profil › Compte Cadence). Le bouton reste volontairement générique (il ne nomme pas Cadence) : il parlera à tout le monde, y compris à qui n'utilise pas cette app.
Détail dans js/services/cadence-sync.js.
Pour préparer une traversée ou un cyclo-camping : indique un départ, une arrivée (et d'éventuels points de passage) et un nombre de jours (2 à 10). L'app calcule un seul itinéraire point à point avec BRouter, puis le découpe automatiquement en étapes de distance à peu près égale (js/core/trip.js). Pour chaque étape : distance et dénivelé positif ; export GPX séparé (une étape = un fichier à charger sur le GPS ou l'app du jour), et export de l'itinéraire complet en un seul fichier. Contrairement aux modes Boucle et Aller simple, ce mode ne simule pas le vent (ni heure de départ, ni créneau favorable) : il privilégie distance, dénivelé et qualité de route, qui restent pertinents plusieurs jours à l'avance.
Interface sombre par défaut (le thème clair ne s'active que s'il est choisi avec le bouton soleil), épurée : pas de textes d'aide superflus, cartes sans bordure sur fond très sombre, « Comment ça marche » replié dans le Profil, cartes de course compactes (date, distance depuis le départ, ajout et lien sur une seule ligne).
Jaune maillot (#FFD400) sur gris bitume (#17181C), titres en Barlow Condensed italique, texte en Barlow (polices sous licence SIL OFL, fonts/OFL.txt, servies par l'app pour fonctionner hors ligne).
main, dossier / (root), puis Save.https://benjbepoix-stack.github.io/parcours-velo/.python3 -m http.server 8080 # ou : npm start
# puis http://localhost:8080
npm test
Les tests couvrent le moteur de calcul (js/core/ride.js) : géométrie, modèle de vitesse, vent, score, analyse des routes, créneaux, simplification et GPX. Ils tournent aussi à chaque push (GitHub Actions).
index.html Squelette de l'app
css/app.css Styles (thèmes clair / sombre)
js/app.js Interface : formulaire, résultats, favoris, profil
js/data/cols.js Catalogue des cols et top 10
js/core/ride.js Moteur : géométrie, boucles, physique, vent, score, GPX (sans DOM)
js/core/planner.js Génération et classement des boucles
js/core/trip.js Découpage d'un itinéraire en étapes (mode « Plusieurs jours »)
js/core/dates.js Dates locales
js/services/ BRouter (+ profil vélo de route), Open-Meteo, Photon, stockage local
js/ui/ Carte Leaflet, graphiques SVG, icônes
vendor/leaflet/ Leaflet 1.9.4 (licence BSD-2)
sw.js Service worker (hors ligne)
tests/ Tests du moteur (node --test)