Engineering
Performance budgets, rendering trade-offs and the boring, load-bearing code that lets everything else be interesting.
Core Web Vitals in the field: budgets that survive sprints
A practical Core Web Vitals program: LCP element archaeology, INP triage, CI-enforced budgets, and real-user monitoring on a shoestring. Recipes that work.
The caching layers cake: HTTP, ISR and the discipline of invalidation
A layered caching model for content-heavy sites — CDN, full-page, data and application caches — plus the purge-on-publish pattern that ends 3am incidents.
i18n beyond the strings file
The hard 20% of internationalisation: plural rules, dates and currency, RTL layout, locale-aware content modelling, and design tokens that change per language.
Local-first on the web: sync engines, honestly
What local-first architecture actually costs and buys: IndexedDB patterns, CRDT trade-offs, schema migrations, sync-status UX, and when server-first is simply right.
Islands architecture: sprinkle, don't soak
When islands beat a full SPA: hydration costs, interaction latency budgets, the pragmatic hybrid pattern we use on content-heavy sites, and the traps.
A testing strategy that ships: what to test, what to skip, what to delete
Our testing pyramid, rebuilt for reality: contract-first unit tests, a thin layer of Playwright journeys, flake budgets, and a CI bill we defend monthly.
Generating PDFs from web tech without tears
Invoices, statements and reports generated from web tech: print CSS vs headless Chrome vs canvas composition, scored honestly — plus when PDF is the wrong answer.
Edge rendering: an honest guide for content sites
What edge rendering actually buys a content site, what it quietly costs, and the decision framework we run before moving a single route to the edge.
React Server Components: the trade-offs nobody puts in the talk
A sober field account of React Server Components: where they genuinely help, where the mental-model and caching costs bite, and how we decide per project.
Engineering keyboard-first interfaces
Roving tabindex, focus management without traps, shortcut systems users can actually discover, and the test setup that treats the keyboard as a primary input.
Feature flags without the graveyard
Flag discipline for product squads: lifecycle stages, a naming grammar, expiry automation, analytics hooks, and the monthly flag funeral that keeps codebases young.