Skip to content

Repository files navigation

UPTC FIT

UPTC FIT

Plataforma de gestión de turnos y usuarios del Centro de Acondicionamiento Físico (CAF) de la UPTC

Node.js Next.js React MySQL Prisma Clerk

CaracterísticasCapturas de pantallaGuía de inicioConfiguraciónDocumentación APITecnologíasAutores

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.

Características

  • 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.

Capturas de pantalla

Inicio de sesión
Inicio de sesión

Registro de estudiante
Registro de estudiante

Panel de administración
Panel de administración

Reserva de turnos
Reserva de turnos

Verificación de asistencia
Verificación de asistencia

Configuración de turnos
Configuración de turnos

Guía de inicio

Requisitos previos

  • Node.js 18 o superior
  • Docker (recomendado para levantar la base de datos MySQL)
  • Una cuenta en Clerk con una aplicación creada

Instalación

  1. Clona el repositorio e instala las dependencias:

    git clone https://github.com/lunna21/FIT_UPTC.git
    cd FIT_UPTC
    npm install
  2. 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_URL y crea la base de datos correspondiente.

  3. 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).

  4. 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 .env y .env.local automáticamente, por lo que CLERK_SECRET_KEY se toma de .env.local sin pasos adicionales.

    [!IMPORTANT] Las credenciales del administrador inicial tienen valores por defecto pensados solo para desarrollo (admin_super / FitUptc.2025Admin), definidos en prisma/seed.js y compatibles con Clerk (usuario sin puntos, contraseña de 15+ caracteres y correo válido). Sobrescríbelas con las variables SEED_ADMIN_USERNAME, SEED_ADMIN_PASSWORD, SEED_ADMIN_EMAIL y SEED_ADMIN_DOC_NUMBER y cámbialas antes de usar la aplicación en producción.

  5. Ejecuta el servidor de desarrollo:

    npm run dev

    El comando predev levanta automáticamente la base de datos con Docker Compose antes de iniciar el servidor. Accede a la aplicación en http://localhost:3000.

Configuración

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

Documentación API

La API REST expone la documentación interactiva de Swagger UI en:

Incluye los endpoints principales de usuarios, estudiantes (inscripción), turnos, reservas, verificación de asistencia y retroalimentación del sistema.

Tecnologías

  • 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

Autores

  • Diego Aguirre
  • Lunna Sosa
  • Laura Vela

About

Proyecto de Software I FIT_UPTC SISTEMA INTEGRAL DE GESTIÓN DEL CENTRO DE ACONDICIONAMIENTO FÍSICO (CAF) PARA ESTUDIANTES DE LA SEDE CENTRAL DE LA UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages