Logo

Journal

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

Errors Aren't Strings: Four Unfashionable React 19 Patterns

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.

Next.jsTypeScriptReact.jsReact 19Server ActionsTailwind CSSShadCNZodFront-End DevelopmentAccessibility
The AI Agent's Best Tool Is Fewer Tools

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.

Next.jsTypeScriptPrisma ORMVercel AI SDKClaudeAgentic AIZodLLMs
Faker Gives You Fake Data. That's The Problem.

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.

Next.jsTypeScriptPrisma ORMPostgreSQLVercel AI SDKClaudeZodLLMsBatch APIPerformance Optimization

Let's
Face
Talk

If you'd like to talk about a potential opportunity, or just want to say hi, feel free to reach out.

find me here