I build backend services and data pipelines that deal with messy, real-world sources: government registries with no API, scanned regulatory documents, and legacy file formats that were never meant to be parsed. Most of that work is in the Colombian public-health sector.
Most of my professional code lives in private organisational repositories, so what follows describes what I built rather than linking to it. The public repositories on this profile are academic and personal work.
Designed and built the backend behind the platform that runs my organisation's selection processes, which has carried 20+ real selection rounds across two generations. The interesting parts: exam lifecycles modelled as state machines, so invalid transitions fail in the domain instead of leaking into endpoints; an Outbox table driving asynchronous notifications; and remote proctoring with chunked video upload plus a WebSocket channel for attempt timers, designed so a dropped connection never costs a candidate their progress. I rebuilt the data model for the second generation while the first stayed live and untouched for audit.
A routing engine over a road network of 1.4 million nodes, returning referral routes between
healthcare facilities in under half a second. It consolidates 6.8 GB of national cartography
and OpenStreetMap extracts into a single queryable model, validated against a JSON Schema
contract so malformed data fails at ingestion rather than in the viewer. Built offline-first:
the whole thing runs on a disconnected institutional laptop from a single uvicorn command —
no Docker, no network, no Node runtime — with an automated check that the bundled front end
makes zero external requests.
Colombia's public healthcare provider registry has no API. I automated its extraction with Playwright, collecting all 932 public hospitals in the country along with their facilities, services and installed capacity. It persists progress so an interrupted run resumes instead of restarting, partitions work across parallel workers, and can reprocess only the records that failed.
Colombian health billing moved from a flat-file standard written in 2000 to the hierarchical JSON format required by 2023 regulation. I built the ETL for that migration, isolating readers, transformation and validated output so an amendment to the regulation touches a single layer. Correctness is enforced by Pydantic schemas against official government reference tables, not by convention.
A pipeline that converts scanned resolutions and regulatory documents into machine-readable form, preserving the original reading order and table structure. The decision that made it work: detect page geometry with OpenCV before invoking the OCR model, so it only ever sees pre-identified text regions and individual table cells rather than whole pages. PDFs with embedded text skip OCR entirely.
Two chapters in the same Springer CCIS volume series from WEA 2025, written with the same team: one on the access-control system, one on the plate-recognition pipeline that feeds it.
VACS: A Modular Software System for Vehicular Access Control
— Alvarino, Taboada, Mendoza, Montes & Martinez-Santos. Springer, Communications in
Computer and Information Science (WEA 2025), pp. 222–232, October 2025.
10.1007/978-3-032-08206-0_19
A modular NestJS backend organised around isolated domain modules, with access modelled as enforceable rules and plate recognition as the event source. Capstone project, and the code is public.
An Optimized Approach for Automatic License Plate Recognition in Open-Access Environments
— Alvarino, Taboada, Mendoza & Martinez-Santos. Springer, Communications in Computer
and Information Science (WEA 2025), pp. 223–233, October 2025.
10.1007/978-3-032-08203-9_19
The recognition pipeline behind VACS: detection and OCR tuned for open-access environments, where plates arrive at unconstrained angles, distances and lighting rather than at a controlled barrier. Served over FastAPI with Redis in front of it.
| Languages | |
| Backend | |
| Data | |
| Databases | |
| Infrastructure | |
| Practices |
Relational modelling, indexing and migrations sit under the database badges; ETL pipeline design and API contract design are the parts I think about most and the parts no logo represents. I've also built infrastructure prototypes with Terraform, Vault and Docker Swarm (database-per-tenant provisioning), though not yet running in production.
Going deep on two things rather than broad on many: distributed data processing beyond single-node pipelines, and cloud deployment with real infrastructure-as-code. The gap between "I containerised it" and "I operate it" is the one worth closing next.


