Dana Iti
UX.Front-end.Systems.
Dana Iti
How I WorkCase StudiesWritingContact
Reading mode
HomeWritingStatic 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.

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

Previous

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

Next

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

Related Posts

View all posts

© 2026 Dana Iti

·
AboutWhat's newContact

Related Posts

Engineering & Architecture

Next.js 16. Caching Finally Makes Sense

Next.js 16 flipped caching from implicit magic to explicit choice. Everything is dynamic by default now. You opt into caching instead of fighting mysterious behaviour.

22 Oct 2025•6 min
Next.jsCaching+2 More
Design & UX

Revamping My Website

My old site looked nice but felt wrong. This time I treated it like a system, not a portfolio. Every element had to justify why it existed or it got cut.

15 Oct 2025•7 min
DesignFrontend+3 More
AI

I Don’t Want AI to Replace Thinking. I Want It to Help People Think Better

Most AI tools throw answers at you. People don't need more answers. They need help thinking through the mess.

28 Sept 2025•2 min
FounderbaseAI+3 More