$ ls posts/
Writing
Notes on frontend at scale, architecture, and the unglamorous engineering that keeps teams shipping.
FEATURED 2026-07-04
You probably don't need a state management library
Most React apps install a global store before they have a problem it solves. Here is how to tell when you actually need one.
react state-management preact frontend
- 2026-08-29
Sharing types between a .NET API and a TypeScript frontend without duplicating them
Hand-written TypeScript interfaces for a C# API drifted out of sync within weeks. Generating them from the OpenAPI spec instead caught a mismatched enum before it hit the client. dotnet - 2026-08-25
When Rust is worth it in a TypeScript-first stack
Rust earned a place in a Node backend exactly once this year, for one hot path a client's data pipeline couldn't get past. Here's where that line actually sits. rust - 2026-08-08
Cutting a GitHub Actions pipeline from 8 minutes to under 2
Concrete caching and job-splitting changes that cut a real GitHub Actions pipeline from eight minutes to under two, plus the two things I tried that weren't worth it. github-actions - 2026-08-01
Why Laravel is still my default for a client's internal CRUD app
For internal tools that are mostly forms and tables, Laravel's scaffolding beats a hand-assembled Node and React stack on time, not just preference. laravel - 2026-07-25
What changed when I swapped a Node script for Deno
I moved a small Node link-checker script to Deno expecting a syntax change. What I got was a permissions prompt that caught a bug node_modules had been hiding for months. deno