$ 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-10-13
Using the Web Locks API to stop duplicate work across browser tabs
Three open tabs means three token refreshes and three sync loops. navigator.locks gives you a mutex across tabs and workers in a few lines, if you know where it stops working. javascript - 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