Backend and systems engineer. I write the services and I own the platform underneath them.
Three and a half years at Technica Corporation, a US federal and defense R&D contractor, building event driven systems, backend services, and the Kubernetes and Linux infrastructure they ran on. Most of that work was in air-gapped environments, where you cannot pull a fix off the internet and the discipline has to be in place beforehand.
Based in southern France, relocating to Barcelona. Open to backend, platform, and systems roles across the EU.
Air-gapped Kubernetes platform. Highly available RKE2 on bare metal RHEL for a fully air-gapped environment. HAProxy and Keepalived for load balancing and control plane failover. An on premises Harbor registry served OCI images and Helm charts so deployments worked with no route to the internet. Kafka based event detection fed automated remediation in real time. I evaluated Kubernetes distributions against security posture before selecting RKE2.
Event driven detection and remediation. ETL pipelines in Apache NiFi consuming syslog, Zabbix metrics, and Zeek network events, turning raw telemetry into automated action. The Zeek pipeline detected unauthorized RDP connections and triggered firewall changes on the monitored ports. Custom Java processors pulled Neo4j graph data into dataflows, opened and maintained Jira tickets per system vulnerability, and generated compliance documentation from CVE data.
Authorized Service Interruption system. A Flask and SQLAlchemy backend over MariaDB with a REST API that walked a Neo4j graph depth first to find every dependent item under a node. Paired with a Go service consuming the Zabbix event topic, which held each event long enough to check the maintenance window database, dropped anything suppressed, and forwarded the rest to Kafka.
Rebuilding from bare metal. A breach in early 2024 destroyed all data across our lab. I rebuilt the environment over roughly three months: ESXi hypervisors and vCenter, Juniper SRX firewalls and EX and QFX switches, an isolation system for inspecting infected drives, and the full application stack on top. I corrected the vendor's reference configuration along the way, including a duplicated Keepalived virtual router ID that broke failover, then wrote the installation guide the team used afterward.
Languages. Java, Python, TypeScript and Node.js. Go and Bash where the ecosystem fits.
Backend. Flask, Django REST Framework, Spring Boot, FastAPI, Express. REST API design, microservices.
Data and messaging. Apache Kafka, Apache NiFi, PostgreSQL, Neo4j, MongoDB, MariaDB, Redis.
Platform. Kubernetes and RKE2, Docker, Podman, Buildah, Helm, Harbor, HAProxy, Keepalived, Nginx, bare metal RHEL, VMware ESXi, Proxmox, GitLab CI/CD.
Frontend. React, TypeScript, Vite, Material UI.
Learning next. Rust, Terraform, OpenTelemetry, eBPF, Apache Flink, ClickHouse, gRPC.
I fix causes rather than symptoms. When a vendor's reference deployment kept failing over badly, the real problems were a duplicated virtual router ID and a misconfigured connection pooler, not the services people kept restarting.
I make things reproducible. Custom Dockerfiles for local testing, Helm charts for deployment, versioned dataflows, and an on premises registry so the same artifacts exist inside the network as outside it. If I do something manually twice, I script it. One provisioning script I wrote detected the Linux distribution, installed packages, and configured NTP, syslog, DNS, DHCP, and SNMP from a single command.
I write documentation as part of the work rather than after it, and I default to boring, well documented technology over new technology, because someone else maintains what I build.
I also mentor junior engineers and have run the technical portion of senior engineering interviews.
BS Computer Science, University of Maryland Global Campus.
JNCIA-SEC, Juniper Networks, valid through September 2028.


