What it is
a studio, unbundledIndoor 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.
How it is built
the backend is the product hereAnything 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.
- NestJS
- Prisma
- PostgreSQL
- Clerk
- Stripe
- Mux
- Role
- Engineering, delivered for the client
- Stage
- Live, in production
- Scope
- Platform, billing, video, web app
- Today
- Still maintained by me
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.