e3fit icon

e3fit.me

Live

A production fitness-coaching platform for a small studio: client onboarding, manual booking workflow, programme delivery, and an offline-first companion app.

E3 Fitness studio

The pitch

A small fitness studio needed something between Mindbody (overkill, $300/mo) and a Google Sheet (already failing). They wanted a public site, a way to manually book sessions for new clients, an admin dashboard the owner could actually run alone, and eventually an app for clients to log their workouts on the floor.

I built it end-to-end. Then I gave it back.

Specs

Frontend Next.js (App Router), TypeScript, Tailwind
Backend Supabase Postgres with RLS, Supabase Edge Functions
Auth Clerk (with Supabase user-row mirroring)
Hosting Vercel · production + preview deploys per PR
Mobile React Native, offline-first workout logging
Migrations 50+ checked-in SQL migrations, applied via Supabase CLI

What mattered

Manual bookings, not embedded Cal.com. The first version embedded a Cal.com booking widget. It worked, but the owner couldn't see what was happening at a glance and the embed didn't fit her actual workflow (most bookings come from texts, not strangers on a website). I ripped it out and built an admin-only manual booking surface backed by a real bookings table. The public site now points new clients to the contact section instead.

RLS as the access model. Clients can read their own programmes; admins can read everything. There's no application-layer permission code worth speaking of. The database is the source of truth, and policies are tested with a CLI fixture before they ship.

Offline-first mobile. The mobile app logs workouts on the gym floor where the wifi is bad. Writes go to a local queue and sync when reachable; reads are served from a local cache. The exercise library (200+ items) ships baked into the app bundle so a fresh install is usable immediately.

A test-user seeder for QA. One npm script provisions a Clerk user and a matching Supabase row in dev so the owner can poke at her own staging environment without contaminating production. Boring, but the kind of thing that makes a small platform feel grown-up.

It's tempting to over-build for a small business. The discipline is in not doing that.