这个项目能做什么
WattRoom是一个开源、可自托管的协作室内骑行平台,由Natron开发,采用AGPL-3.0许可发布。其核心理念是:独自进行室内训练十分枯燥,因此平台不虚拟世界渲染,而是强调在场感——骑行者与同伴加入同一房间,共同完成基于各自FTP缩放的同一套间歇训练计划,并可在骑行过程中通话、互见、共享音乐。
功能概览
- 房间:一个仪表盘上集中展示实时功率、心率和踏频,附带房间动态流和间歇训练时间线,语音和视频一键即达。
- 结构化训练课程:拥有精选课程库及配套编辑器,可对BLE FTMS智能 trainers 进行精确的ERG控功模式控制。目标阻力根据每位骑手的FTP自动缩放,无论水平差异,全员可同课共练。
- 游戏模式:提供七种玩法,包括冲刺警报、淘汰赛、Watt Golf和Backyard Ramp等。
- 共享歌单:每个房间配备一个同步YouTube音轨。
- 数据留存:训练记录可保存,支持导出为.fit格式、上传至Strava,并可积累经验值和成就徽章。
- 隐私保护:所有数据仅在本房间内可见,音视频从不录制;房间默认私密。
硬件与浏览器支持
核心硬件为支持BLE FTMS协议的智能 trainers,通过Web Bluetooth由浏览器直连通信。这意味着当前训练链路仅支持Chromium内核浏览器:桌面端Chrome和Edge,以及Android设备。未支持FTMS的旧款Wahoo设备已被列入待办事项。iOS端暂无训练路径,原因是Safari不支持Web Bluetooth;项目方将此明确记录为研究后的决策而非疏漏。房间本身在任何浏览器中均可打开,需要trainer的功能则相应隐藏,而非提供单独的只读页面。开发环境无需真实硬件:项目内置了模拟trainer及/dev/room路径下的完整Mock房间。
技术栈与部署
后端采用Go语言编写,每个房间对应一个goroutine管理内存中的房间Hub;前端为SvelteKit单页应用;数据库使用PostgreSQL;音视频信令服务为自托管LiveKit。整体打包为单个二进制文件(内含前端资源),通过单一compose堆栈部署在单台VM上。开发环境要求Go 1.26+、Node 22+、pnpm和Docker;make命令可启动容器化Postgres和LiveKit,热重载服务器监听8080端口,Vite开发服务器监听5174端口,并将/api和/ws请求代理至后端。
文档与发布流程
架构文档和规范说明与一份创始文档并存,后者记录了产品决策和架构决策,另附有研究文档和编号的ADR(架构决策记录)。每日多次发布新版本:每次发布仅包含一个已合并的小改动,回滚只需将运行镜像重新指向上一版本标签,无需触碰数据库。
评论
0 评分人数达到10人后显示
登录后参与讨论。