Notes from things I'm actually building
Real projects, honest results, and the engineering decisions in between — written as I go.
Why my AI agent was billing my Claude subscription as 'extra usage'
Same OAuth token, same account, same model — but my agent's requests billed to extra usage while the CLI billed to the subscription. The difference was a stale request fingerprint Anthropic uses to route billing.
Read the article →Siren Counter
An ESP32-S3 build to count sirens outside my window — DSP first, then a fair, pre-registered trial against two tiers of ML.
View the series → 6 partsCell Tracking in a Developing Embryo
Reconstructing cell lineages from light-sheet microscopy for a Kaggle competition — and two failures that taught more than the score.
View the series → 15 partsHome HD — build in public
A working app to run life around a chronic illness: tracking, blood-test trends, an AI assistant, a £0 cloud.
View the series → 11 partsMedGemma CKD
A clinical RAG assistant for chronic kidney disease, built three ways — simple, agentic, and multi-agent.
View the series → 8 partsEnterprise AI Customer Support
A multi-agent customer-support system built end to end, then rebuilt in LangGraph to compare.
View the series →
How to set up Hermes Agent with your Claude subscription
Hermes can run on the Claude subscription you already pay for — no API key, no separate billing. Here's the exact setup, how the OAuth discovery works, and the one fingerprint gotcha that silently bills you to extra usage instead.
What it actually costs to self-host a coding model
I wanted to run my own coding model to save on a subscription. Priced across Qwen3.5, GLM 4.7 and DeepSeek, the honest answer surprised me: at modest usage self-hosting isn't cheaper than an API — it's the unlimited, private option. Where the crossover is, and the tok/s catch the spec sheet hid.
Backing up everything that matters, for pennies a month
Everything I'd hate to lose is text — a notes vault and a folder of code. So the backup I needed was small, cheap and boring: encrypted, versioned, daily, offsite, for ~2p a month with restic and Google Cloud Storage. And the three things that make a backup real that the tool won't do for you.
Three ways to OCR a document, and what each one costs
I set out to self-host a shiny OCR vision-model and fell down a cold-start rabbit hole. The fix was a question I'd skipped: do I need document understanding, or just text and coordinates? Self-hosted VLM vs a 6MB CPU pipeline vs a hosted API — and what each actually costs.
How RAPTOR actually works — and the three ways my code quietly wasn't it
RAPTOR builds a tree of LLM summaries over your documents so retrieval can pull the right altitude of answer. The idea is elegant; implementing it faithfully is where the bodies are buried — the paper names two of the fixes itself, and a third was a reasoning model silently eating its own token budget.
The hard part of a personal AI agent isn't the agent — it's the memory
I wanted a daily chat companion that remembers me across sessions. Building the conversation is easy; the memory is the whole problem. A four-tier design modelled like an Obsidian vault — and the honest twist: three tools each suggested I was hand-building a worse version of something that exists.
Where does dbt fit in three clouds?
I kept re-drawing the same GCP-vs-AWS-vs-Databricks table. Here's the version that stuck, built on one idea: dbt doesn't live in the stack, it runs inside your warehouse — so choosing a stack is really choosing the warehouse. Plus where native tools (Dataform, DLT) beat it.
ADK vs LangGraph: one AI support system, two frameworks
I built the same customer-support agent twice — on Google ADK and on LangGraph. Same model and data; only the orchestration changed. What differs, and how to choose.
What does a factory's electricity actually cost?
A data project: estimate a GB factory's day-ahead wholesale electricity exposure (~10.8 p/kWh), then prove it against what actually traded — within 0.5%. On scoping, honest uncertainty, and validation.
A leakage-free fraud feature store, built with dbt
Turning raw card-payment tables into a feature store for fraud models on dbt and BigQuery — with one rule that matters: a feature can only ever see data from before the transaction it describes.
LLM Fine-tuning Guide 2024
Learn how to fine-tune large language models for your specific business needs.
MLOps Best Practices
Essential MLOps patterns for deploying and maintaining ML systems in production.