Our website is heavy on 3D and animation, but every word on it — headings, menus, services, case studies, SEO titles, this blog — is editable without touching code. Here's the setup and why we chose it.

Why a headless CMS

A traditional CMS ties content to templates. A headless CMS stores content as structured data and lets the frontend render it however it likes. That gave us three things we cared about:

  • Design freedom: the site can be as custom as we want; the CMS doesn't dictate markup.
  • Structured content: a service or case study is a real object with fields, reused across pages, sitemaps and structured data.
  • Editor-friendly SEO: every page and document has its own title, description, keywords, share image and canonical URL.

Why Sanity

Sanity's content lives in a hosted "Content Lake" queried with GROQ, and the editing Studio is a React app we configure in code. We embed it at /studio and also deploy it to Sanity's hosting. The schema is TypeScript, so content models are versioned and reviewed like any other code.

Static pages that never go stale

Static pages are the fastest and most SEO-friendly option, but static usually means "stale until the next deploy". We avoid that with on-demand revalidation:

  1. Every page reads content through cached functions tagged sanity.
  2. When an editor publishes, Sanity sends a signed webhook to an internal API route.
  3. The route verifies the signature, then invalidates the sanity tag.
  4. The next visitor gets a freshly rendered page — usually within a couple of seconds of publishing.
const { isValidSignature } = await parseBody(req, process.env.SANITY_REVALIDATE_SECRET);
if (!isValidSignature) return new Response("Invalid signature", { status: 401 });
revalidateTag("sanity", { expire: 0 });

SEO built into the content model

Because SEO lives next to the content, search metadata never drifts out of sync. The site also generates its sitemap, robots rules, RSS feed and schema.org structured data — organisation, services, articles, breadcrumbs, FAQs — straight from the same documents.

Security basics

  • The website reads with a read-only token; it can never change content.
  • Write tokens are only used by migration scripts, never shipped to the browser.
  • Webhooks are rejected unless their signature matches a shared secret.
The best CMS setup is the one where marketing never has to file a ticket to change a headline.

Would we do it again?

Yes. The combination gives us a bespoke, fast, animated site that the whole team can edit safely. If you're planning a site where design and content both matter, this is the architecture we recommend.