
Building a Headless CMS‑Powered Site with Next.js
Build a headless CMS‑powered Next.js site with content modelling, fetch layers, mapped front‑end data, preview support, and scalable rendering choices.
Articles
Next.js turns React into a full web platform, which means framework choices soon become architecture and operational choices. These articles cover how rendering and routing decisions carry into migration and deployment work, including the production cases where the framework's convenient default is not the right boundary.

Build a headless CMS‑powered Next.js site with content modelling, fetch layers, mapped front‑end data, preview support, and scalable rendering choices.

Multi‑tenant applications serve multiple customers from a single codebase. Here, I walk through building a scalable multi‑tenant web application using Next.js.

How deployment expectations moved from simple Netlify static deploys towards Vercel pipelines, previews, framework builds, observability, and rollback.

When you set up a custom domain in Vercel, the default vercel.app subdomain still serves your site, which can lead to duplicate content. Here's how to fix it.

Protect Next.js routes with Proxy, formerly Middleware, using authentication, authorisation, matchers, API request checks and current terminology.

Why static generation became more complex as CMS previews, ISR, cache invalidation, build queues, e‑commerce data, and platform expectations grew.

Next.js vs. Remix compared properly, across routing, data loading, mutations, caching, and the architectural trade‑offs teams actually feel in production.

Caching strategies for data fetching in Next.js, including force‑cache, revalidation, stale data trade‑offs, and the debugging traps teams hit in production.

Whilst replatforming an app, I came across this limitation in Next.js: you cannot (easily) access search parameters in an SSR layout. Here, I share my solution.

A practical guide to implementing authentication in Next.js with NextAuth.js, including sessions, callbacks, route protection, and router‑specific trade‑offs.

What headless CMSes are, how API‑first content supports multiple front ends, who benefits, and the trade‑offs between several popular platforms.
ReferenceError: Window is Not Defined in GatsbyFix window is not defined in Gatsby or Next.js by understanding SSR, guarding browser globals, lifecycle timing, dynamic imports, and third‑party modules.

How Incremental Static Regeneration affects CMS publishing freshness, including rebuild timing, stale pages, previews, and editorial expectations.

Preview Mode in Next.js explained with a headless CMS, draft content workflows, preview cookies, and how editors can see unpublished pages safely.

p Tags from Contentful List ItemsOne of the quirks of rendering Rich Text from Contentful is that list items come wrapped in paragraph <p> tags. Fortunately, this is a simple one to resolve.

next/imagenext/image explained with responsive sizing, lazy loading, layout shift reduction, and why image optimisation matters in real Next.js applications.

Dynamic imports and code splitting in Next.js explained with next/dynamic, lazy‑loaded components, SSR trade‑offs, and when splitting really helps.

getStaticPaths in Next.jsgetStaticPaths in Next.js explained with dynamic routes, pre‑rendered paths, fallback behaviour, and how static generation works for slug‑based pages.