// writing
Posts on development
A mix of technical deep-dives, career reflections, and dispatches from the road.

developmentSep 10, 2026· 4 min
node --test: The Test Runner You Already Have Installed
Node's built-in test runner has been stable since v20 and now handles mocking, coverage, watch mode, and TypeScript files. Here's what it does well and where it still falls short.
read more →

developmentSep 7, 2026· 4 min
Svelte Snippets: Reuse Markup Without a New Component
Snippets let you define reusable chunks of markup inline and render them like functions. They replace slots, kill the let: directive, and mean you stop extracting a component every time you repeat six lines.
read more →

developmentSep 6, 2026· 4 min
CSS scroll-state() Queries: Styling Stuck, Snapped, and Scrollable
Sticky headers, snapped carousel slides, and scroll shadows have all been JavaScript jobs for a decade. Scroll-state container queries hand that work back to CSS.
read more →

developmentAug 30, 2026· 4 min
Async Svelte: Using await Directly in Your Components
Svelte 5.36 lets you use await at the top level of a component, inside $derived, and in your markup. Here is how synchronized updates, boundaries, and $effect.pending() fit together.
read more →

developmentAug 27, 2026· 5 min
The Web Locks API: One Tab Does the Work, the Rest Wait
Your app already runs in five tabs at once, and they all think they are in charge. The Web Locks API gives the browser a real mutex so only one of them does the work.
read more →

developmentAug 24, 2026· 4 min
Form-Associated Custom Elements: Web Components That Belong in a Form
Custom elements can be real form controls. Here is how formAssociated, ElementInternals, and setValidity retire the hidden-input hack for good.
read more →

developmentAug 23, 2026· 4 min
Next.js Partial Prefetching: One Shell Per Route, Not One Per Link
Next.js 16.3 stops firing a prefetch request for every link in the viewport and caches one reusable loading shell per route instead. Here's what changes and how to turn it on.
read more →

developmentAug 20, 2026· 4 min
Declarative Partial Updates: Out-of-Order HTML Streaming Without a Framework
Chrome 148 ships experimental support for filling HTML placeholders out of order and streaming markup into the DOM. Here's how the new template-for and streamHTML APIs work, and what they replace.
read more →

developmentAug 17, 2026· 4 min
React's Activity Component: Hide UI Without Losing Its State
React 19.2's Activity component hides a subtree instead of unmounting it, so state, scroll position, and DOM survive the round trip. Here's how it behaves, what it does to your Effects, and where it costs you.
read more →

developmentAug 16, 2026· 4 min
revalidateTag vs updateTag: Next.js Split Cache Invalidation in Two
Next.js 16 gave cache invalidation two different functions instead of one, and the split maps to a real distinction: content that can lag versus content the user just typed.
read more →
// the newsletter