Web · March 17, 2026 · 8 min

Next.js SSR for e-commerce, the boring honest version

From Chinioti Wooden Art: how I think about SSR vs dynamic rendering, MongoDB schemas built for aggregation, and where to put the image optimization so mobile actually loads.

Building the Chinioti Wooden Art storefront was a lesson in resisting cleverness. On low-bandwidth markets, the fundamentals — render strategy, schema design, image discipline — matter more than any framework trick. Here's the boring, honest version of what actually moved the needle.

SSR for crawlability, dynamic where it earns it

Product pages are server-rendered so search engines can index the full catalog. The cart and account flows are dynamic. Mixing the two on a per-route basis kept time-to-first-byte low without complicating the data layer.

The mistake is to pick one rendering mode for the whole app. Route-by-route is the right granularity: render statically what crawlers and buyers need fast, go dynamic only where personalization demands it.

Normalize schemas for the writes you actually do

The workshop edits products, not aggregate stats. So the MongoDB schemas are normalized rather than denormalized — write-side simplicity wins over read-side speed at this scale. Indexed aggregation pipelines handle the catalog and order rollups without a separate warehouse.

Premature denormalization is a tax you pay on every edit for a read speed you may never need. Match the schema to the access pattern in front of you.

Core Web Vitals are the SEO strategy

On low-bandwidth markets, performance is the ranking lever. Optimize images and font loading before you touch a single meta tag. Explicit image sizes everywhere — the difference between auto-sized and explicit-sized images on mobile is the difference between a sale and a bounce.

SEO on a new domain is a 90-day game. Keep expectations grounded, instrument what's actually moving, and fix the fundamentals first.

A small admin saves both sides money

Even a lightweight CMS-style admin means the workshop owner swaps a product photo themselves instead of filing a ticket. Catalog updates ship without engineering involvement — which is the whole point of giving a craft business a digital surface.

Takeaways

  • Choose rendering mode route-by-route: SSR for crawlable content, dynamic only where personalization needs it.
  • Normalize schemas around your real write patterns instead of denormalizing for hypothetical reads.
  • Treat Core Web Vitals as the SEO strategy on low-bandwidth markets — fix performance before meta tags.
  • A lightweight admin lets non-engineers update content and keeps you out of the ticket queue.

Related case study

Chinioti Wooden Art

Modern Next.js storefront for traditional Chinioti woodworking with optimized SSR and SEO.

Read the case study