Go back to projects

Case Study

SpinningFlow — A Pet Project Born from a Spinning Class

Turn your playlists into structured bike spinning workouts. Sync your music, set your goals, and ride to the beat. How I built a bike spinning workout app with Elixir, Phoenix LiveView, and a healthy disregard for doing things the easy way.

Client
Stephan Gensch - Digital Transformation & IT-Consulting
Year
Service
Full-Stack Engineering, Music Service Integration
SpinningFlow — A Pet Project Born from a Spinning Class
Software Engineering E-Health Agile Methodologies Design Thinking Innovation Management Operations Management Product Management Phoenix Elixir/Erlang JavaScript/TypeScript elixir phoenix fitness indiedev cycling spinningflow

spinningflow.net · v0.10.0 · Built with Elixir/Phoenix


What is it?

I started spinning classes some months ago, and while I am having fun, I was missing some more guidance on the sessions. Yeah, the coaches tell a bit about their training plan — but I am a visual person.

Also, music plays an important role in my life (I guess this is true for everyone, right?) and the combination of music and sports is just special. I want my music, and I want to ride to it. RPM, segments, resistance — driven by beats!

So I built SpinningFlow. All roles on me — planned, designed, built, deployed. One day, domain and all.

Connect your Spotify account, pick a playlist, set your fitness level and goal, and get a timed workout plan with cadence and resistance cues synced to the music. Play it in real time, with live segment transitions, a countdown timer, and your tracks playing as you ride.


Screenshot from 2026-05-02 14-35-34 Caption: A workout plan — segments visualised by duration and intensity, driven by your playlist’s BPM.


How it works

SpinningFlow takes your Spotify playlist and builds a structured workout out of it:

  • Warm-up — the first track, low cadence, easy resistance
  • Work segments — intervals, climbs, or steady efforts based on your goal and BPM
  • Recovery — short recovery blocks between songs
  • Cool-down — the last track, wind down

Cadence (RPM) follows the actual BPM of each song. Harder tracks push the watts up; slower ones give your legs a rest. You pick the difficulty and goal — the plan adapts.


Screenshot from 2026-05-02 14-35-44 Caption: The live player — current segment, cadence target, countdown, and your music playing in sync.


Getting in

SpinningFlow is invite-only for now. Every week a fresh batch of codes goes live on the homepage — 12 keys, first come first served. Grab one and you’re in. No code? Hit me up directly.


How it got here — key milestones

The foundation (v0.1–0.2) — User accounts, authentication, and the first working plan builder. Spotify OAuth to import playlists and tracks. Generate a plan, see it laid out with segments and a chart.

The player (v0.3–0.4) — The live workout player: real-time segment transitions, a countdown timer, and Spotify playback running in sync. RPM derived from track BPM. Warm-up and cool-down added automatically.

Fitness-aware plans (v0.5–0.6) — Fitness level setting (beginner, intermediate, advanced). Generated segments now respect your level — watts stay within realistic range. Manual BPM entry and segment type overrides per track.

Smarter workouts (v0.7) — Intensity based on difficulty and goal, not just BPM. Interval segments push RPM; climbs push resistance — never both at once. Real watt values from the power table. A regenerate button to re-sync from updated playlists.

The invite system (v0.8) — Weekly invite keys on the homepage. Key reservation (5-minute hold while you sign up). Taken keys show fun reactions instead of the code. Automated weekly key roll via Oban cron.

Polish and history (v0.9–0.10) — Ride history with stats and bulk-delete. Account deletion. Per-playlist sync with real-time progress. Smarter cadence (actual BPM, not fixed values). Changelog modal in-app. Security hardening. Stability fixes.


Screenshot from 2026-05-02 14-35-22 Caption: Ride history — all your past sessions and stats.


What’s next

The Spotify integration is live for playback, but the deeper music analysis pipeline — audio features, BPM-driven auto-plan generation — is still coming. That’s the marquee feature. More to come.

Want to try it? spinningflow.net — or hit me up for a code.