프로젝트 소개

WattRoom은 Natron이 개발하고 AGPL-3.0 라이선스로 공개한 협업형 실내 사이클링을 위한 오픈소스 자체 호스팅 플랫폼이다. 실내용 훈련이 혼자 할 때 지루하다는 전제로, 가상 세상을 제공하기보다는 '동반자 의식'에 집중한다. 라이더는 훈련 파트너가 있는 방에 참여해 각자의 FTP에 맞게 조정된 동일한 워크아웃을 타며, 대화하고 서로를 보며 음악을 공유할 수 있다. 주요 기능 - 룸: 라이브 와츠, 심박수, 케던스가 하나의 대시보드에 함께 표시되며 룸 피드와 간격 타임라인을 제공하고, 음성 및 카메라는 원터치로 접근 가능하다. - 구조화된 워크아웃: 선별된 라이브러리와 편집기를 갖추고 있으며, BLE FTMS 스마트 트레이너에 대한 정밀 ERG 제어를 제공한다. 목표 강도는 각 라이더의 FTP에 맞게 조정되므로, 팀 전체가 어떤 수치를 가진 라이더라도 동일한 세션을 함께 탈 수 있다. - 게임 모드: 스프린트 클랙슨, 엘리미네이션, 왓트 골프, 백야드 램프 등 7가지가 있다. - 공유 줍박스: 한 룸에 하나의 동기화된 YouTube 사운드트랙. - 의미 있는 라이딩: 세션은 저장되며 .fit으로 내보내고 Strava에 업로드할 수 있으며 XP와 트로피를 획득할 수 있다. - 프라이버시: 메트릭은 룸 단위로 스코프되며 오디오/비디오는 절대 기록되지 않고, 기본적으로 룸은 비공개다. 하드웨어 및 브라우저 BLE FTMS를 지원하는 스마트 트레이너가 대상 하드웨어이며, 브라우저에서 Web Bluetooth를 통해 직접 연결한다. 이로 인해 현재 훈련 경로는 Chromium 전용이다. 데스크톱과 Android의 Chrome과 Edge가 지원된다. FTMS 이전 Wahoo 장치는 열린 백로그 항목으로 나열되어 있다. iOS 훈련 경로는 Safari가 Web Bluetooth를 구현하지 않아 존재하지 않으며, 프로젝트는 이를 oversight가 아닌 연구 기반 결정으로 문서화했다. 룸 자체는 모든 브라우저에서 열리며, 트레이너가 필요한 기능은 별도 읽기 전용 페이지 대신 게이트 처리된다. 개발에는 트레이너가 필요 없으며, 시뮬레이션 트레이너와 /dev/room에 완전한 모킹 룸이 제공된다. 기술 스택 및 배포 인메모리 룸 허브(룸당 하나씩 고루틴)를 갖춘 Go 서버, SvelteKit 단일 페이지 앱, PostgreSQL, 자체 호스팅 LiveKit으로 구성되며, 임베디드 프론트엔드가 포함된 단일 바이너리로 배송되고 단일 VM에서 하나의 compose 스택으로 배포된다. 개발 환경에는 Go 1.26+, Node 22+, pnpm, Docker가 필요하다. make 타겟을 통해 Postgres와 LiveKit을 컨테이너로 실행하고, 8080 포트에서 핫 리로드되는 서버를, 5174 포트에서 Vite 개발 서버를 실행하며 이 서버는 /api와 /ws를 프록시한다. 문서 및 릴리스 아키텍처 및 사양 문서는 제품 및 아키텍처 결정을 기록한 설립 문서, 연구 문서, 번호 매긴 ADR과 함께 배치되어 있다. 릴리스는 하루에 여러 차례 진행된다. 릴리스는 항상 이미 머지된 변경사항을 조금 추가하는 방식으로만 이루어지며, 롤백하려면 데이터베이스를 건드리지 않고 실행 중인 이미지를 이전 태그로 다시 가리키면 된다.