Case Study · Co-Founder & Engineer

Run a gym without spreadsheets

Forzive is a multi-tenant SaaS that replaces the patchwork of billing tools, spreadsheets, and whiteboards a gym runs on — one app for scheduling, check-in, payments, and physical access.

Role
Co-Founder · Full-stack
Timeline
2022 — Present
Type
Multi-tenant SaaS
Status
Live in production
Outcomes

What it delivers

5 → 1
Tools consolidated
Billing, scheduling, access control, messaging, and the whiteboard — one app instead of five.
Self‑serve
Onboarding per gym
A new gym spins up on its own subdomain — no manual provisioning from us.
Door → app
Physical + digital
Biometric door access tied to membership status, so an expired plan can't badge in.
The problem

Gyms run on duct tape

Most boxes and studios stitch together a payment processor, a spreadsheet for members, a separate scheduling tool, a messaging app, and a literal whiteboard for the workout. Nothing talks to anything. An expired membership still books a class; a check-in never reaches billing; the owner reconciles it all by hand on Sunday night.

We built Forzive around the coach's workflow, not the billing system — flat monthly pricing, unlimited members, and one source of truth from the front door to the invoice.

Forzive dashboard
The admin dashboard — what's running now, what's next, and member activity at a glance.
Architecture

Multi-tenant from day one

Every gym is a tenant with its own subdomain, isolated data, and branding — but it all runs on one codebase and one deploy. The interesting decisions were about isolation and keeping the boring parts boring.

Framework
Next.js 14 (App Router)server components for the data-heavy admin surfaces, with a thin client layer for live interactions.
Data
PostgreSQL + Prismatenant-scoped queries enforced at the data layer so isolation isn't left to discipline.
Tenancy
Subdomain per gymmiddleware resolves the tenant from the host, with wildcard DNS so new gyms need zero manual setup.
Hosting
Vultr + Cloudflarepredictable cost, wildcard TLS, and an edge cache in front of the static surfaces.
Payments
Stripesubscriptions, invoicing, and webhooks reconciled back to membership status.
Hardware
ZKTeco biometric readersdoor access bridged to the app so entry follows the membership, not a keycard.
Features

From the front door to the invoice

QR check-inMembers scan in; attendance flows straight to the coach feed and the records.
Scheduling & auto-bookingClass capacity, waitlists, and recurring bookings without the back-and-forth.
Payments & invoicingStripe-backed subscriptions with invoices that match what actually happened.
Biometric door accessZKTeco readers gate entry on live membership status — no plan, no door.
Forzive class schedule
Class management — recurring slots, capacity, and coaches.
Forzive membership plans
Membership plans — pricing, billing intervals, and active members.
Forzive athlete progress charts
Reports & analytics — members, revenue, and activity at a glance.
Stack

Built with

Next.js 14TypeScriptPrismaPostgreSQLStripeVultrCloudflareZKTeco
Next case study

Playflow — tournament management

View Playflow