Every role below is the same job in a different setting. Somebody needs a system that keeps
working when they are not watching it, and I own the part that has to not break.
2026 –
Founder & Software Engineer
GridPull. I build it and I sell it, which means I hear the complaint and then fix it
myself. Commercial insurance prospects assembled from public filings and sold to independent
agencies. FastAPI, SQLAlchemy and asyncpg against PostgreSQL
behind PgBouncer, with Redis for queues and a 150-worker asyncio pool
streaming extraction progress to the browser over server-sent events. Two separate database
engines, because schema changes need session semantics that transaction pooling cannot give
you. Extraction runs PyMuPDF and Mistral OCR into Anthropic and
OpenAI models with a fallback chain; documents live in S3 via boto3;
billing is Stripe. The front end is React 18 and TypeScript with
TanStack Query, Radix and MapLibre, built by Vite and shipped with
Docker Compose behind nginx from GitHub Actions. The cross-sell engine has
no model in it by design: a producer has to be able to explain a coverage-gap recommendation
to a client. The extractor scores its own output at 98.9% field accuracy across six
schedule types with zero error rows.
2025 –
Technical Co-Founder
Papyra AI (Sen), partnered with Vertafore. Agent infrastructure that two insurance
agencies run their back office on. I own the engine: a 64-tool registry behind
338 endpoints, FastAPI with SQLAlchemy 2.0 async and psycopg3 on
PostgreSQL behind PgBouncer. Model calls go through litellm across
Anthropic, OpenAI, Groq and Gemini so one provider outage does not
stop the queue, with DSPy for the eval harness and LightRAG and
fastembed behind retrieval. Playwright drives the browser work,
sse-starlette streams run progress, Fernet encrypts credentials at rest and
Stripe handles billing. The canvas is React Flow and dagre in
React 18 and TypeScript, with a Tauri desktop build, deployed on
Hetzner under systemd and nginx. The durability work is what makes it safe
to let an agent send real client mail: transaction-scoped Postgres advisory locks with a
compare-and-set relock, because PgBouncer's transaction pooling makes session locks a trap
that only shows up under load, and a pre-send group claim so a redelivered message cannot
double-send.
2025
AI Research Assistant
Vrije Universiteit Amsterdam, Faculty of Computer Science. Language models driving
behaviour-tree control of multi-agent systems in Python: the model writes the policy,
the tree keeps it inside behaviour you can inspect and verify. The same question my thesis
asks from the other side, which is how much of an agent's competence should live in learned
weights and how much in structure around them.
2025
Software Engineer
Marubeni American Corporation, freelance. VisionPay: distributed document
extraction with a fine-tuned vision-language model, wired into SAP so the output
landed in the system the finance team already used rather than in a dashboard nobody opens. I
wrote the disaster-recovery runbook for it, which is the part that decides whether a pipeline
survives its first bad week.
2024 – 25
Quantitative Modelling Intern
ABN AMRO Bank. Six months of quantitative model development inside a European bank,
working in Python and R where a model that cannot be explained does not ship.
That constraint is why the deterministic, explainable-by-construction components in my own
products are deliberate rather than accidental.
2021 – 23
Software Engineer
Peek Real Estate. Built and ran their geocoding and points-of-interest service in
production: FastAPI and PyMongo over MongoDB 2dSphere
indexes with $geoWithin radius queries, Elasticsearch for text search,
slowapi for per-client rate limiting, and address parsing with usaddress and
NLTK. Eighteen hot paths compiled to C with Cython when the NumPy and
pandas versions could not keep up. Containerised with Docker.
341 commits, all mine. I was eighteen when I started it.
Education
2026
MSc Econometrics
University of Amsterdam, Data Science track. Thesis on reinforcement learning for diffusion
language models, trained multi-node on H100 nodes over NCCL under Slurm on the
Dutch national supercomputer, with a fixed compute grant.
The write-up is here.
2025
BSc Econometrics & Data Science
University of Amsterdam. Thesis on Taylor-rule central-bank rates inside an
agent-based macro model, on Eurozone data: at the twelve-quarter horizon the inflation-gap
rule cut out-of-sample RMSE by up to 33.9% against an AR(1) baseline and 38.8%
against a VAR(1) baseline.