Louvre shadows striping a pale concrete wall

AI engineer & founder

Systems that keep working after I have gone home.

Every system below was built end to end and put into service. Several of them are running right now with nobody watching them.

I work alone, from the ingestion pipeline to the deployed interface. Document intelligence for private equity. Autonomous client communication for veterinary clinics. Prospect discovery for a post-quantum cryptography consultancy.

Some of it is mine. The rest belongs to people who needed it working, not demonstrated.

Stacked white balcony fins receding along a facade

Selected work

Every system, and what each one was actually for

Open a row for the problem it was built against, what it does, and the decisions behind it. A filled mark means it is in production today.

Ventures & client systems

Products I own, and work delivered to paying or partner organisations.

Independent systems

The ones below were built to answer a question rather than a brief. Several of them are the reason the ones above work the way they do.

The dark angular eave of a concrete building against a bank of cloud

Every figure a system of mine produces carries its source, or it is labelled an estimate. That rule is enforced by a validator that fails the run, never by asking the model nicely.

A chequered concrete facade dissolving into shadow

How I work

Four rules I have paid to learn

Build for the day after handover

A system that needs me in the room is a system I have not finished. Scheduled, logged and documented, or it is a demo with good lighting.

Constrain the model in code

A prompt is not a control surface. If an output has to be true, something outside the model must be able to look at it and fail the run.

Compliance is a build constraint

Disclosure obligations, GDPR scope and data boundaries go in at the start. Retrofitting them is how otherwise finished projects quietly die.

Say when it is not worth building

The most useful line in a business case is the scenario where the honest recommendation is no. A case that can only recommend yes is not a case.

Full stack

What I build it with

LLM & AI APIs
Anthropic Claude API, OpenAI API, Google Gemini, multi-model ensembles
Agent tooling
Claude Code (skills, subagents, slash commands, MCP), Codex, n8n, Openclaw, Hermes
Languages
Python, JavaScript, TypeScript
Backend & serverless
Cloudflare Workers, FastAPI, Node.js, Railway
Frontend
Next.js 16, React 19, Tailwind v4, Framer Motion, HTML/CSS/JS
Data & retrieval
PostgreSQL, pgvector, vector embeddings, semantic search, recency-weighted ranking
Hosting & CMS
Netlify, Vercel, Sanity CMS, GitHub Pages
Automation & comms
Webhooks, cron, WhatsApp API, Microsoft Graph, SMTP, Gmail and Calendar APIs, Tally
Finance data
Alpaca Markets, EDGAR (Form 4 and 13F), STOCK Act disclosures, Polymarket, Kalshi
Enterprise & office
Office.js, Excel add-ins, Notion API, Google Workspace, openpyxl
Methods
Multi-agent orchestration, reflection loops, ensemble design, Kelly sizing, provenance enforcement, prompt engineering
Tools
VS Code, Cursor, Git and GitHub, Obsidian

If you have something that ought to be running and is not, I would like to hear about it.