Writing from the workshop
202 articles on the parts that actually hurt.

Stop Writing JavaScript to Open Dialogs. commandfor Fixes It.
Every <dialog> and popover in your app still needs an addEventListener just to open and close — commandfor and the Invoker Commands API let the browser do it with zero JavaScript.
Stop Shipping Search Boxes With a Race Condition
Nov 7 · 6 min JavaScriptYou're Blocking Scroll by Default. passive: true Fixes It.
Nov 6 · 5 min NestjsNestJS 12.2: Why validationError.target Is Now undefined
Nov 6 · 12 min JavaScriptStop Hacking Base64 With btoa(). toBase64() Fixes It Natively.
Nov 5 · 5 min
Running the meeting is a different job than being in one
Being good in meetings and being good at running one are not the same skill, and nobody tells you that the day you get handed the calendar invite. Here's what the job actually is, and the sentence that ends a meeting before it turns into theater.
Nov 4, 2026 · 7 min
getCurrentPosition() Has No Default Timeout. That's the Trap.
A "find my location" button that works instantly on your laptop and hangs forever on a phone with a weak signal isn't flaky — it's getCurrentPosition() doing exactly what its defaults tell it to do. No timeout, no cached position, and a watcher nobody told to stop.
Nov 4, 2026 · 6 min
Your Canvas Is Freezing the Page. OffscreenCanvas Fixes That.
Click a button while your canvas animation is running and the whole page stalls — because the pixels it draws, your layout, and your input handling all queue up on the same main thread. OffscreenCanvas moves the drawing itself into a worker, so the UI keeps responding no matter how much canvas work is happening.
Nov 3, 2026 · 6 min
Next.js 16.4 ensureStatic: Locking Routes Fully Static
Next.js 16.4 stabilizes ensureStatic: lock a route's shell, prefetch, or full navigation to static output at build time, with a copy-paste cheat sheet.
Nov 3, 2026 · 13 min
React Activity Component: The State Between Render and Remount
React's Activity component hides a subtree without unmounting it — what state, effects, and renders actually do, plus a copy-paste cheat sheet.
Nov 2, 2026 · 14 min
Vue provide/inject: Why You Should Never Skip readonly()
Vue's guide says wrap provide() state in readonly() — most tutorials skip it. The mutation bug that causes, verified against Vue 3.5, plus a cheat sheet.
Nov 2, 2026 · 12 min
I Deleted My Scroll-Lock Library's Ugly Hack. scrollbar-gutter Replaces It.
Opening a modal shifts your whole page sideways because the scrollbar vanishes with it — the bug every scroll-lock library papers over with a JS width measurement and a padding-right hack. `scrollbar-gutter: stable` fixes it in one line now that Safari finally caught up.
Nov 2, 2026 · 6 min