The blog

Writing from the workshop

204 articles on the parts that actually hurt.

section
Your Required Field Turns Red Before You Type Anything
CSS

Your Required Field Turns Red Before You Type Anything

A signup form's email input shows a red border the instant the page loads — before the visitor has typed a single character. The obvious CSS causes it, and the obvious fix is a native pseudo-class nobody reaches for first.

Sep 8, 2026 · 5 min
Web Workers in JavaScript: The Complete Guide
JavaScript

Web Workers in JavaScript: The Complete Guide

Learn JavaScript Web Workers step by step: message passing, transferable objects, error handling, and a copy-paste cheat sheet for offloading work.

Sep 7, 2026 · 13 min
One CSS Property Replaces Your Checkbox Hack
CSS

One CSS Property Replaces Your Checkbox Hack

Recoloring a checkbox to match the brand usually means appearance: none, a hand-drawn checkmark, and a rebuilt focus ring. accent-color does the same job in one line — and knowing where it stops matters as much as knowing that it works.

Sep 7, 2026 · 4 min
Screen Wake Lock API: Keep the Screen On Without the Silent-Video Hack
JavaScript

Screen Wake Lock API: Keep the Screen On Without the Silent-Video Hack

Cooking sites, workout timers, and boarding-pass pages used to autoplay an invisible, muted, looping video for one job only: stopping your phone from locking its screen. The Screen Wake Lock API replaces that hack with three lines of JavaScript — and it comes with one gotcha the docs bury.

Sep 6, 2026 · 5 min
React Compiler 1.0: What useMemo You Can Delete
React

React Compiler 1.0: What useMemo You Can Delete

React Compiler 1.0 is stable. Here's the re-render model it automates, which useMemo/useCallback/memo calls you can delete, and what still needs you.

Sep 5, 2026 · 13 min
Your Timer Doesn't Know You Tabbed Away
JavaScript

Your Timer Doesn't Know You Tabbed Away

window blur feels like the obvious way to detect an idle tab, and it's wrong in ways that only show up in production. The Page Visibility API answers the actual question — can anyone see this? — so polling, timers, and video stop wasting work the moment nobody's looking.

Sep 5, 2026 · 5 min
The await That Silently Breaks navigator.clipboard.writeText()
JavaScript

The await That Silently Breaks navigator.clipboard.writeText()

navigator.clipboard.writeText() only works while the document is focused and the user gesture is still fresh. Any await before the call can let both expire, so a copy button fails with an uncaught NotAllowedError and nobody ever sees why.

Sep 3, 2026 · 5 min
You're not quiet in meetings, you're editing
Meetings and rooms

You're not quiet in meetings, you're editing

The reason you don't speak up isn't confidence. Everyone else is thinking out loud while you wait for your thought to be finished — and a good point at minute thirty is worth less than a rough one at minute twelve. Here's how to land it on time.

Sep 2, 2026 · 9 min
Shadow DOM Needed JavaScript to Exist. Now It Doesn't.
JavaScript

Shadow DOM Needed JavaScript to Exist. Now It Doesn't.

attachShadow() is a JavaScript-only API with no HTML serialization, so a server-rendered web component ships an empty host element until the client hydrates it. Declarative Shadow DOM attaches the real shadow root during HTML parsing — zero JS required.

Sep 2, 2026 · 5 min
Next.js Cache Components Explained (with Cheat Sheet)
Nextjs

Next.js Cache Components Explained (with Cheat Sheet)

How Next.js Cache Components decide what's static, what's cached, and what streams — the use cache directive, cacheLife, and Suspense explained.

Sep 1, 2026 · 14 min
Your SPA Router Reacts to Navigation. The Navigation API Intercepts It.
JavaScript

Your SPA Router Reacts to Navigation. The Navigation API Intercepts It.

Double-click a link during a slow route change and most SPA routers render two pages and settle on the wrong one — because they're listening for navigation after it already happened. The Navigation API lets you stop it before it starts.

Sep 1, 2026 · 5 min
Debounce and Throttle in JavaScript: The Complete Guide
JavaScript

Debounce and Throttle in JavaScript: The Complete Guide

Learn debounce and throttle in JavaScript step by step, with worked examples, edge cases, and a copy-paste cheat sheet for search, scroll, and resize.

Aug 31, 2026 · 14 min