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 + Prisma — tenant-scoped queries enforced at the data layer so isolation isn't left to discipline.
Tenancy
Subdomain per gym — middleware resolves the tenant from the host, with wildcard DNS so new gyms need zero manual setup.
Hosting
Vultr + Cloudflare — predictable cost, wildcard TLS, and an edge cache in front of the static surfaces.
Payments
Stripe — subscriptions, invoicing, and webhooks reconciled back to membership status.
Hardware
ZKTeco biometric readers — door 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