The blog

Writing from the workshop

119 articles on the parts that actually hurt.

section
Your fetch() Is Still Running After the User Left
JavaScript

Your fetch() Is Still Running After the User Left

Stale requests, race conditions in search boxes, state updates on unmounted components — these are all the same bug: async work you forgot to cancel. AbortController is the fix.

Jul 5, 2026 · 4 min
You reached for !important again. @layer is the real fix.
CSS

You reached for !important again. @layer is the real fix.

When a third-party reset beats your styles and your own utilities lose to an ancient nested rule, the problem isn't your selectors. It's that your stylesheet has no architecture. @layer adds one.

Jul 4, 2026 · 5 min
The page transition you pay a library for is now free
CSS

The page transition you pay a library for is now free

You reach for Framer Motion or GSAP to make navigation feel smooth. The View Transitions API does the same thing natively — and the starting price is a single CSS rule.

Jul 3, 2026 · 5 min
:has() isn't a parent selector. It deletes JavaScript.
CSS

:has() isn't a parent selector. It deletes JavaScript.

Everyone calls :has() the parent selector. That framing is too small — it's a condition evaluator that obsoletes a whole category of class-toggling JS, and it's in every browser today.

Jul 2, 2026 · 4 min
Your Save button waits 300ms for nothing. Stop it.
JavaScript

Your Save button waits 300ms for nothing. Stop it.

Every click that spins for a server round-trip is a choice you made. Optimistic updates remove the wait — but the rollback is where almost every implementation quietly breaks.

Jul 1, 2026 · 4 min
Your card breaks in the sidebar. Here's the real fix.
CSS

Your card breaks in the sidebar. Here's the real fix.

A component that looks perfect in the main column falls apart in a sidebar — and the viewport width says everything's fine. The bug isn't your CSS. It's the question your CSS is asking.

Jun 30, 2026 · 4 min
The URL Is Your Best State Manager
JavaScript

The URL Is Your Best State Manager

You're storing filter state, search queries, and pagination in useState — and losing it every time someone refreshes. The URL already does this better.

Jun 29, 2026 · 4 min
Server Components Without the Hype: A Mental Model That Sticks
React

Server Components Without the Hype: A Mental Model That Sticks

RSC isn't 'SSR 2.0' and it isn't magic. Here's the one distinction that makes the whole model click.

Jun 28, 2026 · 3 min
TypeScript Won. Here's What That Actually Bought Us.
TypeScript

TypeScript Won. Here's What That Actually Bought Us.

The 'should we use TypeScript?' debate is over. The interesting question is what all those types are quietly enabling now.

Jun 28, 2026 · 3 min
Your Design System Is Now an API for Machines
Design Systems

Your Design System Is Now an API for Machines

Component libraries used to be for humans. Now they're the rails an AI plans against — and that changes how you should build them.

Jun 26, 2026 · 3 min
The Frontend Is Becoming a Conversation: Where UI Engineering Goes Next
AI

The Frontend Is Becoming a Conversation: Where UI Engineering Goes Next

Frontend stacks consolidated, the rendering wars cooled off, and AI quietly changed what a frontend engineer actually does all day. Here's where it's heading.

Jun 25, 2026 · 4 min