Writing about software, startups, and building with AI agents.

Notes on shipping useful tools, exploring software architecture, and using AI infrastructure to move from idea to working product.

A better way to move files over MCP

MCP calls make the model recite the whole payload token by token. A small CLI lets code move it, so it never enters context in the first place. Fewer tokens, less time.

MCPCLIAI Agents

Reliable JSON from Cheaper LLMs

How plain JSON, Zod validation, and a repair loop let Gemini 3.1 Flash-Lite run 80% cheaper and 2× faster than our Claude Haiku baseline.

LLMsStructured OutputJSONBenchmarking

Build the Feedback Loop First

Retrofitting CI, linting, Prettier, and regression tests into a mature codebase makes AI coding useful by catching broken changes before reviewers do.

Software EngineeringCITestingCode QualityAI Agents

When Google Should Supply the Place Data, but Not the UI

Google’s default Places widget breaks out of your existing mobile UI, so a custom autocomplete keeps the form flow intact while Google still supplies the place data.

Google Places APIUXAutocomplete

Mac Captive Portal Not Showing? Check Your DNS

Custom DNS can make a captive portal look broken by skipping the network’s resolver, so restoring automatic DNS brings the login page back.

macOSWi-FiDNSCaptive PortalTroubleshooting