// project_case_study
RULLO
An offline, open-source indoor-cycling app for Linux, macOS and Windows. It controls your smart trainer, rides real elevation profiles and structured workouts, and records every ride to a .fit file. No account, no cloud, no subscription.

The problem
Indoor training apps have moved to monthly subscriptions, mandatory accounts and always-online clouds. Riders who just want to follow a workout on their own trainer pay every month for features they don't use, and their ride data lives on someone else's server.
What we shipped
- Smart-trainer control over Bluetooth (FTMS, Tacx FE-C, Wahoo KICKR on older firmware) and ANT+ FE-C, plus heart-rate straps, cadence sensors and power meters.
- A deterministic physics model that turns your power into speed over real elevation profiles. Import any GPX route.
- Structured workouts in ERG mode (.zwo, .erg, .mrc) and a built-in FTP ramp test that applies your new FTP in one click.
- Ride summary with NP, IF, TSS, laps and zones; history, power curve and training load (fitness, fatigue, form).
- A hand-written FIT encoder: export .fit or .tcx and upload straight to Strava or intervals.icu.
- Standalone builds for Linux, macOS and Windows, tested in CI on all three.
Stack
Python 3.12, asyncio, bleak (Bluetooth LE), openant (ANT+), a self-contained offline web UI, PyInstaller builds and GitHub Actions CI on three operating systems.
← Back to What We've Shipped