5
instituciones en producciónUNS, UNRN, UNC, UNVM y FAMFyG.
1.000+
usuarios simultáneosObservados en producción con consistencia completa de datos, no en un benchmark sintético.
<300 ms
endpoints críticosLatencia promedio, mediante SQL tuning, caché Redis y colas.
10 / 10
proyecto finalCalificado en la Universidad Nacional del Sur.
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, y mostraba todos los síntomas de serlo: 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.
No había monitoreo, así que los problemas aparecían como reportes de personas que estaban rindiendo un examen. Para una aplicación donde una respuesta lenta durante una evaluación cronometrada es un problema académico y no solo técnico, esa era la restricción que más pesaba.
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 rol
Desarrollada por un equipo de tres personas. Fui el autor y contribuidor principal en arquitectura, backend, frontend, infraestructura, seguridad, observabilidad y coordinación. La plataforma es un logro del equipo.
Filomena fue desarrollada por un equipo de tres personas como nuestro proyecto final en la Universidad Nacional del Sur, y el producto es un logro del equipo. Fui el autor y contribuidor principal: arquitectura, backend, frontend, infraestructura, seguridad, observabilidad y coordinación del trabajo.
Digo contribuidor principal y no autor único de forma deliberada. Los repositorios públicos son una instantánea publicada como evidencia de portfolio — no son un historial de commits que pruebe quién escribió cada línea, y no los presentaría como tal.
El enfoque
En lugar de refactorizar dentro del monolito, lo separamos en una API REST Laravel y un frontend Next.js, React y TypeScript. La razón decisiva no fue la modernidad: fue que un único contrato de API nos permitió convertir el modelo multi-institución en configuración en vez de código, y le dio a la concurrencia un solo lugar donde ser correcta.
El trabajo de performance se concentró donde los exámenes realmente tocan el sistema — recuperación de preguntas, estado de la sesión, envío de resultados. Primero vinieron el SQL tuning y el diseño de índices, después la caché Redis, y todo lo que no necesitaba ocurrir durante el request, como generar reportes de resultados, se movió a una cola.
Arquitectura
El recorrido del request desde el navegador, después de la reconstrucción.
- ClienteNext.js, React y TypeScript, para administradores, evaluadores y estudiantes.
- APIUna API REST Laravel como contrato único para cada cliente.
- DatosMySQL, con diseño de índices y tuning de consultas en los caminos de examen.
- Caché y colasRedis para caché y para trabajo asincrónico.
- ObservabilidadPrometheus y Grafana sobre la base de datos, las colas y los workers.
- DeliveryImágenes Docker construidas y desplegadas con GitHub Actions.
El producto en sí
Un recorrido por la interfaz, desde el inicio de sesión hasta la operación de un examen en curso. Son capturas de una instancia de demostración, no de datos reales de ninguna institución.

Pantalla de inicio de sesión de Filomena, que pide un número de documento y una contraseña

Inicio del administrador con los pasos ordenados para preparar un examen

Importación por planilla, con zona de carga, descarga de plantilla y selector de rol

Banco de preguntas con escenarios clínicos, sus consignas y su orden

Editor de preguntas completado con un escenario clínico y la consigna asociada

Detalle de una tabla de cotejo con ítems puntuados y la pregunta a la que corresponde cada uno

Tabla de seudónimos numerados, con una marca sobre los que están en uso

Consola de administración del examen, con controles de inicio, cierre y defensa junto al monitoreo en vivo

Tarjeta de ingreso al examen con el código, el seudónimo asignado y las reglas

Examen en curso, en el caso uno, pregunta uno de siete, con el texto del escenario

Calculadora gestacional integrada al examen, con selector de fecha y las fechas que deriva

Monitoreo en vivo de estudiantes por seudónimo, con su progreso y un control de alerta

Medidores en tiempo real del avance de estudiantes y evaluadores durante un examen

Pantalla de corrección con la respuesta del estudiante junto a la tabla de cotejo que la puntúa

Página de reportes con cuatro exportaciones disponibles una vez finalizado el examen

Tablero de Grafana con chequeos de salud de servicios y conteos por modelo del examen
Decisiones de ingeniería
La seudonimia como propiedad del modelo de datos
Los estudiantes son seudónimos para los evaluadores. Eso se aplica en el modelo de datos y en la API, y no se esconde en la interfaz, porque una regla de privacidad implementada en una vista es una regla que se filtra la primera vez que alguien agrega un endpoint.
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
El control de acceso basado en roles se aplica en la API y se refleja en el frontend. La copia del frontend existe por usabilidad; la de la API es la que realmente sostiene la garantía.
Monitoreo antes de necesitarlo
Prometheus y Grafana entraron junto con la reconstrucción y no después del primer incidente, cubriendo la base de datos, Redis, las colas y los workers, con logging estructurado y health checks.
Cómo trabajamos
Prácticas ágiles con Trello, desde los requisitos hasta producción. Tres personas, una fecha límite académica e instituciones reales que ya dependían de la versión anterior — así que el trabajo se ordenó por lo que se rompería primero, no por lo que resultaba más interesante.
Los despliegues corrían sobre imágenes Docker construidas con GitHub Actions, observados por debajo de quince minutos de punta a punta. Los repositorios públicos son instantáneas publicadas y no incluyen la configuración de ese pipeline.
Dónde está hoy
Filomena está activa en cinco instituciones nacionales argentinas: UNS, UNRN, UNC, UNVM y FAMFyG. Soportó 1.000+ usuarios simultáneos en producción con consistencia completa de datos, y mantuvo los endpoints críticos por debajo de 300 ms en promedio.
Estas cifras provienen de la operación desplegada, no de un banco de pruebas en el repositorio. El proyecto fue calificado 10/10 como proyecto final en la Universidad Nacional del Sur, y recibió entrevistas, cobertura universitaria y menciones de autoridades académicas — reconocimiento editorial, no un premio formalmente instituido.
Qué haría distinto
La suite de tests es el punto débil honesto. Validamos el comportamiento mediante la operación desplegada y validación de carga, y las instantáneas públicas incluyen tests de humo del framework en lugar de una suite real. En un sistema donde un defecto interrumpe un examen en curso, los caminos de concurrencia y permisos merecían cobertura automatizada, y construirla bajo una fecha límite académica fue el compromiso equivocado para repetir.
También habría anotado las condiciones de medición en su momento. Los números de performance son reales, pero reconstruir meses después cómo se observó exactamente cada uno es más difícil de lo que debería — y una cifra que no se puede calificar es una cifra que conviene repetir con cuidado.
Evidencia
Los repositorios son instantáneas publicadas que se conservan como evidencia de portfolio. No son el historial de commits del desarrollo original, y no los presento como prueba de quién escribió cada línea.