The blog

Writing from the workshop

202 articles on the parts that actually hurt.

section
Running the meeting is a different job than being in one
Meetings and rooms

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.
JavaScript

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.
JavaScript

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
Nextjs

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

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

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.
CSS

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