Notes from things I'm actually building
Real projects, honest results, and the engineering decisions in between — written as I go.
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.
Read the article →Cell 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 →
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.