BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2 或任何藍牙控制器,搭配 MyWhoosh、Rouvy、Zwift 等。iOS、Android、Windows、macOS 均可免費試用。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
App sport (PWA installable sur iPhone) : Courses, Saison (phases d'entraînement) et Mesures (poids, FTP vélo, mensurations). HTML / CSS / JavaScript purs (modules ES), sans build. Issue de la partie sport de Carnet. Données partagées avec Carnet Allure utilise la même base Firebase que Carnet (nœud app) et ne lit / n'écrit que trois tranches : • races : courses ; • objectives.seasonPhases : phases de la saison ; • bodyMetrics : poids, FTP, mensurations.查看完整 README ↗
Anciennement Allure : le dépôt, les clés de stockage local (allure_…) et les données Firebase gardent ce nom, rien n'est à migrer.
App sport (PWA installable sur iPhone) : courses, phases d'entraînement et mesures (poids, FTP vélo, mensurations).
Un seul calendrier, quatre échelles, choisies en haut (Année, Mois, Semaine, Jour) ou d'un geste : écarter deux doigts plonge vers l'endroit touché, pincer recule (sur ordinateur : pincement du trackpad). Toucher un mois, une semaine (S…) ou un jour l'ouvre ; glisser à gauche / à droite (ou ‹ ›, ou glissement horizontal au trackpad) passe à l'année, au mois, à la semaine ou au jour suivant / précédent ; « Aujourd'hui » y revient.
Types de phase : le menu « Phase » de l'éditeur (lien « Modifier la liste ») et ⚙︎ › Réglages ouvrent la liste des types : ajouter, renommer (nom et nom court), changer la couleur, la charge (hauteur des barres de l'année) et le conseil, classer dans « Préparation spécifique », réordonner ou retirer. Un type retiré qui sert encore à des phases est seulement masqué du menu : ces phases gardent leur nom et leur couleur.
Barre du bas : Saison (le zoom), Suivi (courbes du poids et de la FTP, mensurations, historiques), Analyse (export RunGap) et Ajouter (course, phase, poids, test FTP, mensurations) : toute nouvelle mesure se saisit depuis Ajouter. Depuis l'échelle Jour, la course ou la phase ajoutée prend la date du jour affiché ; une course enregistrée s'ouvre sur son jour.
Onglet Analyse : « Importer l’export RunGap » lit le CSV complet exporté de RunGap (toutes les séances, tous sports). À chaque mise à jour, on redépose le fichier entier : seules les activités plus récentes que la dernière connue sont ajoutées ; les doublons Suunto / Garmin (départs à moins de 10 min) sont fusionnés. Les activités restent sur l’appareil (allure_activities, ~100 Ko pour 1 200 séances) : le nœud Firebase partagé avec Carnet n’accepte pas de nouvelle tranche.
Deux affichages : Bilan et Plan. En Bilan, la période (menu, ‹ ›) et le sport (menu) restent collés sous l'en-tête au défilement.
Bilan, périodes : Mois, 3 mois, 6 mois, 12 mois, Année, Saison (groupe de phases qui se suivent, coupé après une phase de transition), avec ‹ › pour remonter dans le temps.
objectives.analysis (synchronisés).Plan (inspiré de Frive) : phase de la semaine choisie (semaine x sur y, objectif et J−, cible et réalisé), volume cible par semaine (référence × facteur de la phase, une semaine sur quatre allégée en foncier et en spécifique ; réalisé superposé, toucher une barre affiche la semaine) et liste des phases en cours et à venir : toucher une phase ouvre sa fiche (dates, type, note, suppression), « Ajouter une phase » en crée une à la main.
Import : séparateur (virgule, point-virgule, tabulation) et encodage (UTF-8, UTF-16) détectés. Une erreur d'affichage d'une vue n'interrompt jamais la synchronisation ni l'import.
Ajouter › Phases automatiques (ou ⚙︎ › Réglages) : chaque course à venir est classée Objectif, Préparation (défaut) ou Ne compte pas (aussi dans la fiche de la course, champ « Importance » ; stocké dans objectives.racePriority). Seuls les objectifs placent les phases, à rebours : foncier, spécifique volume puis intensité (6 semaines), affûtage de 7 à 14 jours selon distance et D+ (≥ 60 km ou ≥ 2 500 m D+ : 14 j ; ≥ 21 km ou ≥ 1 000 m : 10 j), récupération après chaque objectif (raccourcie si le suivant est proche) et coupure de 2 semaines après le dernier. « Recalculer à partir du » (aujourd'hui par défaut) : les phases d'avant cette date ne changent pas. Les phases faites à la main (champ origin: 'manual' ; les anciennes sans origin sont manuelles sauf note « Auto · … ») qui touchent la période sont listées, cochées par défaut : une phase cochée reste telle quelle et le plan se place autour (bout de moins d'une semaine rattaché à la phase précédente), une décochée est recalculée. « Appliquer ce plan » (confirmation) : la phase en cours s'arrête la veille ou est prolongée si le plan commence par le même type.
HTML / CSS / JavaScript purs (modules ES), sans build. Issue de la partie sport de Carnet.
Cadence utilise le même compte que Mon Garage, Ma Maison, Carnet et Mon budget (projet Firebase test-e27e9, connexion e-mail / mot de passe).
Cadence partage le nœud de Carnet users/<uid>/carnet et n'y lit / n'écrit que trois tranches :
races : courses ;objectives.seasonPhases : phases de la saison ;objectives.phaseTypes : liste des types de phase, si elle a été modifiée (sinon la liste d'origine) ;bodyMetrics : poids, FTP, mensurations.Les autres données (agenda, tâches, planning de la semaine, garage_alerts, maison_alerts, marqueur migrated…) appartiennent à Carnet et aux autres apps et ne sont jamais réécrites. Une course ou une phase créée dans Cadence apparaît donc aussitôt dans le planning de Carnet.
Au premier instantané du nœud après connexion :
migrated → fonctionnement normal ;dashboard---projet, nœud app, délai max 8 s) et copie dans le nouveau nœud toutes les tranches de Carnet (dashboard, notes, theme, families, plans, objectives, races, bodyMetrics) qui n'y sont pas déjà, avec migrated: { from, at, by: 'allure' } ; comme le fait Carnet, l'ancien thème par défaut dark de Carnet est transféré en auto ;Tant que cet appareil n'a pas reçu le nœud (migré) du compte connecté, l'état local peut être vide ou périmé : enregistrer une seule course écraserait la liste complète partagée avec Carnet. Les modifications sont donc refusées, sauf :
allure_synced_once = uid du compte) : les modifications hors ligne sont envoyées à la reconnexion.Aucune règle à publier : le projet test-e27e9 autorise déjà chaque compte à lire et écrire users/<son uid>/… (tout nouveau nœud y est couvert).
database.rules.json contient désormais le verrou de l'ancienne base publique dashboard---projet (.read / .write à false), identique à celui du dépôt Carnet : à publier dans la console Firebase de dashboard---projet une fois que Carnet et Cadence ont migré les données sur tous les appareils. Ne jamais republier l'ancienne version de ce fichier (base lisible et modifiable par n'importe qui).
Style minimaliste (anthracite, cartes pleines), couleur Braise (dégradé orangé → rouge vif), également couleur des courses dans le calendrier ; chaque type de phase a sa propre teinte franche (bleu, indigo, violet, magenta, jaune, vert, gris par défaut, modifiable). Bouton ⚙︎ › Réglages : thème Auto (suit le réglage clair / sombre de l'iPhone, par défaut), Sombre ou Clair, mémorisé sur l'appareil. Un ancien choix « Sombre » (ancien défaut) devient « Auto » une seule fois ; « Clair » est conservé. Le thème est appliqué avant le premier rendu (pas de flash).
Icône Cadence (icon.svg, déclinée en PNG ; aussi logos/cadence.svg) : trois barres qui montent comme la charge d'entraînement, la blanche pour la coupure avant la course.
index.html vue Zoom, Suivi, barre du bas, connexion, feuilles de saisie et Réglages
css/ jetons, composants, vues, allure.css (style, palettes, connexion)
js/core/ store (3 tranches), schéma, saison, dates
js/services/ Firebase (compte, synchro par tranche, migration), stockage local
js/ui/ thème, connexion, modales, pastille de synchro, toasts
js/views/ zoom (calendrier 4 échelles), races, season et phase-types (éditeurs), metrics (Suivi)
js/features/ export calendrier .ics, mannequin des mensurations
python3 -m http.server 8000
puis http://localhost:8000.