Caliza Gym Full Stack Web Development

Caliza is a gymnastics and bouldering gym located in Mexico. There is little software to help manage gyms in Mexico, and the software that does exist is often outdated and difficult to use. What began as a custom solution built with the gym owners has evolved into a fully multi-tenant SaaS platform now used across multiple gym locations. The platform handles everything the gym needs to operate: class scheduling, member management, employee payroll, inventory, finances, and attendance tracking via QR codes. It has since been expanded to support franchise networks, allowing multiple gyms to be managed under a single umbrella with shared analytics.

Multi-Tenant Architecture

The platform is built with a database-driven multi-tenant architecture. Each gym gets its own subdomain (e.g., calizagym.com) and the system resolves all gym-specific configuration from the database on every request, including pricing, Stripe account, email settings, and subscription status. There is no code-level separation between tenants; isolation is enforced entirely at the data layer. A 7-day grace period allows gyms to continue operating after a subscription expires while renewal is being processed.

Franchise Support

Gym owners can manage multiple locations under a single franchise account. A dedicated analytics dashboard aggregates revenue, membership counts, and attendance across all locations, giving franchise administrators a unified view of their entire operation.

Features

  • Members can browse and register for classes, change class slots as long as spots are available, and track their progression through training programs.
  • Payments are handled online via Stripe, supporting both one-time payments and subscription models. The system automatically updates member status when payments are processed or expire.
  • QR codes are used for gym entry and class attendance, tracking both member and employee check-ins in real time.
  • Employees have a dedicated section to view their schedule, classes they are teaching, and the members they are responsible for. Payroll is calculated automatically from their hours and rates.
  • Financial reports consolidate all transactions into a unified dashboard with exportable breakdowns, covering online payments, in-gym sales, and product purchases.
  • An announcement system lets administrators broadcast messages to targeted member segments (e.g., members with expiring memberships or upcoming birthdays).
  • Scheduled emails are sent automatically for birthdays, membership expirations, and achievement milestones using QStash cron jobs.
  • A product catalog allows gyms to sell merchandise, with inventory tracking and purchase history tied to each member's account.
  • AI-powered features are integrated for select workflows using Google Generative AI and OpenAI.

Technology Stack

  • Framework: Next.js 16 (T3 Stack, App Router), TypeScript 5.8+, Turbo monorepo, pnpm
  • Frontend: React 19, Tailwind CSS v4, shadcn/ui, TanStack Query
  • Backend: tRPC v11 (type-safe RPC), Prisma ORM, PostgreSQL
  • Authentication: Better Auth 1.4.0 with Google OAuth and magic links via Resend
  • Payments: Stripe and Stripe Connect (franchise revenue splits)
  • Email: Resend with per-gym sender configuration and React Email templates
  • Scheduled Tasks: QStash for cron jobs (payment processing, birthday and expiration emails)
  • File Uploads: UploadThing backed by Supabase Storage
  • AI: Google Generative AI, OpenAI via Vercel AI SDK
  • Error Tracking: Sentry
  • Design: Figma

Demo

Although the full administration side is not publicly accessible, the member-facing side can be seen at calizagym.com. For more information contact me at 22jacganon@gmail.com to set up a meeting and see the full platform in action.