Aplicación FullStack desarrollada con FastAPI + Supabase + React/Vite, diseñada para la administración integral de gimnasios: clientes, pagos, asistencias, reportes y paneles con roles diferenciados.
- Frontend (Vercel):
-
Backend (Render):
-
Healthcheck:
-
/health → OK
-
👥 Gestión de Clientes
- Registro y administración de información de clientes
- Fichas detalladas de usuarios
- Búsqueda rápida con Spotlight Search
-
📅 Control de Asistencia
- Registro de entradas y salidas
- Calendario de asistencia
- Histórico de visitas
-
💰 Sistema de Pagos
- Registro de pagos
- Diferentes métodos de pago
- Historial de transacciones
- Seguimiento de pagos pendientes
-
📊 Reportes
- Estadísticas de asistencia
- Informes de pagos
- Análisis de tendencias
- React + Vite
- TypeScript
- Tailwind + shadcn/ui
- React Router
- Estado global + helpers personalizados
- Alertas modernas (SweetAlert)
- Animaciones suaves y UI dark-mode profesional
- SQLAlchemy 2.0
- JWT Auth (Owner / Coach)
- Middlewares de logging
- Paginación, filtros y reportes
- Arquitectura modular por routers
- Healthcheck (/health) para infraestructura cloud
- PostgreSQL en Supabase
- Migración inicial vía dump SQL
- Índices, relaciones y constraints
- Roles persistidos en tabla users
- Frontend: Vercel
- Backend: Render (free tier con auto-suspend)
- DB: Supabase
- Healthcheck + ping externo para minimizar cold-start
backend/
│── app/
│ ├── routers/
│ ├── models.py
│ ├── schemas.py
│ ├── auth.py
│ ├── middleware.py
│ ├── config.py
│ ├── main.py
│── requirements.txt
frontend/
│── src/
│ ├── pages/
│ ├── components/
│ ├── lib/
│── vite.config.tscd backend
pip install -r requirements.txt
uvicorn app.main:app --reloadcd frontend
npm install
npm run dev-
🔐 Autenticación (Owner + Coach)
- Owner gestiona todo el sistema
- Coach accede a clientes, pagos y asistencias
- Token JWT almacenado en localStorage
- Refresh por re-login
-
🏥 Healthcheck
- Usado para Render y pingers externos:
GET /health
{
"message": "La aplicación de Sergio está funcionando correctamente."
}Render free suspende el contenedor si no recibe tráfico en ~15 minutos. Se agregó un healthcheck y un ping externo para minimizar el “cold start”.
Ezequiel “Zeqe” Bellino
- GitHub: https://github.com/ezebellino
- LinkedIn: https://www.linkedin.com/in/ezebellino
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.