Work

Production systems built for companies and for myself, written up so the decisions behind them can be checked.

4 projects · client engagements first

Document extraction and AIBuilt and running2026

One click in Salesforce, and the document becomes data

A document extraction service that is one click inside Salesforce and a FastAPI application on Kubernetes underneath. It identifies the document type, parses it, extracts against a schema written for that type, computes the derived columns the business needs, and writes the result back to the record that triggered it. Input is whatever arrives, including scans and photographs. The model runs inside the client's own Azure tenancy.

PythonFastAPIKubernetesAzure OpenAIAzure FilesLlamaIndexSalesforce
Data platformBuilt and running2025

One number for what an ad is actually worth

Salesforce, Google Ads, LinkedIn Ads, Facebook Ads and website activity extracted into Snowflake, transformed in dbt through staging, marts and a semantic layer, and served to Tableau on a fifteen-minute cycle. Built for a German financial services company serving doctors and healthcare professionals.

AzureKubernetesAirbyteSnowflakedbtTableauSalesforce API
Document processingBuilt and running2026

Invoice extraction, built to be measured

Anyone can build an invoice extractor that works on a clean PDF. This one was built to answer the harder question: how accurate per field, how consistent across repeated runs, and where does it break. It ships as a working review application with the measurement harness underneath it.

PythonFastAPIPostgresSQLAlchemyReactTypeScriptVitepdf.jsDocker
Interface and information architectureBuilt and running2026

The AI Museum

Forty-three pages generated from three data files: five era rooms with their own walls, a guided tour, view transitions between gallery and exhibit, and a chart whose subject is the fifteen models that never published a parameter count. Every colour in it was computed rather than judged.

Next.jsTypeScriptTailwind v4React Three FiberThree.jsFramer Motion

Four ways an engagement usually starts, each pointing at the project above that it comes from.

Ways to work together