Rishi Estudio
End-to-end management for a Pilates studio: credit-based memberships, recurring scheduling, bookings, payments and automatic emails.
- Role
- Full-stack: architecture, backend, frontend, database and deployment
- Year
- 2025
- Status
- In production · continuous improvement
- Client
- Pilates studio
- 2
- profiles: admin and student
- Recurring
- fixed-slot booking
- Credits
- tracked automatically
- Monthly
- revenue report
Overview
A full-stack web platform for the complete management of a Pilates studio: membership plans with class credits, scheduling with recurring availability, student bookings, payments and automatic email notifications.
Context
The problem
The studio managed students, plans and schedules with spreadsheets and WhatsApp, which created three concrete problems: credits out of control — nobody knew for sure how many classes each student had left or when their plan expired — monthly rescheduling — long-standing students had to request the same time slots again every month — and no business visibility, with no monthly view of revenue or class occupancy.
The solution
An application with two distinct profiles: an admin panel with CRUD for plans, students, class types and availability, weekly and monthly scheduling, plan assignment with a start date, holiday management and revenue reporting; and a student portal with a public landing page, sign-up, “My plan” showing remaining credits and expiry, and a schedule to book, book recurringly or cancel.
What it does
Credits with expiry
Each student sees how many classes they have left and when their plan expires. Deduction happens automatically on booking.
Recurring booking
The student fixes their usual time slots once and stops rescheduling every month.
Scheduling with availability and holidays
Recurring availability per class type, with holiday management and blocks that propagate to bookings.
Monthly revenue report
A monthly view of revenue and occupancy: the business figure that simply didn't exist before.
Automatic notifications
Automatic emails at the relevant points of the cycle: confirmations, expiries and reminders.
Technical decisions
- 01
Modelling credits as a domain, not a counter
The plan, its expiry, consumption and cancellation form a cycle with its own rules. Treating it as a domain entity — rather than a number being subtracted — is what makes it possible to cancel, refund and renew without inconsistencies.
- 02
The foundation of a larger product
This system was the starting point later refactored into Nutri Suite, the multi-tenant nutrition SaaS.
Stack
Backend
- NestJS
- TypeScript
- TypeORM
- Nodemailer
Data
- PostgreSQL
- Migraciones versionadas
Frontend
- Portal del alumno
- Panel de administración
- Landing pública
Infra
- Deploy propio
- Dominio propio
Next project