Members.
Independent gyms run on a patchwork of spreadsheets, card readers and paper sign-in sheets. Members replaces all of it with one system: memberships, Stripe subscriptions, door check-ins, and an owner's dashboard that finally answers whether the business is actually growing.
The challenge
Every gym we spoke to was running three or four disconnected tools. Membership status lived in one place, payment status in another, and attendance in a binder at the front desk. Reconciling them was a manual job someone did on a Sunday.
The harder constraint was multi-tenancy. One deployment had to serve many gyms with strict data isolation, per-tenant billing and per-tenant branding — without the per-customer maintenance burden that quietly kills small SaaS products.
What we built
A clean-architecture .NET API with a repository layer over Dapper — deliberately no ORM, so every query against the tenant-scoped schema stays explicit and reviewable. Tenant resolution happens once, at the edge of the request, and every downstream query inherits it.
Stripe handles subscriptions, with webhooks driving membership state so payment status and access rights can never disagree. The Next.js front end is built around the owner's daily loop: who is here now, who lapsed, what came in this month.
The outcome
Front-desk check-in went from a paper binder to a two-second scan. Owners get a live revenue picture instead of a month-end reconciliation, and failed payments surface the day they happen rather than the month after.
Results
- %
- Faster member check-in
- h
- Admin hours saved weekly
- h
- Reconciliation time
Screens




Next case study
OCH Planner
Online booking and shop-floor scheduling for an automotive workshop, replacing a phone-and-notebook workflow.
