À propos du projet

WattRoom est une plateforme open-source et auto-hébergeable pour le cyclisme indoor collaboratif, développée par Natron et publiée sous licence AGPL-3.0. Son principe est que l'entraînement intérieur est ennuyeux quand on est seul : au lieu de proposer un monde virtuel, WattRoom mise sur la présence. Les coureurs rejoignent une salle avec leurs partenaires, effectuent le même entraînement adapté au FTP de chacun, et peuvent discuter, se voir et partager de la musique pendant l'effort. Ce qu'il couvre - Salles : watts, fréquence cardiaque et cadence affichés ensemble sur un tableau de bord partagé, avec fil d'actualité de la salle, timeline des intervalles, et accès instantané à la voix et à la caméra. - Entraînements structurés : bibliothèque curatée et éditeur intégrés, avec contrôle ERG précis des entraîneurs intelligents BLE FTMS. Les cibles sont mises à l'échelle selon le FTP de chaque coureur, permettant à un groupe de faire une même séance malgré des niveaux différents. - Modes de jeu : sept modes disponibles, dont klaxons de sprint, éliminations, Watt Golf et Backyard Ramp. - Jukebox partagé : une playlist YouTube synchronisée par salle. - Sorties qui comptent : les séances sont enregistrées, exportables en .fit, téléchargeables sur Strava, et rapportent XP et trophées. - Vie privée : les métriques sont limitées à la salle, et l'audio/vidéo n'est jamais enregistré ; les salles sont privées par défaut. Matériel et navigateurs Un entraîneur intelligent compatible BLE FTMS est le matériel cible, contrôlé directement depuis le navigateur via Web Bluetooth. Le chemin d'entraînement est donc aujourd'hui limité à Chromium : Chrome et Edge sur ordinateur et Android. Les anciens modèles Wahoo non-FTMS figurent comme tâche ouverte. Il n'existe pas de chemin iOS, Safari ne supportant pas Web Bluetooth ; le projet documente ce choix comme une décision réfléchie. La salle reste accessible dans n'importe quel navigateur, les fonctionnalités nécessitant un entraîneur étant simplement désactivées plutôt que masquées par une page en lecture seule. Pour le développement, aucun entraîneur n'est requis : un entraîneur simulé et une salle mock complète sont disponibles sur /dev/room. Architecture et déploiement Serveur Go avec un hub de salles en mémoire (un goroutine par salle), application single-page SvelteKit, PostgreSQL et LiveKit auto-hébergé, le tout embarqué dans un seul binaire avec un frontend intégré et déployé via une stack Compose sur une seule machine virtuelle. Le développement requiert Go 1.26+, Node 22+, pnpm et Docker ; les cibles make lancent Postgres et LiveKit dans des conteneurs, démarrent le serveur en mode hot-reloading sur le port 8080, et lancent le serveur de développement Vite sur le port 5174 qui proxy les requêtes /api et /ws. Documentation et versions Les documents d'architecture et de spécification côtoient un document fondateur enregistrant les décisions produit et architecturales, un document de recherche et des ADR numérotés. Les versions sont publiées plusieurs fois par jour : une release n'ajoute jamais qu'un petit changement déjà fusionné, et revenir en arrière consiste à pointer l'image en cours d'exécution vers le tag précédent sans toucher à la base de données.