ferlogs

~/work/moodcycling

Client · Indoor cycling · Live

Moodcycling

Online indoor cycling classes: subscription platform with recurring billing, video delivery and a clean-architecture backend, still maintained by me.

Moodcycling, as it looks today

What it is

a studio, unbundled

Indoor cycling is a class you buy, and the difference from a video library matters: the product had to feel like turning up somewhere at a time, with an instructor waiting.

What was delivered is a full subscription platform: sign-up, plans, recurring billing, the class catalogue, and video delivery that holds up on a living-room connection, plus a companion web app.

Moodcycling home
The classes, front and centre.
Plans and pricing
Two plans, monthly or annual, cancel whenever: every one of those words is a rule the billing code has to honour.

How it is built

the backend is the product here

Anything that touches money outlives the frontend it was built for, so the backend is a clean-architecture NestJS service over Postgres with Prisma: the subscription rules sit in a domain layer that does not know what Stripe is, and the payment provider is an adapter behind it.

That sounds like ceremony until the first pricing change, or the day the provider's webhook arrives twice for the same invoice. Auth is Clerk, payments are Stripe, and video is Mux: three problems that are somebody else's core business and were never going to be mine.

Building something with subscriptions?

Recurring billing, access control and video delivery are the three parts that get expensive when they are built in a hurry. I took this one from an empty repository to production and I still maintain it.

Tell me what you are building