Skip to content

WattRoom

Train together, not alone.

Discord for indoor cycling — structured workouts your whole crew rides at once, with voice, camera, game modes and a shared jukebox. No virtual world: your watts are the game.

License: AGPL-3.0 Go Svelte 5 LiveKit

Architecture · Spec · Founding doc · Contributing · built by Natron

Like the idea? Star the repo — it helps other pain-cave dwellers find it.

A live WattRoom session: six riders on a threshold block, each rider's watts, w/kg and execution score on one dashboard next to the interval timeline and the room's chat

Six riders, one timeline. Every target scales to the rider's own FTP, so the crew rides together whatever their numbers are.

Why

Indoor training is boring alone. Zwift fixes that with a game world; WattRoom fixes it with presence — you hop into a room with your training buddies, everyone rides the same workout scaled to their own FTP, you talk, you see each other, you share music. A group ride for pain caves.

What's inside

🚴 Rooms — live watts, HR and cadence on one dashboard, voice & camera always there 📈 Structured workouts — curated library + editor, precise ERG control over BLE FTMS
🎮 Seven game modes — sprint klaxons, eliminations, Watt Golf, Backyard Ramp, … 🎵 Shared jukebox — one synced YouTube soundtrack per room
🏅 Rides that count — every session saved, .fit export, Strava upload, XP & trophies 🔒 Private by default — metrics room-scoped, AV never recorded

Screens

The sprint moment The workout library
A sprint moment: riders ranked live by w/kg The workout library, every target scaled to your FTP

The way in — on a desk, and on the phone that lives on the bars:

WattRoom landing page WattRoom on a phone

Quick start (dev)

Requirements: Go 1.26+, Node 22+, pnpm, Docker.

make infra        # Postgres + LiveKit (dev mode) in containers
make dev-server   # terminal 1: Go server with hot reload on :8080
make dev-web      # terminal 2: Vite dev server on :5174 (proxies /api + /ws)

No smart trainer needed — the simulated trainer covers development, and /dev/room is a full mock room. See CONTRIBUTING.md.

Hardware & browsers

A smart trainer speaking BLE FTMS (plus Wahoo legacy), talked to directly from the browser via Web Bluetooth — which is Chromium-only: Chrome/Edge on desktop and Android. No iOS path (Safari won't implement Web Bluetooth — a researched decision, not an oversight); the read-only spectator view works in any browser.

Stack

Go server (in-memory room hub, one goroutine per room) · SvelteKit SPA · PostgreSQL · self-hosted LiveKit · single binary with embedded frontend, deployed as one compose stack on a single VM. Every product and architecture decision is recorded in WATTROOM.md and docs/decisions/; the research behind them in docs/RESEARCH.md.

License

AGPL-3.0 — © Natron

About

Train together, not alone. Collaborative indoor cycling: structured workouts, FTMS trainer control, shared rooms with live metrics, voice, camera and a synced jukebox.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages