BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2,或任何藍牙控制器搭配 MyWhoosh、Rouvy、Zwift 等。可於 iOS、Android、Windows 與 macOS 免費試用。
AI 翻譯
尚未偵測到更新。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)