A PUBLIC SERVICE ANNOUNCEMENT

STOPUSING SSR

You don't need it. Your users don't need it. Your Vercel bill does.

7 REASONS SSR IS A LIE

SEO? YOUR APP IS BEHIND A LOGIN

Crawlers never see it. You added a server for zero SEO benefit. Congratulations.

HYDRATION KILLS YOUR PERF GAINS

The page looks loaded. Nothing works. Users click into the void. The browser re-executes all that JS anyway.

SLOW SERVER = WORSE TTFB THAN A SPA

That cold Lambda is slower than a CDN-cached HTML file. You traded guaranteed fast for maybe fast.

YOU'RE PAYING PER REQUEST. AT SCALE.

A SPA on a CDN costs pennies regardless of traffic. SSR scales your bill linearly with your users.

RSC IS COMPLEXITY WITH BRANDING

"use client" everywhere. Two component models. Library incompatibilities. You signed up for a mental model tax.

IT'S MONEY-DRIVEN DEVELOPMENT

Nobody asked if SSR fits your product. They saw an "article" about it. Guess who paid the author to write it? Vercel did.

YOUR USERS CAN RUN GAMES. THEIR BROWSER IS IDLE.

AVERAGE SMARTPHONE
~15 GFLOPS
enough to run GTA: San Andreas natively
AVERAGE LAPTOP
~3 TFLOPS
more GPU power than a PS4
WHAT SSR OFFLOADS
HTML STRINGS
concatenating divs. on a server. you pay for this.
WHAT THE BROWSER DOES INSTEAD
SITS THERE
waiting for your server to finish its string work

The device in your user's pocket has a multi-core CPU, a GPU with hardware ray tracing, and gigabytes of RAM. It streams 4K video, runs machine learning models locally, and renders 3D games at 120fps. And you're paying a server to concatenate HTML strings for it. The client is not the bottleneck. It never was.

THE RECEIPTS

Documented, real-world billing incidents from serverless platforms. A static CDN-hosted SPA would have cost every single one of these people $0.

And if your use case is a landing page - which is the most common justification for SSR - Cloudflare Pages and GitHub Pages are free. Completely free. Unlimited bandwidth on Cloudflare. No invocations. No memory billing. No cold starts. No Vercel account needed. A landing page is static HTML. It has always been static HTML.

WELCOME BACK, PHP

Want SSR? Have you tried PHP? It's been doing this since 2003. At least it was honest about it.
- EVERY FRONTEND DEVELOPER, GOING IN CIRCLES

The industry spent a decade escaping server-rendered templates. Now it's back, with a $20/month npm package and a Vercel invoice. But here's the painful part - PHP actually did it better.

NO BUILD STEP

You edited a .php file and refreshed. That was the deploy. No webpack. No turbopack. No whatever the build tool you are using. No 47-second cold build. No "wait for the edge function to propagate." You saved the file. It was live.

$5/MONTH. FOREVER.

A shared hosting plan on literally ANY VPS out there. Five dollars a month. Handled thousands of requests. Nobody got a $96,000 bill because someone refreshed their page too fast. The server was always warm - it was just sitting there.

THE MENTAL MODEL WAS HONEST

PHP never pretended to be something else. It was a template language. Server gets request, fills in variables, sends HTML. No "hydration boundaries." No "use client". No wondering which environment your component is running in. It ran on the server. That was the deal.

OPCACHE BEAT YOUR LAMBDA

PHP 7+ with OPcache serves rendered HTML in under 10ms on a $5 VPS. Your Next.js serverless function cold-starts in 400ms, then takes another 200ms to render. The 2003 technology is faster than the 2024 technology. Let that sit with you.

NO JAVASCRIPT REQUIRED

PHP pages worked with JavaScript disabled. Completely. Forms submitted. Pages loaded. Data appeared. SSR with React requires JS for hydration - disable it and you get a broken, non-interactive shell that looks loaded but isn't.

IT STILL RUNS 77% OF THE WEB

WordPress, Laravel, Wikipedia, Facebook (yes, still). PHP didn't die - it just stopped being cool to talk about. Meanwhile Next.js developers are reinventing server-side templating and calling it innovation.

The difference is: PHP was a pragmatic tool that happened to render on the server. SSR in 2024 is an ideological choice dressed up as a performance story, sold to you by a company that you pay to run your own code. Per invocation.

SPA VS SSR

SSR / NEXT.JS

  • Server required - costs money at scale
  • Cold starts slow your TTFB
  • Hydration: looks ready, isn't ready
  • Two component models to understand
  • Library compatibility lottery
  • DDoS = your bill, not just your uptime
  • Paying to concatenate HTML on a server
  • Vercel has a $20B reason to push this

SPA / VITE

  • Static files on a CDN - scales free
  • Deploy to Cloudflare Pages in minutes
  • One rendering model, no surprises
  • Every package just works
  • Client does the work - it has a GPU
  • DDoS hits the CDN, not your wallet
  • Fast enough for 99.999% of use cases
  • No framework with a conflict of interest

DO YOU ACTUALLY NEED SSR?

Do anonymous users land on specific URLs from search engines? If it's behind a login - it doesn't matter what you answer here.

NO → STOP

Does each URL need unique metadata for SEO or social sharing? Generic og:title on every page doesn't count.

NO → STOP

Is the content different per URL - not just per user? Personalised dashboards don't benefit from SSR.

NO → STOP
✓ You answered NO to at least one question. Build the SPA. Deploy to Cloudflare Pages. Ship it today.
You answered YES to all three. SSR might be justified. You are in the minority. Proceed with caution.

BUILD THE DAMN SPA

Is your content public? Does SEO actually matter? Do anonymous users land on it? No? Then you don't need SSR. Ship a Vite app. Deploy to Cloudflare Pages. Go home.

START WITH VITE ↗ CLOUDFLARE PAGES ↗