Plataforma de gestión de turnos y usuarios del Centro de Acondicionamiento Físico (CAF) de la UPTC
Características • Capturas de pantalla • Guía de inicio • Configuración • Documentación API • Tecnologías • Autores
UPTC FIT es una plataforma web para administrar los turnos diarios y los usuarios del Centro de Acondicionamiento Físico de la Universidad Pedagógica y Tecnológica de Colombia (UPTC). Los estudiantes reservan su turno en el gimnasio, los empleados verifican la asistencia y consultan la información de los usuarios, y los administradores controlan estados de cuenta, turnos y la configuración general del servicio.
La aplicación está construida con Next.js + Clerk para la autenticación y MySQL + Prisma ORM para la persistencia, con una arquitectura por roles y estados de usuario que controla el acceso a cada módulo.
- Autenticación con Clerk — Registro, inicio de sesión, verificación por correo y recuperación de contraseña.
- Roles y estados de usuario — Administrador (
ADM), Empleado (EMP) y Estudiante (STU), con estados activo, pendiente e inactivo; el middleware redirige a cada usuario según su rol y estado. - Registro con ficha médica — Los estudiantes registran su tipo de documento, EPS, alergias, medicamentos, contacto de emergencia y consentimiento informado (PDF).
- Reserva de turnos — Tabla de turnos por día con capacidad máxima; estados de reserva: pendiente, atendido, inasistido y cancelado.
- Verificación de asistencia — El empleado registra la asistencia buscando por código o usuario, con el turno activo del día en tiempo real.
- Panel de administración — Gestión completa de usuarios, historial de cambios de estado, configuración de turnos y revisión de comentarios del sistema.
- Auditoría de datos — Registro de quién crea, actualiza o cambia el estado de los usuarios.
- Galeria de ejercicios — Videos de rutinas para estudiantes, con carga diferida (lazy loading).
- Envío de correos — Notificaciones y recuperación de contraseña vía SMTP con Nodemailer.
- API REST documentada — Documentación interactiva con Swagger UI.
- Node.js 18 o superior
- Docker (recomendado para levantar la base de datos MySQL)
- Una cuenta en Clerk con una aplicación creada
-
Clona el repositorio e instala las dependencias:
git clone https://github.com/lunna21/FIT_UPTC.git cd FIT_UPTC npm install -
Levanta la base de datos MySQL 8 con Docker Compose:
docker compose up -d
[!NOTE] Si prefieres usar tu propia instancia de MySQL, ajusta la variable
DATABASE_URLy crea la base de datos correspondiente. -
Configura las variables de entorno a partir del ejemplo:
cp .env.example .env.local
Completa los valores de Clerk, base de datos y SMTP (ver Configuración).
-
Sincroniza el esquema y carga los datos base:
npx prisma db push npx prisma db seed
El seed crea los catálogos (EPS, alergias, tipos de documento, estados y turnos por día) y un usuario administrador inicial (
admin_super). Para que puedas iniciar sesión de inmediato, crea también el admin en Clerk:SEED_CREATE_CLERK_ADMIN=true npx prisma db seed
[!NOTE] El seed carga las variables de entorno de
.envy.env.localautomáticamente, por lo queCLERK_SECRET_KEYse toma de.env.localsin pasos adicionales.[!IMPORTANT] Las credenciales del administrador inicial tienen valores por defecto pensados solo para desarrollo (
admin_super/FitUptc.2025Admin), definidos enprisma/seed.jsy compatibles con Clerk (usuario sin puntos, contraseña de 15+ caracteres y correo válido). Sobrescríbelas con las variablesSEED_ADMIN_USERNAME,SEED_ADMIN_PASSWORD,SEED_ADMIN_EMAILySEED_ADMIN_DOC_NUMBERy cámbialas antes de usar la aplicación en producción. -
Ejecuta el servidor de desarrollo:
npm run dev
El comando
predevlevanta automáticamente la base de datos con Docker Compose antes de iniciar el servidor. Accede a la aplicación en http://localhost:3000.
Warning
Las claves de Clerk y las credenciales SMTP son secretos. No las subas a repositorios públicos ni las compartas.
| Variable | Descripción |
|---|---|
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY |
Clave pública de la aplicación de Clerk |
CLERK_SECRET_KEY |
Clave secreta de la aplicación de Clerk |
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL |
Ruta de destino tras iniciar sesión |
NEXT_PUBLIC_CLERK_SIGN_IN_URL |
Ruta del formulario de inicio de sesión |
NEXT_PUBLIC_CLERK_SIGN_UP_URL |
Ruta del formulario de registro |
NEXT_PUBLIC_BASE_URL |
URL base de la aplicación (p. ej. http://localhost:3000) |
DATABASE_URL |
Cadena de conexión a MySQL (Prisma) |
SMTP_SERVICE |
Proveedor SMTP: gmail, outlook, zoho, etc. |
SMTP_USER |
Usuario o correo para autenticación SMTP |
SMTP_PASS |
Contraseña o app password del correo |
SMTP_FROM |
Dirección del remitente de los correos (opcional) |
SEED_ADMIN_USERNAME / SEED_ADMIN_PASSWORD / SEED_ADMIN_EMAIL / SEED_ADMIN_DOC_NUMBER |
Credenciales del administrador inicial creado por el seed (opcional; hay valores por defecto solo para desarrollo) |
SEED_CREATE_CLERK_ADMIN |
Si es true, al ejecutar npx prisma db seed también crea el usuario admin en Clerk con metadata role=adm, status=ACT |
La API REST expone la documentación interactiva de Swagger UI en:
/docs— redirige a la documentación- http://localhost:3000/api/swagger-ui
Incluye los endpoints principales de usuarios, estudiantes (inscripción), turnos, reservas, verificación de asistencia y retroalimentación del sistema.
- Next.js 15 con App/Pages Router y Turbopack
- Clerk — autenticación y gestión de sesiones
- Prisma ORM + MySQL 8 — modelo de datos relacional
- Tailwind CSS + Bootstrap + styled-components — estilos e interfaz
- Nodemailer — envío de correos SMTP
- Swagger UI + swagger-jsdoc — documentación de la API
- React.js — componentes e interfaz de usuario
- Diego Aguirre
- Lunna Sosa
- Laura Vela





