🎓

Actividad Grupal

Desarrollo del Frontend — HS API

Usando esta API como backend, cada grupo debe desarrollar una SPA en React que consuma todos los endpoints y ofrezca una experiencia completa para los roles ADMIN y STUDENT.

Stack Tecnológico Obligatorio

⚠ Todas estas tecnologías son de implementación obligatoria.

⚛️

React + Vite

Framework base. Inicializar con npm create vite@latest plantilla react.

🛣️

React Router

Todas las vistas como rutas. Incluye rutas protegidas por rol y por autenticación.

🔗

useContext

Al menos un Context para el estado global de autenticación (usuario, rol, token).

🪝

Custom Hooks

Mínimo 3 custom hooks que encapsulen lógica reutilizable. Ej: useAuth, useReports, useFetch.

🎨

Tailwind CSS

Sistema de estilos exclusivo. No se permite CSS puro, Bootstrap ni MUI.

📡

Axios

Cliente HTTP para todas las peticiones al API. No se permite fetch directamente.

🏭

Axios Instance

Instancia centralizada (api.js) con baseURL y headers por defecto.

🔁

Axios Interceptors

Request interceptor (adjuntar token) y response interceptor (manejo global de 401/403).

Vistas Requeridas

Compartidas (ambos roles)
  • Login

    Formulario, manejo de errores de credenciales.

  • Dashboard

    Estadísticas diferenciadas según el rol.

  • Mi Perfil

    Ver/editar datos personales. Cambiar contraseña.

Vistas STUDENT
  • Mis Reportes

    Lista paginada con estado visible.

  • Nuevo Reporte

    Formulario con subida de PDF (horas, categoría, descripción).

  • Detalle de Reporte

    Estado, notas del revisor y evidencia PDF.

  • Progreso del Curso

    Avance de horas aprobadas vs. requeridas.

Vistas ADMIN
  • Gestión de Usuarios

    Tabla paginada, crear y eliminar usuarios.

  • Importar CSV

    Carga de archivo CSV con resultado de importación.

  • Categorías

    CRUD completo de categorías de servicio.

  • Cursos

    CRUD completo de cursos.

  • Revisión de Reportes

    Filtros por estado y estudiante. Aprobar/rechazar.

  • Detalle Reporte (Admin)

    PDF embebido y emisión de revisión con notas.

Requisitos Técnicos Obligatorios

  1. 1.Autenticación persistente: El frontend debe enviar peticiones con credentials: 'include' o manejar el header Authorization según corresponda.
  2. 2.Guards de ruta: Las rutas protegidas redirigen al login si el usuario no está autenticado.
  3. 3.Control de acceso por rol: Las vistas de Admin no son accesibles por STUDENT y viceversa.
  4. 4.Manejo de errores HTTP: Los errores 401, 403, 404, 409 y 422 deben mostrarse al usuario de forma clara.
  5. 5.Paginación: Las listas de usuarios y reportes deben implementar paginación funcional.
  6. 6.Formularios con validación: Validar los campos antes de enviar la petición al servidor.
  7. 7.Feedback visual: Indicadores de carga (loading states) durante las peticiones HTTP.
  8. 8.Visualización de PDF: La evidencia debe poder visualizarse en el navegador usando el endpoint de stream.

Rúbrica de Evaluación

Puntaje total: 110 puntos

1. Funcionalidad

50 pts
CriterioPtsDescripción
Login y Logout5Autenticación funcional, redirección según rol, manejo de error de credenciales.
Dashboard (ambos roles)5Muestra estadísticas correctas diferenciadas por rol.
Perfil y cambio de contraseña4Edición de perfil funcional, validación de contraseña actual.
CRUD Categorías (Admin)5Crear, listar, editar y eliminar categorías.
CRUD Cursos (Admin)5Crear, listar, editar y eliminar cursos.
Gestión de Usuarios (Admin)6Listar con paginación, crear usuario, eliminar, importar CSV.
Crear y editar Reporte (Student)7Formulario con subida de PDF, validaciones correctas.
Revisión de Reportes (Admin)7Filtrar reportes, aprobar/rechazar con notas, aprobar parcial con horas.
Visualización de evidencia PDF3PDF embebido o descargable desde el detalle del reporte.
Progreso del curso (Student)3Visualización del avance de horas aprobadas vs. requeridas.

2. Calidad del Código

20 pts
CriterioPtsDescripción
Organización del proyecto5Estructura de carpetas clara, separación de concerns (componentes, servicios, rutas).
Reutilización de componentes5Componentes genéricos reutilizables (botones, inputs, tablas, modales).
Manejo de estado5Estado centralizado o bien estructurado, sin duplicación innecesaria.
Limpieza y legibilidad5Código legible, sin código muerto, nombrado consistente.

3. UX / Interfaz

15 pts
CriterioPtsDescripción
Diseño coherente y profesional4Paleta de colores consistente, tipografía legible, espaciado adecuado.
Diseño responsivo4La aplicación se adapta correctamente a móvil, tablet y escritorio.
Feedback al usuario4Loading states, mensajes de éxito/error visibles, confirmaciones antes de eliminar.
Navegación intuitiva3Menú claro, indicadores de ubicación, flujos de usuario sin fricciones.

4. Requisitos Técnicos del Stack

15 pts
CriterioPtsDescripción
Guards de ruta y acceso por rol2Rutas protegidas correctamente, no se puede acceder a vistas de otro rol.
Manejo correcto de errores HTTP1Los errores 401, 403, 404, 409 y 422 se muestran al usuario de forma comprensible.
Paginación funcional1La paginación de usuarios y reportes funciona correctamente.
React Router2Todas las vistas definidas como rutas, guard components implementados.
useContext para autenticación2Context con estado global del usuario autenticado, rol y métodos de login/logout.
Custom Hooks (mínimo 3)3Hooks reutilizables que encapsulen lógica de negocio o acceso al API.
Axios Instance2Instancia centralizada con baseURL y headers por defecto configurados.
Axios Interceptors2Request interceptor adjunta el token; response interceptor maneja 401/403 globalmente.
Funcionalidad: 50 pts
Calidad del código: 20 pts
UX / Interfaz: 15 pts
Requisitos técnicos: 15 pts

100

puntos totales

Penalizaciones

SituaciónPenalización
Credenciales o tokens hardcodeados en el código-10 pts
La aplicación rompe (crash) al recibir un error del API-5 pts
Uso de frameworks fullstack (Next.js, Nuxt.js, etc.)-15 pts
No usar Tailwind CSS como sistema de estilos-10 pts
No implementar useContext para el estado de autenticación-10 pts
Implementar menos de 3 custom hooks-5 pts / hook
No usar Axios (usar fetch directamente)-10 pts
No implementar Axios Instance centralizada-5 pts
No implementar Axios Interceptors-5 pts
No consumir el endpoint de dashboard-5 pts

Criterios de Entrega

📦

Repositorio Git

GitHub, GitLab o similar. El historial de commits debe reflejar el trabajo del equipo.

📄

README del frontend

Instrucciones claras para instalar y ejecutar el proyecto localmente.

🎤

Presentación en vivo

Cada grupo hará una demostración funcionando contra el API real.

🌐

URL base del API

http://localhost:8000/api/v1 o la que indique el instructor.