Gonzalo Martin PerezAI Engineer | Software Engineer | Product Engineer

Caso de estudio · Ene – Dic 2025

Filomena: exámenes de ciencias de la salud en cinco instituciones

Un monolito heredado en CakePHP y jQuery, reconstruido como una plataforma API-first que hoy ejecuta exámenes de alta exigencia en cinco instituciones nacionales argentinas.

  • PHP
  • Laravel
  • React
  • Next.js
  • TypeScript
  • MariaDB
  • MySQL
  • Redis
  • Docker
  • GitHub Actions
  • Prometheus
  • Grafana
  • 5

    instituciones en producción

    UNS, UNRN, UNC, UNVM y FAMFyG.

  • 1.000+

    usuarios simultáneos

    Observados en producción con consistencia completa de datos, no en un benchmark sintético.

  • <300 ms

    endpoints críticos

    Latencia promedio, mediante SQL tuning, caché Redis y colas.

  • 10 / 10

    proyecto final

    Calificado en la Universidad Nacional del Sur.

Una plataforma para todo el ciclo de evaluación

Filomena permite preparar, programar, tomar y corregir exámenes en instituciones de ciencias de la salud. Los administradores configuran los exámenes y el acceso, los estudiantes resuelven casos clínicos y los evaluadores corrigen las respuestas con rúbricas estructuradas.

El producto reúne esos flujos, separa los datos de cada institución y protege la identidad del estudiante durante la corrección. La demostración de 43 pantallas recorre las tareas de cada rol dentro de la aplicación.

El problema

Las carreras de ciencias de la salud evalúan a sus estudiantes con exámenes escritos masivos y de alta exigencia. La primera versión de Filomena era un monolito CakePHP y jQuery construido para una sola institución. Su rendimiento se degradaba bajo carga concurrente, la toma de exámenes era secuencial, el control de acceso se aplicaba de forma inconsistente y sumar una institución implicaba escribir código.

La plataforma original carecía de monitoreo proactivo. La reconstrucción incorporó visibilidad sobre el rendimiento de la aplicación y los servicios que sostienen los exámenes.

Para quién es

Tres roles con necesidades genuinamente distintas. Los administradores configuran instituciones, cursos y cronogramas. Los evaluadores redactan preguntas y revisan resultados. Los estudiantes rinden los exámenes y deben permanecer anónimos ante el evaluador que los califica.

Esos roles no son mutuamente excluyentes. Un profesor puede ser evaluador en un curso y administrador en otro, y por eso el manejo de roles tuvo que ser multirol desde el principio, en lugar de un único campo en el usuario.

Mi contribución

Fui el autor y contribuidor principal de un equipo de tres personas para el proyecto final de la Universidad Nacional del Sur. Mi trabajo abarcó arquitectura, backend, frontend, infraestructura, seguridad, observabilidad y coordinación.

Trabajamos de forma iterativa con prácticas Agile y Trello, conectando los requisitos institucionales con la implementación de un producto funcional.

De monolito a producto API-first

Separamos el monolito CakePHP y jQuery en una API REST Laravel y un frontend Next.js, React y TypeScript. La API estableció un contrato común para la interfaz y los flujos entre instituciones, con validación de entradas y control de acceso por roles. El renderizado del lado del servidor resolvía la carga inicial, seguido por los flujos interactivos de la aplicación.

El tuning SQL, los índices, la caché Redis y las colas sostuvieron los flujos de exámenes concurrentes. Prometheus y Grafana permitieron observar el comportamiento de la aplicación y sus servicios en producción.

Arquitectura

El recorrido de una solicitud desde el navegador, después de la reconstrucción.

Sistema

Arquitectura de la plataforma de exámenes

El cliente Next.js/React usa una API REST Laravel respaldada por MariaDB y Redis para caché y trabajo asíncrono. Prometheus y Grafana observan la base de datos, las colas y los workers; las imágenes Docker se construyen y despliegan mediante GitHub Actions. El gráfico agrupa solicitudes y capacidades operativas; las descripciones siguientes explican cada responsabilidad.
  1. ClienteNext.js, React y TypeScript, para administradores, evaluadores y estudiantes.
  2. APIUna API REST Laravel como contrato único para cada cliente.
  3. DatosMariaDB fue la elección final de base de datos; también utilizamos MySQL durante el proyecto. El diseño de índices y la optimización de consultas acompañaron los flujos de examen.
  4. Caché y colasRedis para caché y para trabajo asincrónico.
  5. ObservabilidadPrometheus y Grafana sobre la base de datos, las colas y los workers.
  6. DeliveryImágenes Docker construidas y desplegadas con GitHub Actions.

Explora la aplicación

43 pantallas de demostración revisadas que recorren administración, exámenes, corrección y monitoreo operativo. Explora los flujos o amplía una pantalla para ver el detalle.

Decisiones de ingeniería

La seudonimia como propiedad del modelo de datos

Los estudiantes son seudónimos para los evaluadores. El modelo de datos y la API aplican esa separación, manteniendo la identidad del estudiante fuera del flujo de corrección del evaluador.

Aislamiento por institución

Cada institución administra sus propios cursos, evaluadores, estudiantes, exámenes y cronogramas, con los datos aislados entre sí. Eso fue lo que convirtió el onboarding de una institución nueva de trabajo de desarrollo en configuración.

Verificación de roles en ambos lados

La API aplica el control de acceso basado en roles. El frontend refleja esos permisos para mostrar a cada usuario las acciones disponibles.

Visibilidad sobre producción

Prometheus y Grafana brindan visibilidad sobre el comportamiento productivo de la base de datos, Redis, las colas y los workers, con logging estructurado y health checks.

Qué cambió

La primera versión comparada con la plataforma hoy en producción.
AspectoAntesDespués
ArquitecturaMonolito CakePHP y jQueryAPI REST Laravel con un frontend Next.js
ConcurrenciaToma secuencial, una sola institución1.000+ usuarios simultáneos, observados en producción
LatenciaSe degradaba bajo carga concurrenteEndpoints críticos por debajo de 300 ms en promedio
OnboardingRequería trabajo de desarrolloConfiguración, en minutos
Control de accesoAplicado de forma inconsistenteRBAC multirol en API y frontend
ObservabilidadNingunaPrometheus y Grafana

Entrega y operación

El equipo de tres personas utilizó prácticas Agile y Trello para coordinar requisitos, implementación y releases.

Docker y Docker Compose proporcionaron entornos contenerizados, mientras GitHub Actions ejecutaba despliegues a producción en menos de quince minutos, desde el push hasta producción. Los repositorios públicos son versiones del código y no incluyen el pipeline original de despliegue.

Resultados en producción

Filomena está activa en UNS, UNRN, UNC, UNVM y FAMFyG. La operación productiva mostró 1.000+ usuarios simultáneos con consistencia completa de datos y endpoints críticos por debajo de 300 ms en promedio, monitoreados con Prometheus y Grafana.

El proyecto final recibió 10/10 en la Universidad Nacional del Sur, además de entrevistas, cobertura universitaria y menciones de autoridades académicas.

Próximas prioridades de ingeniería

En una próxima iteración priorizaría la cobertura automatizada de regresión para exámenes concurrentes y límites de permisos. Las versiones públicas contienen actualmente tests de humo del framework.

También conservaría escenarios repetibles de rendimiento junto a cada release para comparar cambios futuros con el comportamiento ya observado en producción.

Evidencia

El recorrido del producto y el contexto de ingeniería están incluidos en esta página. Los repositorios enlazados son versiones públicas del código: documentan la implementación, no el historial original de desarrollo ni el pipeline de despliegue.