The blog · build in public

Notes from things I'm actually building

Real projects, honest results, and the engineering decisions in between — written as I go.

Series — read in order
All articles
Backing up everything that matters, for pennies a month
July 2026 · Building in Public

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
July 2026 · MLOps

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
July 2026 · RAG & Agents

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
July 2026 · RAG & Agents

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?
July 2026 · Data Engineering

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
June 2026 · Agent Frameworks

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?
June 2026 · Data Analysis

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
June 2026 · Data Engineering

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
December 2024 · LLM

LLM Fine-tuning Guide 2024

Learn how to fine-tune large language models for your specific business needs.

MLOps Best Practices
December 2024 · MLOps

MLOps Best Practices

Essential MLOps patterns for deploying and maintaining ML systems in production.