Blog
Long-form writing on streaming video, Chromecast CAF, AI-native development, and 25 years of building for the web. RSS feed.
Notes from a 4.7-heavy day, ahead of 4.8
I'm seeing the articles, I'm excited to test it. Here's what 4.7 actually looks like from inside a daily Claude Code loop, the friction I want 4.8 to address, and the work that would land if it does.
Why CSS transform: scale() lies about your scroll height
Naive zoom breaks the scroll bar. The fix is one extra wrapper div and a height calculation. The story of finding it.
Pre-paint animation hiding without flicker
useEffect runs after paint. If your animation hides an element from there, the user sees the unhidden state for one frame. Here's how to actually hide it.
260 stars, 6 nebulae, zero libraries
What a hand-coded canvas starfield actually costs in code, frame budget, and tuning hours. The starfield behind the /timeline page broken down.
Why I'm finally writing this down
Twenty-five years of war stories from streaming video, Chromecast, and the AI-native dev loop. Notes from the years I have not been writing them.