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
July 6, 2026
If you have used Next.js, Nuxt, Remix, or any server rendered React framework, you have almost certainly seen this warning at some point: Warning: Text content did not match. Server: "Hello" Client: "Hello " Or the page
July 3, 2026
Scroll handlers are one of those things that seem completely reasonable until you understand what actually happens when you attach one. Every time the user scrolls, the browser fires your handler. Not once per frame. Not
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
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
June 26, 2026
Open your browser console right now and type this: typeof null It returns "object" . It’s wrong. Everyone knows it’s wrong. The people who built JavaScript knew it was wrong. And it will never be fixed. Here’s the full s
June 24, 2026
We spent years arguing about code splitting. Webpack configs, bundle strategies, route based splitting, component level splitting; entire articles written about how to slice your JavaScript so users don’t download what t
June 22, 2026
At some point, every JavaScript developer writes this: const copy = JSON.parse JSON.stringify original ; You know it’s ugly. I know it’s ugly. We all wrote it anyway because it worked — until it didn’t. The thing is, JSO
June 5, 2026
Progressive Web Apps PWAs promised us a beautiful, offline first future. We were told that by implementing service workers, we could bypass the unpredictable volatility of mobile networks, cache our core application shel
June 3, 2026
Go to any frontend engineering forum, search for typography, and you will find yourself staring into a deep, dogmatic rabbit hole. The battle lines were drawn a decade ago: on one side, you have the pixel purists who wan
June 1, 2026
If you want to start a flame war in a room full of JavaScript developers, just bring up type coercion. We’ve all seen the memes. We all know that == evaluates to true , and we’ve all laughed at the bizarre, dark corners
May 29, 2026
In my last two posts, we looked at how running machine learning models directly in the browser can completely crash your Core Web Vitals, and why a model’s underlying architecture matters far more than its raw parameter
May 27, 2026
If you hang around frontend engineering circles long enough, you’ll notice we have a universal rule of thumb for optimization: smaller is better . Smaller bundle sizes mean faster time to interactive. Smaller image asset
May 26, 2026
We are living in the golden age of offloading computation to the client. Frameworks are faster, edge networks are smarter, and libraries like Transformers.js have made running actual neural networks inside a browser look
April 17, 2026
The gap between \"it's accurate\" and \"I believe it\" is wider than you think — and entirely your fault to close
April 15, 2026
The label that was supposed to sell your product is now the reason users don't trust it
April 13, 2026
The model is wrong. You can tell because you happen to know the answer. But your user doesn’t — and the interface gave them no reason to doubt it. This is the central UX failure in AI products right now. Not that models
April 10, 2026
There’s a specific kind of pain reserved for sitting in a linear algebra lecture, staring at a matrix multiplication problem, and thinking: when will I ever use this? Your professor said “it’s foundational.” You filed th
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
April 6, 2026
Every vendor selling fine tuning will tell you fine tuning is the answer. Every vendor selling a vector database will tell you RAG is the answer. Every API provider will tell you prompting is the answer. None of them are
April 3, 2026
You’ve been paying for tokens since the day you made your first API call. You know the rough “4 characters per token” heuristic. You’ve probably hit a context limit at least once and scrambled to truncate your prompt. Bu
April 1, 2026
There is a prop in React that every single developer uses, that shows up in almost every component that renders a list, that junior and senior devs alike type without thinking — and almost nobody actually understands wha
March 30, 2026
Let me tell you about the moment the idea clicked. I needed to summarize a PDF. Nothing exotic — a long report, wanted the key points, didn’t want to read the whole thing. So I went looking for a tool. Found one. Clean U
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
March 25, 2026
Here’s a sentence that will get me ratio’d on Twitter: most Tailwind developers don’t know CSS. Not “aren’t good at CSS.” Don’t know it. They know flex , items center , gap 4 . They know how to scan a Tailwind docs page.
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
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
March 18, 2026
Most languages have one way to check if two things are equal. Maybe two if you’re fancy. JavaScript has nine . And they all give different answers. On the same values. Let me show you the madness. The Basics That Aren’t
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
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
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’
March 9, 2026
Every time you build a modal, you write the same JavaScript.
March 6, 2026
I’ve been building web components with Stencil for years now.
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
March 2, 2026
And we’re all pretending Webpack Module Federation is the answer
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
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
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
February 17, 2026
Reviewed a pull request recently for a local project/demo. One of my friends who is also a contributor to that demo changed all the onClick={doThing} to onClick={ = doThing } . Asked why. They said “that’s how the tutori
February 12, 2026
Spent years writing CSS before I actually understood the cascade.
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
February 5, 2026
Or: Why understanding how browsers work might be your best career move right now
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
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
January 27, 2026
Over the course of my career, I spent an embarrassing amount of time confused about these three.
January 22, 2026
I’ve typed npm install probably ten thousand times.
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
January 15, 2026
Web Page DOM & Accessibility Tree that gets generated out of it
January 13, 2026
I changed a button’s background color last week. Took me one line of CSS. My browser had to make about fifteen decisions in three milliseconds. Felt a little bad about it, honestly. The Thing You See You write some CSS.
January 12, 2026
Why frontend development is way more than what it looks like from the outside