Writing
Notes on building products, infrastructure, and agentic AI systems.
Blackhole: Network-Wide Ad Blocking With No Public Address
Pi-hole blocks ads for every device on your network, but only at home — and exposing it to the internet to fix that is a genuinely bad idea. Blackhole runs Pi-hole entirely inside a Tailscale VPN using a shared network namespace, so the ad blocker follows you to any device, anywhere, while staying completely invisible to the public internet.
DevOps as a Product, Not a Favor
Most engineers who end up running infrastructure didn't plan to. Reoclo turns that accidental responsibility into a service teams can actually rely on, built from years of running real infrastructure across different stacks and scales.
Why I Built My Own Email Infrastructure
Email deliverability problems are almost always configuration problems: SPF, DKIM, and DMARC quietly misconfigured until a mailbox provider starts filtering you to spam. Prawnwire is transactional email infrastructure built to get this right from the start and keep it right.
Blue-Green on One Box: Zero-Downtime Deploys When You Can't Afford a Warm Standby
The blue-green tutorials all assume a spare server. Here is how I run zero-downtime deploys for my own platform on a single RAM-constrained box: what gets a color, what stays singleton, why the cutover is just a Caddy reload, and how a stopped-but-resumable old color buys near-instant rollback.
envsitter-guard: Keeping Secrets Out of Agent Hands
How a practical problem with agentic coding tools led to building an OpenCode plugin that blocks AI agents from reading .env files — without breaking their ability to work with environment configuration.
with-context-mcp: Persistent Memory for AI Agents, With Supervision
Why stateless AI agents are a daily frustration, and how with-context-mcp gives agents structured, supervised persistent memory backed by an Obsidian vault you actually control.
Air Traffic Controller: The Right Browser, The Right Profile, Every Time
Modern work is split across several browsers and many profiles, but macOS still forces every link through a single global default. Air Traffic Controller is a profile-aware default browser router for macOS that sends every click to the right browser and the right profile, automatically.
The Hard Parts of Live Transcription Aren't the Model
"Add transcription to calls" sounds like a weekend project: pipe audio to a speech-to-text model and render the text. The model is the easy 20%. This is a writeup of the problems that actually consumed the time: biasing the model toward the vocabulary that matters, breaking the feedback loop where a corrector learns from its own mistakes, telling silence apart from dropped speech, deduplicating the overlap that low latency forces, and turning a wall of fragments into something people will read.
One Core, Many Brands: Killing Configuration Drift with One-Way Generation
When you run a family of near-identical sites, copy-paste forking guarantees they drift apart. Here's the build pattern I use instead: a single core, thin per-brand overlays, and generation that only ever flows one direction.
One Interface, Many Providers: Abstracting Crypto Custody Behind Your Own Domain
Wire your app directly to one crypto provider and you inherit all its quirks forever. Here's how to put your own interface in front, so adding or swapping a provider is one adapter, not a rewrite.