このプロジェクトについて

WattRoomは、Natronによって構築されAGPL-3.0の下でリリースされた、コラボ型室内サイクリング向けのオープンソース・セルフホスト可能プラットフォームである。 Indoor training is boring alone」という前提に立ち、仮想世界を提供する代わりに「存在感」を重視し、ライダーがトレーニングパートナーと一緒にルームに入り、各ライダーのFTPにスケーリングされた同じワークアウトを走り、会話したり顔を見せ合い、音楽を共有しながらライドできることを標榜している。 カバーする機能 - ルーム:ライブワット、心拍数、ケイデンスが1つのダッシュボードに表示され、ルームフィードとインターバルタイムラインが用意され、音声・カメラはワンタップで利用可能。 - 構造化ワークアウト:キュレートされたライブラリとエディターを備え、BLE FTMSスマートトレーナーに対する正確なERGコントロールを実現。ターゲット値は各ライダーのFTPに応じてスケーリングされるため、クルー全員が数値に関わらず一つのセッションを共に走れる。 - ゲームモード:スプリントクラクション、エリミネーション、Watt Golf、Backyard Rampなど7種類。 - シェアドジュークボックス:ルームごとに同期されたYouTubeサウンドトラック。 - 意味あるライド:セッションは保存され、.fit形式でエクスポートでき、Stravaにアップロードされ、XPとトロフィーを獲得できる。 - プライバシー:メトリクスはルームスコープで、音声・ビデオは記録されない。ルームはデフォルトでプライベート。 ハードウェアとブラウザ ターゲットハードウェアはBLE FTMSに対応したスマートトレーナーであり、ブラウザから直接Web Bluetooth経由で通信する。そのため現在、トレーニング対応経路はChromium専用に限定される——デスクトップおよびAndroid上のChromeとEdge。FTMS非対応のWahoo機材についてはオープンのバックログ項目としてリストされている。iOS向けトレーニング経路はSafariがWeb Bluetoothを実装していないため存在しないが、これは見落とし而非研究に基づく判断として文書化されている。ルーム自体はあらゆるブラウザで開くことができ、トレーナーが必要な機能はゲートされており、個別の読み取り専用ページとはならない。開発においてはトレーナーは不要で、シミュレーテッドトレーナーと/dev/roomにおけるフルモックルームが提供される。 スタックとデプロイメント Goサーバー(ルームあたりにgoroutineを持つインメモリルームハブ)、SvelteKitシングルページアプリ、PostgreSQL、セルフホストLiveKitから構成され、埋め込みフロントエンド付きの単一バイナリとして.shipされ、単一VM上でcompose stack一式としてデプロイされる。開発にはGo 1.26+、Node 22+、pnpm、Dockerが必要。makeターゲットによりPostgresとLiveKitがコンテナ内で起動し、ホットリロードサーバーがポート8080で、Vite開発サーバーがポート5174で起動し、/apiおよび/wsをプロキシする。 ドキュメンテーションとリリース アーキテクチャ仕様書やADRsは、プロダクトおよびアーキテクチャの意思決定を記録した創設ドキュメント、研究ドキュメントと共に納められている。リリースは1日に複数回切断される:リリースは常にすでにマージされた小変更のみを追加し、ロールバックはデータベースに触れることなく実行中のイメージを前のタグに向けるだけで完了する。