Proyecto fullstack para control de asistencia en gimnasio con flujo kiosco y panel administrativo.
src/- Frontend React + Vite + TypeScript + Tailwind + shadcn/uiapps/api/- Backend NestJS + Prisma + PostgreSQLapps/api/prisma/schema.prisma- Modelado de base de datos
Se mantiene el frontend existente y se agrega backend modular para una migracion progresiva de mocks a datos reales.
- Node.js 20+
- npm 10+
- PostgreSQL local
VITE_API_URL=http://localhost:3001NODE_ENV=development
PORT=3001
DB_USER=postgres
DB_PASSWORD=brando123
DB_NAME=gym_attendance
DB_HOST=localhost
DB_PORT=5432
DATABASE_URL="postgresql://postgres:brando123@localhost:5432/gym_attendance?schema=public"
JWT_SECRET="change-this-in-production"
JWT_EXPIRES_IN="7d"
CORS_ORIGIN="http://localhost:8080"- Instalar dependencias frontend:
npm install- Instalar dependencias backend:
npm install --prefix apps/api- Ejecutar migraciones y seed:
npm run api:migrate
npm run api:seed- Levantar API (terminal 1):
npm run api:dev- Levantar frontend (terminal 2):
npm run dev- Admin:
- Usuario:
admin - Email:
admin@gymflow.com - Password:
admin123
- Usuario:
- Cliente manual:
- Usuario:
carlos.r - Celular:
5551234567 - Password:
1234
- Usuario:
POST /auth/admin/loginPOST /auth/client/login-manualGET /clientsPOST /clientsGET /clients/:idGET /clients/:id/routineGET /clients/:id/meal-planPATCH /clients/:idPATCH /clients/:id/passwordPOST /attendance/check-inPOST /attendance/face-verifyGET /attendanceGET /clients/:id/attendancePOST /clients/:id/progressGET /clients/:id/progressPOST /clients/:id/face-photosGET /gym-resourcesPOST /gym-resourcesPATCH /gym-resources/:idDELETE /gym-resources/:id
Ver PROJECT_PROGRESS.md para checklist por fases, decisiones tecnicas y pendientes.
- [✓] Dashboard admin con métricas reales (clientes/asistencias)
- [✓] Perfil admin de cliente con datos reales (general, asistencias, evolución)
- [✓] Registro de cliente y edición de cliente conectados a API
- [✓] Progreso de cliente (kiosco) conectado a API
- [✓] Restricción básica de ownership para rutas de cliente en backend
- [✓] Reportes admin conectados a datos reales
- [✓] Rutina cliente conectada a backend
- [✓] Plan alimenticio cliente conectado a backend
- [✓] Calendario cliente conectado a asistencias reales
- [✓] Ownership ampliado para rutina y plan alimenticio por cliente
- [✓] Gestión completa de recursos en admin (crear/editar/eliminar)
- [✓] Flujo de escaneo facial conectado a endpoint backend inicial
- [✓] Registro de fotos faciales inicial al crear cliente
- [✓] Regla semanal de actualización de progreso aplicada en backend
- [✓] Descarga PDF real en rutina semanal
- [✓] Descarga PDF real en plan alimenticio
- [✓] Matching facial por similitud de embeddings (coseno) con umbral
- [✓] Capturas faciales almacenan embeddings asociados al cliente
- [✓] Flujo kiosco envía embedding al backend para validar identidad
- [✓] Registro de cliente usa cámara real para capturar rostro
- [✓] Registro de asistencia facial usa cámara real en kiosco
- [✓] Modelos de face-api cargados localmente desde
public/models
- [✓] Se agrega validación de calidad facial antes de aceptar capturas
- [✓] Registro de cliente muestra feedback de calidad (iluminación, centrado, distancia)
- [✓] Kiosco evita validaciones de baja calidad y guía al usuario antes del match
- [✓] Se corrige fallo de registro por payload grande al guardar fotos faciales
- [✓] Activación de cámara en kiosco usa fallback compatible para más dispositivos
- [✓] Reconocimiento facial genera sesión JWT de cliente para entrar al perfil sin error de autorización