Skip to content

Blog

Thoughts on development, homelab, and technology

Two Checks Between an LLM and Your Warehouse

Two Checks Between an LLM and Your Warehouse

Letting a model write SQL against client data is easy to demo. Making sure one customer can never read another customer's rows takes two checks, and only one of them reads the query.

#AI#LLM#text-to-SQL
Put the Tenant Column in the First Migration

Put the Tenant Column in the First Migration

"Maybe more brands later" is the most expensive sentence in a spec. Adding the tenant key on day one costs a column. Adding it on day four hundred costs a lot more.

#.NET#EF Core#Postgres
When Two Tools Disagree, Show Both Numbers

When Two Tools Disagree, Show Both Numbers

Analytics and Search Console never agree, and picking one quietly throws information away. How a marketing report stopped producing arguments.

#data platform#BigQuery#reporting
A Staging Database That Rebuilds Itself From Production Every Night

A Staging Database That Rebuilds Itself From Production Every Night

Most backups get tested once, on the day you need them. Restoring production into staging every night means the restore path runs 365 times a year instead.

#Postgres#backups#staging
OpenTelemetry Into a Stack You Own

OpenTelemetry Into a Stack You Own

Observability vendors charge by the gigabyte. Running OpenTelemetry into a backend you own, the tag scheme to agree first, and the traps that lose data.

#OpenTelemetry#observability#self-hosting
Your Server Logs Are the Only Place You Can See AI Crawlers

Your Server Logs Are the Only Place You Can See AI Crawlers

Analytics cannot see AI assistants fetching your site, because they run no JavaScript. What the server log shows, and what it genuinely cannot.

#analytics#AI#server logs
Getting Self-Hosted Mail to Actually Deliver

Getting Self-Hosted Mail to Actually Deliver

Self-hosted mail is unforgiving rather than impossible. Port 25, reverse DNS, SPF, DKIM and DMARC in the right order, and why you start at p=none.

#Postfix#email#DNS
Idempotency Is the Integration Feature You Actually Need

Idempotency Is the Integration Feature You Actually Need

The integration bug that costs money is rarely a parsing error. It is the same operation running twice. Idempotency keys, retry budgets, and what to store.

#integrations#APIs#webhooks
Why I Reach for a Modular Monolith First

Why I Reach for a Modular Monolith First

Microservices get chosen before anyone works out who is on call for them. Why I start with a modular monolith, and the cases where I do split.

#.NET#architecture#modular monolith
From Docker Compose to Infrastructure as Code with OpenTofu

From Docker Compose to Infrastructure as Code with OpenTofu

How I went from SSHing into servers and running docker-compose up to managing the whole homelab with OpenTofu, Infisical and a deploy pipeline.

#opentofu#infrastructure-as-code#docker
Building a Self-Hosted Identity Layer with Authentik

Building a Self-Hosted Identity Layer with Authentik

How Authentik replaced a dozen separate logins with a single SSO layer across my entire homelab, and why forward auth through Traefik is the missing piece.

#authentik#sso#traefik
ZFS, Proxmox, and the Art of Not Losing Data

ZFS, Proxmox, and the Art of Not Losing Data

Lessons from rebuilding a ZFS pool after a drive scare, and how I structure storage across Proxmox VMs to balance performance, redundancy, and sanity.

#zfs#proxmox#storage
Building an AI Agent Mesh in My Homelab

Building an AI Agent Mesh in My Homelab

How I built Hrolbot, a multi-agent AI system running on a Proxmox VM, where Claude Code agents coordinate through an MCP mesh to write and review real code.

#proxmox#ai#claude
What Happens When You Give AI Agents Root Access to Your Homelab

What Happens When You Give AI Agents Root Access to Your Homelab

I built an autonomous AI system that manages my homelab. It writes code, reviews PRs, monitors services, and sometimes tries to delete things it shouldn't.

#ai#claude#automation
Automating Media Management with the Arr Stack

Automating Media Management with the Arr Stack

A practical guide to running Sonarr, Radarr, and the surrounding ecosystem for automated media management, from quality profiles to monitoring.

#sonarr#radarr#jellyfin
Why I Self-Host Everything

Why I Self-Host Everything

On running your own infrastructure, owning your data, and why I would rather debug a Proxmox cluster at midnight than pay for more SaaS.

#self-hosting#proxmox#docker