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.
Next.jsTypeScriptReact.jsReact 19Server ActionsTailwind CSSShadCNZodFront-End DevelopmentAccessibility

I Haven't Written fetch() in a Year
Every React app has a fetch-shaped hole in it, and a 40 KB library to manage the cache you didn't need. RSVPed has zero client fetches: one server-side gateway, progressive RSC streaming, and transitions for everything else. Half the bundle, no waterfalls, no stale data.
Next.jsTypeScriptReact.jsReact 19React Server ComponentsServer ActionstRPCPerformance OptimizationFront-End Development