Work Experience
Python Developer & Data Engineer
08/2025 – present
Self-employed
- Designed, built and operate a production IoT/data platform — seven projects covering serverless and containerised ingestion, a secure Kafka device gateway, analytics pipelines on AWS and Azure Databricks, and an AI assistant (Claude API + MCP) — live at iot.gonzalezsanchez.dev (see Projects).
- Run as a real product: CI/CD, infrastructure as code, observability (Datadog, Grafana Cloud) and security hardening on a self-hosted server; open-source fixes merged into Pydantic and PynamoDB.
Freelance Data Engineer
02/2025 – 07/2025
Self-employed — Peru & Bolivia
- Data analysis and software development for projects in South America (environmental and water sector).
- Processing and analysis of discrete and continuous datasets using Python.
Programmer
03/2023 – 01/2025
Link / Manage Count-e — Leuven
- Backend development and maintenance of a school management system with a complex relational database (350+ tables).
- Automation of administrative business processes in collaboration with multidisciplinary teams.
- Worked with large structured datasets and contributed to the stability and extensibility of the system.
Groundwater & Surface Water Advisor
03/2022 – 12/2022
Antea Group Belgium
- Analysis of hydrological data and groundwater flow modelling.
- Spatial analyses using ArcGIS Pro and QGIS.
- Advisory reports for policymakers and companies on water management.
Family care
2019 – 2021
Researcher – Hydrodynamic Modelling
05/2013 – 08/2019
Vrije Universiteit Brussel
- Hydrodynamic modelling of the Zeeschelde estuary.
- Development of numerical models in Fortran.
Special Academic Staff (BAP)
11/2009 – 04/2013
Vrije Universiteit Brussel — Brussels
Assistant Hydrology & Hydraulic Engineering
06/2009 – 07/2009
Soresma — Belgium
Hydraulic Engineer
08/2006 – 08/2007
Zorrilla Construcciones — Bolivia
Research Assistant & Programming Assistant
07/2004 – 07/2006
Universidad Mayor de San Simón — Bolivia
Projects
IoT Monitoring Platform —
github.com/GonzalezSanchez/iot-monitoring-platform ·
iot.gonzalezsanchez.dev
Project 1a: Serverless Ingestion · 12/2025 – 01/2026
Python · AWS Lambda · API Gateway · DynamoDB · CloudFormation · GitHub Actions
- Serverless REST API for real-time ingestion of sensor events (temperature, humidity, occupancy, motion) with threshold-based anomaly detection.
- Clean layered architecture (models → services → repositories). Full infrastructure provisioned with CloudFormation. Deployed to AWS via CI/CD.
Project 1b: Containerised Ingestion · 01/2026 – 02/2026
Python · FastAPI · Docker · nginx · AWS DynamoDB · React · Cloudflare · OpenTelemetry · Datadog · Grafana Faro · GitHub Actions
- Same business logic as 1a, redeployed as a containerised FastAPI application — demonstrating the separation of domain logic from infrastructure.
- Live at iot.gonzalezsanchez.dev on a home server via Docker Compose + Cloudflare tunnel. React dashboard with 30s auto-refresh and live event submission.
- Implemented end-to-end observability with OpenTelemetry auto-instrumentation and OTel Collector → Datadog APM: distributed traces with automatic DynamoDB child span detection, log-trace correlation, and Watchdog anomaly detection — zero manual instrumentation.
- Frontend observability with the Grafana Faro Web SDK (real-user monitoring: Web Vitals, errors, sessions) — session data surfaced a production serialization bug that was then reproduced, fixed and regression-tested.
- Docker images built and pushed to GitHub Container Registry on every merge to main.
Project 2a: Behavior Analyzer (AWS Serverless) · 02/2026 – 04/2026
Python · AWS Step Functions · Lambda · Aurora Serverless v2 · EventBridge · Terraform · Secrets Manager · GitHub Actions
- Serverless ETL pipeline: extracts historical sensor data from DynamoDB, detects occupancy schedules, temperature trends and anomalies, stores results in Aurora Serverless v2 (PostgreSQL).
- Full infrastructure provisioned with Terraform. Runs on-demand to minimise AWS costs (~$15/month while deployed, scales to zero when idle).
- Unit, integration and regression tests (pytest + moto); 80%+ coverage enforced on every push via GitHub Actions.
Project 2b: Behavior Analyzer (Data Engineering) · 04/2026 – 05/2026
Python · Apache Airflow · PySpark · dbt · AWS S3 · PostgreSQL · GeoPandas · Power BI · OpenTelemetry · Grafana Cloud · Jenkins (Groovy) · Terraform · Docker
- Data engineering pipeline with Medallion architecture (Bronze → Silver → Gold): raw Parquet (DynamoDB scan) → processed Parquet (validated, cleaned) → PostgreSQL serving layer via dbt (staging views + materialised marts with source tests).
- PySpark analytics: occupancy schedule detection (window aggregation), temperature trend regression (Spark SQL regr_slope), z-score anomaly detection (stddev_pop — medium ≥ 3, high ≥ 5), spatial hotspot aggregation per building (GeoPandas, EPSG:4326).
- Observability: OTel Collector → Grafana Cloud (Mimir metrics + Loki logs) — custom counters per pipeline stage, Airflow StatsD metrics, PostgreSQL metrics via postgres-exporter; pipeline dashboard versioned as code in the repo.
- Orchestrated by Apache Airflow (weekly schedule). Deployed via a 9-stage Jenkins declarative CD pipeline written as a Groovy Jenkinsfile (deploy + destroy paths, smoke tests). Infrastructure provisioned with Terraform (S3 + IAM). Power BI report surfaced in the portfolio frontend at iot.gonzalezsanchez.dev.
- 94 unit tests (pytest + PySpark in-process). CI pipeline with PySpark tests (Java 17), Airflow DAG tests, dbt parse, and terraform validate — all green on every push.
Project 2c: Behavior Analyzer (Azure Databricks Lakehouse) · 05/2026 – 06/2026
Python · PySpark · Azure Databricks · Delta Lake · Unity Catalog · dbt-databricks · ADLS Gen2 · Terraform · Databricks Asset Bundles · GitHub Actions
- Lakehouse pipeline on Azure Databricks: Bronze ingestion via Auto Loader, Silver transformation with the Write-Audit-Publish pattern (good records MERGEd idempotent, invalid records appended to quarantine — never deleted), Gold layer built with dbt-databricks incremental models: z-score anomaly detection (|z| > 2.5), hourly aggregations, dimensional models for rooms and buildings.
- Full infrastructure as code with Terraform: ADLS Gen2, Databricks workspace (Premium), Access Connector (Managed Identity), Key Vault, Unity Catalog metastore, SQL Warehouse, budget alert. Orchestrated via Databricks Asset Bundles (DABs) — monthly job, 1st of every month 06:00 Brussels time.
- Gold layer served live via FastAPI /lakehouse/* endpoints, visible in the portfolio dashboard at iot.gonzalezsanchez.dev.
- 43 tests, 92% coverage. CI: ruff + mypy + pytest + dbt parse + bundle validate + terraform validate — all green on every push.
Project 3: IoT Device Gateway (Kafka) · 07/2026
Python · FastAPI · Kafka (Redpanda) · aiokafka · DynamoDB · CloudFormation · Docker · Locust
- Secure device gateway, live in production: device registration with bcrypt-hashed API keys, short-lived JWT session tokens, and per-device sliding-window rate limiting (configurable per device type).
- Async FastAPI producer publishes sensor events to Kafka (Redpanda, keyed by device); a consumer group normalises messages to the platform's shared DynamoDB contract with idempotent writes — poison messages routed to a dead-letter queue with full error context.
- Automation tooling: CLI device simulator (self-registering devices, JWT refresh, per-device stats) and a Locust load-test suite (steady vs. aggressive device scenarios) integrated into the CI pipeline. Validated against the production gateway: steady traffic clean (0 failures), an aggressive device throttled at the 60/min threshold with zero cross-device impact, zero dead-letter entries under load.
- Infrastructure as code with CloudFormation (Devices table + least-privilege IAM), deployed via GitHub Actions. 36 tests, mypy clean.
Project 4: AI Assistant (Claude + MCP) · 06/2026 – 07/2026
Python · Claude API (Anthropic SDK) · MCP · fastapi-mcp · FastAPI · SSE · slowapi · Docker · React
- 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 (fastapi-mcp, internal Docker network only).
- Separate FastAPI service running a bounded agent loop (max 8 steps) on the streaming Claude API (Haiku 4.5) with the official MCP client; answers streamed token-by-token to the React chat tab via Server-Sent Events.
- Security by design: least-privilege container (only the Anthropic key — no AWS/Databricks credentials), read-only tool allowlist, per-IP rate limiting behind Cloudflare, capped tokens and history, generic error events.
- 12 tests (agent loop, MCP client, API) against fakes — CI needs no network and no API key. Live at iot.gonzalezsanchez.dev.
Open Source
Pydantic · 10B+ downloads
Python · mypy plugin
- 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
PynamoDB · 2k+ stars
Python · AWS DynamoDB
- Fixed a bug where Enum values were incorrectly rejected as attribute defaults due to an incomplete type validation list. · PR #1302