All posts

Topic

Substack

What will-change Actually Does to Your GPU Memory

July 8, 2026

At some point you hit a janky animation, Googled the fix, and found a Stack Overflow answer that said add will change: transform to the element. You added it. The animation got smoother. You moved on. Most developers sto

How the Browser Decides Your Font Is \"Loaded\"

July 1, 2026

You’ve seen it happen. The page loads, text appears in a fallback font, and then a fraction of a second later everything shifts as the real font kicks in. Or worse — the text is invisible for a moment, then pops in. You

Why localStorage Silently Fails in Safari

June 29, 2026

You ship a feature. It works perfectly in Chrome. You test it in Firefox. Still fine. Then someone files a bug that their settings aren’t saving, their preferences reset on every visit, the thing you built just doesn’t w

The KV Cache: Why Your API Bill Is Higher Than It Should Be

April 8, 2026

If you’ve used the Claude or OpenAI APIs at any meaningful scale and never touched prompt caching, you’ve been overpaying. Potentially by 90%. Not as a rounding error — as a structural tax on not understanding what’s hap

You don’t need a component for that

March 27, 2026

Somewhere along the way, React developers stopped writing HTML. Not literally — the JSX is still there, the tags are still there. But the instinct to reach for a plain <div or a <button or a <p without wrapping it in som

Tree Shaking Doesn’t Work (Most of the Time)

March 23, 2026

You install a library. You import one function. Your bundle grows by 500kb. “But I only used debounce ” you scream at webpack. Webpack shrugs. Lodash is in your bundle. All of it. Every function you didn’t use. Every uti

Why 0.1 + 0.2 !== 0.3 (And What To Do About It)

March 20, 2026

Type this into your browser console: 0.1 + 0.2 You get: 0.30000000000000004 Not 0.3 . Not even close. Off by 0.00000000000000004. This isn’t a JavaScript bug. This is how computers work. And it breaks shopping carts, fin

JavaScript Has Two Zeros (And One is Negative?)

March 16, 2026

I’ve been writing JavaScript for over a decade. I thought I understood numbers. Then someone showed me this: 0 === 0 // true\nObject.is 0, 0 // false Wait. What? JavaScript has two zeros. And they’re both zero. But one i

$0 and Friends: The DevTools Shortcuts You’re Missing

March 13, 2026

You’re debugging. You inspect an element. Now you want to test something on it in the console. So you do this: document.querySelector '.some complicated selector you have to type' Or worse, you right click, “Copy selecto

Stop Installing Form Libraries. The Browser Can Do This.

March 11, 2026

Every React form tutorial starts the same way: npm install react hook form\n or\nnpm install formik\n or\nnpm install yup zod @hookform/resolvers\n Then you write 50 lines of boilerplate to validate an email field. Here’

JavaScript Finally Fixed Dates (And It Only Took 30 Years)

March 4, 2026

The Temporal API just shipped in Chrome 144 and Firefox 139. If you’ve ever fought with Date objects, this is the moment you’ve been waiting for. The Date Object Was Always Broken Let me tell you a story. In 1995, Brenda

What Happens During a Browser Tab Crash

February 26, 2026

Had a tab freeze completely. Spinning beachball. Couldn’t click anything. Switched to another tab. That one worked fine. Closed the frozen tab. Browser kept running like nothing happened. Ten years ago, that would’ve cra

How Browsers Store and Manage Variables in Memory

February 24, 2026

Changed the order of object properties in my code. Same data, just rearranged. Performance got worse. What? Turns out JavaScript engines care about object shape. Not just what properties you have, but what order you crea

Z-Index Isn't a Number, It's a Context

February 19, 2026

Set z index: 99999 on a modal. Still rendered behind a dropdown with z index: 10 . What? Spent 30 minutes incrementing the number. 999999 . 9999999 . Added more nines. Didn’t help. Turns out z index doesn’t work how I th

Why Some Fonts Look Different on Mac vs Windows

February 10, 2026

Designed a site on my Mac. Looked great. Opened it on a Windows laptop. Same fonts, completely different appearance. Thinner, sharper, kind of harsh. Thought my CSS was broken. Nope. Just font rendering. The Thing Nobody

Why Your Favicon Needs So Many Sizes

February 3, 2026

Added a favicon to a site last week. Thought I was done. Then tested it on my phone. Looked like garbage. Turns out one favicon.ico file isn’t enough anymore. The Thing That Should Be Simple A favicon is just that little

You Don’t Need That Library

January 29, 2026

Installed a library last week to debounce a function. Then realized I could’ve written it in five lines. Felt a little dumb. The Thing We All Do Problem comes up. Google the problem. Find a library. npm install . Import

Why Array.forEach Exists When We Have for...of

January 20, 2026

Took me longer than I’d like to admit to understand why JavaScript has both forEach and for...of . They both loop through arrays. They look similar. Why have both? Turns out they’re actually pretty different once you loo