It’s time for modern CSS to kill the SPA 24th July, 2025 Native CSS transitions have quietly killed the strongest argument for client-side routing. Yet people keep building terrible apps instead of performant websites. The app-like fallacy “Make it feel like an app.” At some point during the scoping process, someone says the words. A CMO. A digital lead. A brand manager. And with that single phrase, the architecture is locked in: it’ll be an SPA. Probably React. Maybe Vue. Almost certainly deployed on Vercel or Netlify, bundled with a headless CMS and a GraphQL API for good measure. But the decision wasn’t really about architecture. It wasn’t even about performance, scalability, or content management. It was about interactions. About how the site would feel when you click around. The assumption was simple: Seamless navigation requires us to build an app. That assumption is now obsolete. The false promise of SPAs The reason SPAs became the default wasn’t because they were better. It was because, for a while, they were the only way to deliver something that felt fluid – something that didn’t flash white between pages or jank the scroll position. But here’s the uncomfortable truth: most SPAs don’t actually deliver the polish they promise. What you usually get is: A page transition that looks smooth, until you realise it’s just fading between two loading states Broken scroll restoration Inconsistent focus behaviour Delayed navigation while scripts rehydrate components Layout shift, content popping, or full-page skeletons A performance hit that’s entirely disproportionate to the effect This isn’t theoretical. Look at most sites built with Next.js, Gatsby, or Nuxt. They’re shipping kilobytes (often megabytes) of JavaScript just to fake native navigation. Routing logic, hydration code, loading spinners – all just to stitch together something that browsers already knew how to do natively. Instead of smoothness, you get simulation. And instead of a fast, stable, SEO-friendly...
First seen: 2025-07-25 22:10
Last seen: 2025-07-26 15:14