Leuven, Belgium
Backend & Data Engineer · Python · AWS · Azure · Databricks
Backend developer with a strong background in Python, API development, and cloud-based data architectures. Experienced in building scalable backend applications, processing time series data, and automating complex workflows. Combines software engineering with an analytical engineering mindset and years of experience in modelling and data-intensive projects. Driven to build robust, secure, and performant systems within a dynamic, fast-growing environment.
08/2025 – Present
Self-employed
02/2025 – 07/2025
Self-employed — Peru & Bolivia
03/2023 – 01/2025
Link / Manage Count-e — Leuven
2022
Anteagroup
2013 – 2019
Vrije Universiteit Brussel
A growing platform covering all layers of a real IoT system — from secure device ingestion through a Kafka gateway to behavioral analytics and an AI assistant that answers questions about the live data. Built around a conference room monitoring use case (temperature, humidity, occupancy, motion), with a deliberate focus on clean architecture, infrastructure as code, and engineering practices that hold up in production. 403 tests across seven projects, 80%+ coverage enforced on every push via GitHub Actions.
Serverless REST API for real-time sensor event ingestion with threshold-based anomaly detection. Clean layered architecture (models → services → repositories). Full infrastructure as code with CloudFormation. Deployed to AWS via CI/CD.
Same domain logic as 1a, redeployed as a containerised FastAPI app. End-to-end observability with OpenTelemetry auto-instrumentation → OTel Collector → Datadog APM: distributed traces with automatic DynamoDB child span detection, log-trace correlation, and Watchdog anomaly detection — zero manual instrumentation.
Serverless ETL pipeline: extracts historical sensor data from DynamoDB, detects occupancy schedules, temperature trends and anomalies, stores results in Aurora Serverless v2 (PostgreSQL). Full Terraform infrastructure. Runs on-demand to minimise costs.
Same analytics goal as 2a, re-implemented with a data engineering stack. Medallion architecture (Bronze → Silver → Gold): raw Parquet → processed Parquet → PostgreSQL via dbt. PySpark analytics: occupancy schedules, temperature trend regression (regr_slope), z-score anomaly detection, spatial hotspots (GeoPandas). Observability via OTel → Grafana Cloud. Power BI dashboard live in the frontend. Deployed via a 9-stage Jenkins CD pipeline (Groovy Jenkinsfile).
Same analytics domain as 2b, rebuilt on a fully managed Azure stack. Bronze ingestion via Auto Loader, Silver transformation with the Write-Audit-Publish pattern (good records MERGEd idempotent, invalid records to quarantine — never deleted), Gold layer with dbt-databricks incremental models: z-score anomaly detection, hourly aggregations, dimensional models. Full IaC via Terraform. Monthly job on the 1st at 06:00 Brussels time via Databricks Asset Bundles. Gold data served live via FastAPI /lakehouse/* endpoints.
Secure device layer for the platform: device registration with bcrypt-hashed API keys, short-lived JWT session tokens and per-device sliding-window rate limiting. Async FastAPI producer publishes sensor events to Kafka (Redpanda); a consumer group normalises them to the shared DynamoDB contract with idempotent writes — poison messages go to a dead-letter queue with full error context. CloudFormation IaC, CLI device simulator and Locust load-test suite integrated in CI.
Conversational AI layer over the live platform: Claude answers questions about the real sensor data by calling the platform's own REST APIs, exposed as 7 read-only MCP tools. Bounded agent loop on the streaming Claude API, answers streamed token-by-token via SSE into a chat tab. Security by design: least-privilege container, read-only tool allowlist, per-IP rate limiting.
Fixed silent acceptance of unknown mypy plugin config keys; added validation and clear warnings for both pyproject.toml and .ini formats, with test coverage. · PR #13149
Fixed a bug where Enum values were incorrectly rejected as attribute defaults due to an incomplete type validation list. · PR #1302
KU Leuven · 2009 · Magna cum laude
VDAB · 2022
MITx
MITx
HarvardX
AWS
IBM
IBM
Esri
Full list on LinkedIn.