Journal
Reflecting on some of the toughest challenges I've tackled in my career.

Errors Aren't Strings: Four Unfashionable React 19 Patterns
Most React codebases rhyme: inline error strings, forms that flash on submit, a Tailwind config quietly eating the design system. Four small patterns that compound — typed error codes, a Form wrapper, colocated copy, and no tailwind.config at all — and the UI layer finally behaves.

The AI Agent's Best Tool Is Fewer Tools
A capable model with ten tools burns through its step budget before it can answer anything. So Stir routes every query through a tiny classifier first, scopes the main model to a four-tool subset per intent, and short-circuits one-word queries with zero LLM calls.

Faker Gives You Fake Data. That's The Problem.
Faker fills columns; it can't tell stories. A three-pass LLM pipeline that generates relationally coherent demo data — food bloggers RSVP to wine tastings, high-spenders buy VIP tickets, friends actually share cities — for under two dollars a run through the Anthropic Batch API.