5
institutions in productionUNS, UNRN, UNC, UNVM and FAMFyG.
1,000+
simultaneous usersObserved in production with complete data consistency, not a synthetic benchmark.
<300 ms
critical endpointsAverage latency, through SQL tuning, Redis caching and queues.
10 / 10
final year projectGraded at Universidad Nacional del Sur.
The problem
Health-sciences degrees assess students through large, high-stakes written exams. Filomena's first version was a CakePHP and jQuery monolith built for a single institution, and it was showing every symptom of that: it degraded under concurrent load, exam delivery was sequential, access control was enforced inconsistently, and adding an institution meant writing code.
There was no monitoring, so problems surfaced as reports from people sitting an exam. For an application where a slow response during a timed assessment is an academic problem and not just a technical one, that was the constraint that mattered most.
Who it is for
Three roles with genuinely different needs. Administrators configure institutions, courses and schedules. Evaluators author questions and review results. Students sit the exams — and must remain anonymous to the evaluator grading them.
Those roles are not mutually exclusive. A professor can be an evaluator in one course and an administrator in another, which is why role handling had to be multi-role from the start rather than a single field on a user.
My role
Built by a three-person team. I was the principal author and contributor across architecture, backend, frontend, infrastructure, security, observability and coordination. The platform is a team achievement.
Filomena was built by a three-person team as our final year project at Universidad Nacional del Sur, and the product is a team achievement. I was the principal author and contributor: architecture, backend, frontend, infrastructure, security, observability, and coordinating the work.
I say principal contributor rather than sole author deliberately. The public repositories are a snapshot published as portfolio evidence — they are not a commit history that proves who wrote which line, and I would not present them as one.
The approach
Rather than refactor inside the monolith, we separated it into a Laravel REST API and a Next.js, React and TypeScript frontend. The decisive reason was not modernity: it was that a single API contract let us make the multi-institution model configuration rather than code, and gave concurrency a single place to be correct.
Performance work was concentrated where exams actually touch the system — question retrieval, session state, result submission. SQL tuning and index design came first, Redis caching second, and anything that did not need to happen during the request, such as generating result reports, was pushed onto a queue.
Architecture
Request path from the browser down, after the rebuild.
- ClientNext.js, React and TypeScript, serving administrators, evaluators and students.
- APIA Laravel REST API as the single contract for every client.
- DataMySQL, with index design and query tuning on the exam paths.
- Cache and queuesRedis for caching and for asynchronous work.
- ObservabilityPrometheus and Grafana over the database, queues and workers.
- DeliveryDocker images built and deployed through GitHub Actions.
The product itself
A walkthrough of the interface, from signing in to operating a running exam. These are captures from a demonstration instance, not from any institution's live data.

Filomena login screen, asking for a national ID number and a password

Administrator home page listing the ordered steps to set up an exam

Spreadsheet import screen with a file drop zone, a template download and a role selector

Question bank listing clinical scenarios, their prompts and their order

Question editor filled in with a clinical scenario and the question asked about it

Checklist detail listing scored items, their point values and the question each belongs to

Table of numbered pseudonyms, with a tick marking which are currently in use

Exam administration console with start, finish and defence controls beside live monitor tiles

Exam entry card showing the exam code, the student pseudonym assigned for it and the rules

An exam in progress, showing case one, question one of seven and the scenario text

Gestation calculator built into the exam, with a date wheel and the dates it derives

Live monitor listing students by pseudonym with their progress and an alert control

Real-time gauges showing student and evaluator completion during a running exam

Correction screen with a student answer beside the yes or no checklist used to score it

Reports page with four exports available once the exam has finished

Grafana dashboard showing service health checks and record counts per exam model
Engineering decisions
Pseudonymity as a data-model property
Students are pseudonymous to evaluators — the mapping exists, it is simply not theirs to see. That is enforced in the data model and the API rather than hidden in the interface, because a privacy rule implemented in a view is a privacy rule that leaks the first time someone adds an endpoint.
Isolation per institution
Each institution manages its own courses, evaluators, students, exams and schedules, with data isolated between them. This is what turned onboarding a new institution from development work into configuration.
Role checks on both sides
Role-based access control is enforced in the API and reflected in the frontend. The frontend copy exists for usability; the API copy is the one that is actually load bearing.
Monitoring before it was needed
Prometheus and Grafana went in alongside the rebuild rather than after the first incident, covering the database, Redis, queues and workers, with structured logging and health checks.
How we worked
Agile practices with Trello, from requirements through to production. Three people, an academic deadline, and real institutions already depending on the previous version — so the work was ordered by what would break first, not by what was most interesting.
Deployments ran on Docker images built through GitHub Actions, observed at under fifteen minutes end to end. The public repositories are published snapshots and do not include that pipeline configuration.
Where it stands
Filomena is active at five Argentine national institutions: UNS, UNRN, UNC, UNVM and FAMFyG. It handled 1,000+ simultaneous users in production with complete data consistency, and kept critical endpoints below 300 ms on average.
These figures come from deployed operation, not from a benchmark harness in the repository. The project was graded 10/10 as a final year project at Universidad Nacional del Sur, and received interviews, university coverage and mentions from academic authorities — editorial recognition rather than a formally named award.
What I would do differently
The test suite is the honest weak point. We validated behaviour through deployed operation and load validation, and the public snapshots ship framework smoke tests rather than a real suite. On a system where a defect interrupts an exam in progress, the concurrency and permission paths deserved automated coverage, and building it under an academic deadline was the wrong tradeoff to make twice.
I would also have written down the measurement conditions at the time. The performance numbers are real, but reconstructing exactly how each was observed, months later, is harder than it should have been — and a figure you cannot qualify is a figure you should be careful about repeating.
Evidence
The repositories are published snapshots kept as portfolio evidence. They are not a commit history of the original development, and I do not present them as proof of who wrote which line.