A production-ready SaaS platform enabling personal trainers to manage their business operations through a unified dashboard. Built with Next.js 15, React 19, and TypeScript, the application handles complex scheduling, client management, and automated invoicing for a real personal trainer's business.
I designed, built, and continue to maintain and develop new features for this product myself as a side project, since March 2023. The product idea came about because a personal trainer was using a variety of different apps to run her business, and wanted to consolidate them into one with only the features she wants. I continue to work closely with this user to understand her real problems and needs, and provide value by figuring out solutions and developing features that she wants and benefits from.

The core feature of the app are shared calendars between the personal trainer and each trainee. The trainer is able to view every trainee's calendar, and create, update, and delete appointments, workouts, and bootcamps. Trainees can only view their own calendar, including detailed information for workouts and appointments, check off workouts as completed, and check off bootcamps to confirm attendance if they have enough credits.
Other features include a mobile-friendly view for the trainees, tables where the trainer can view billing data and email invoices with a single click, and custom forms managed in Contentful CMS that get emailed to the trainer when a trainee fills the form out.
Data is prefetched in Server Components and cached, so it is immediately available on the client. Data for adjacent calendar months is then prefetched on the client and cached, so they load immediately when the user navigates to them in a Client Component. React Query is also used to invalidate cache when users update server state, and to synchronize other users' clients with the updated server state. This makes the user experience very snappy.

Authentication is handled through Auth.js (NextAuth) with secure session management and role-based access control distinguishing between trainers and clients. I implemented a complete password reset flow with time-limited tokens and secure email delivery via Nodemailer. The production environment features automated daily backups through GitHub Actions, with a separate backup database ensuring business continuity. Error tracking via Sentry provides real-time monitoring of production issues.
The codebase maintains high quality standards with unit tests via Vitest for business logic and Playwright for critical user journeys like bootcamp enrollment. The CI/CD pipeline automates formatting checks, linting, and test execution on every pull request. Database migrations are version-controlled with Prisma and automatically deployed to production. The separation of environment-specific configurations enables seamless local development while maintaining production security.
Currently serving a single tenant effectively, the architecture is designed with multi-tenancy in mind for future scaling. The modular structure separates concerns cleanly—server actions for mutations, custom hooks for data fetching, and feature-based component organization. This foundational work positions the platform for evolution into a multi-tenant SaaS product while maintaining the performance and reliability required for business-critical operations.