Dana Iti
UX.Front-end.Systems.
Dana Iti
How I WorkCase StudiesWritingContact
Reading mode
HomeWritingEngineering & ArchitectureStatic Rendering. Doing the Work Before Anyone Asks For It

Static Rendering. Doing the Work Before Anyone Asks For It - Pt 2

2 September 2025•4 min read
•By Dana Iti•Engineering & Architecture
Next.jsRenderingStaticFrontend ArchitectureSystem Design
Reading mode

Series: Part 2 of Rendering with Intent

Breaking down how I learned to choose rendering strategies intentionally rather than relying on defaults.

Previous: Rendering Blindly Cost Me Speed, Money, and Sanity. Here’s How I Fixed ItNext: I Wanted Static Speed Without Serving Yesterday’s Data. ISR Was the AnswerView all posts in this series

When I started using static rendering in WonderBook, it clicked that some pages don’t need to think, they just need to exist. Instant load speed was the bonus; permanence was the real win.

Static rendering works by doing the heavy lifting before a single user arrives. The HTML is generated during the build process, deployed to the CDN, and served instantly without touching a database or runtime.

That one decision removes time, cost and risk from every future request.

What static rendering actually does

Instead of rendering the page one user at a time, static rendering does it once at build time:

Build phase → Next.js generates HTML → CDN caches result → User requests page → CDN returns file instantly (no compute required)

No function, query and revalidation needed. The server isn't even in the path anymore.

When static rendering makes sense

✅ Use it when❌ Avoid it when
Content rarely changesData must be personalised
SEO mattersPage is session-dependent
Instant load mattersData changes frequently
There’s no user logicReal-time data is essential

Static is a promise: “This page can stay as-is until I explicitly rebuild.” That promise is where most mistakes happen, the mistake is making things static that shouldn’t be.

Static rendering in WonderBook

Static rendering made immediate sense for pages like Privacy Policy, Terms and the About section. They contain fixed text, don’t depend on any user, and should load immediately with zero client-side work.

Before I converted them, they were incorrectly using "use client". That caused 500ms+ before meaningful content showed, plus unnecessary hydration.

After switching them to static server components rendered at build time, they consistently displayed in ~50ms. That was a 10x improvement, without touching design or layout.

Why static speed feels different

Static pages remove:

CostWhere it disappeared from
TTFB latencyNo server processing
JavaScript hydrationPage loads as plain HTML
Database loadNo query per request
Cold server bootServed from CDN edge
Rendering CPU timeDone once, not every time

This is why static rendering often feels instant, because from the browser’s perspective, it’s just reading a document that already exists.

What would have gone wrong if I misused it

Static rendering fails when content cannot be frozen. For example:

  • A dashboard tied to a logged-in user
  • A public page with constantly updating ranking data
  • Anything with current session context
  • Real-time AI outputs or notifications
  • Pages that would need constant redeploys just to stay correct

Using static for these pages would have forced me to rebuild the entire app just to update content, or worse, served outdated or misleading data.

The mindset change it triggered

Static rendering introduced a new rule for me:

If a page doesn't need per-user logic or frequent updates, it shouldn't be recomputed per visitor.

That became my first rendering principle: Static-first, unless proven otherwise.

It forced me to justify dynamic rendering instead of defaulting to it.

Why static alone wasn’t enough

Some public-facing pages did change, but not constantly. For example, WonderBook’s Explore page needed to show public stories and total likes. I didn’t want users waiting on a live query every time, but I also couldn’t permanently freeze the page at build time.

That’s where static rendering hit its limits, and where I needed something more flexible, something that let me cache content but still refresh it without redeploying the whole app.

Which led me to ISR.

In case you missed the other posts, here they are:

The Rendering with Intent Series

  • Part 1: Rendering Blindly Cost Me Speed, Money, and Sanity. Here’s How I Fixed It
  • Part 2: Static Rendering. Doing the Work Before Anyone Asks For It [You are here]
  • Part 3: I Wanted Static Speed Without Serving Yesterday’s Data. ISR Was the Answer
  • Part 4: Switched to SSR When “Good Enough” Started Causing Real Problems
  • Part 5: When Static Pages Weren’t Enough, Client Components Took Over
  • Part 6: I Made Data Feel Faster Without Actually Speeding It Up
What static rendering actually doesWhen static rendering makes senseStatic rendering in WonderBookWhy static speed feels differentWhat would have gone wrong if I misused itThe mindset change it triggeredWhy static alone wasn’t enough

Previous

I Wanted Static Speed Without Serving Yesterday’s Data. ISR Was the Answer

Next

Rendering Blindly Cost Me Speed, Money, and Sanity. Here’s How I Fixed It

Related Posts

View all posts

© 2026 Dana Iti

·
AboutWhat's newContact

Related Posts

Engineering & Architecture

I Wanted Static Speed Without Serving Yesterday’s Data. ISR Was the Answer

I wanted static speed without serving stale data. ISR let me have both. Pages loaded fast and stayed current.

8 Sept 2025•3 min
Next.jsIsr+3 More
Engineering & Architecture

Rendering Blindly Cost Me Speed, Money, and Sanity. Here’s How I Fixed It

I built WonderBook without understanding rendering strategies. Cost me speed, cost me money, nearly cost me my sanity. Then I learnt how it actually works.

28 Aug 2025•4 min
Next.jsFrontend Architecture+2 More
Engineering & Architecture

Switched to SSR When “Good Enough” Started Causing Real Problems

Static and ISR worked great until they didn't. Some pages needed data fresh on every request. That's when SSR started making sense.

16 Sept 2025•3 min
Next.jsSSR+3 More