Back to Work
CompletedCase study

CMS 2.0 — Decoupling Content and Design at Scale

The platform began as a single Contentful space and one brand, with static apps a developer deployed to production by hand. As more brands came on, content types climbed toward Contentful’s ceiling and every design change waited on engineering. I helped re-architect the CMS — decoupling content from presentation with Studio and giving each brand its own small space — so marketing ships new designs without new content types, new components, or a developer deploy.

Contentful StudioMulti-tenant SSRCMS architectureCompositionMUI
01

Where it started

This wasn’t one migration — it was three architectural evolutions over several years: moving from static publishing to server rendering, from single-brand to multi-brand, and finally from one shared Contentful space to composable, per-brand authoring with Studio.

When I joined, there was one Contentful space and one brand — Aspen Dental, served by two Gatsby apps: Aspen Dental Marketing and Aspen Dental Office Details. Both were statically built and deployed to production manually.

That made every content change an engineering task. Marketing would edit in Contentful, reach out to a developer, and wait for someone to build the artifact and deploy it to prod before the change was live. Content was ready in the CMS long before it reached a visitor.

02

Scaling to multiple brands

Then ClearChoice wanted to onboard onto Contentful. Rather than fork the Aspen apps again, we consolidated them into two multi-tenant Next.js apps — Digital Marketing and Office Directory — that are server-side rendered with dynamic fetching. The payoff was immediate: a change in Contentful is live in production instantly, with no developer deploy in the loop.

The marketing app holds each brand’s configuration, and a shared component library on the web renders templates built one-to-one from Contentful content types using an MUI theme and components; the office-directory app works the same way. It scaled — but it had a tax built in:

  • Every new brand and design brought new content types.
  • Each new content type needed a one-to-one matching React component in the shared library.
  • So growth in the content model meant growth in code, in lockstep — the same coupling, one layer up.
03

The content-type ceiling

That coupling had a hard limit. Contentful caps content types per space by plan, and more brands kept pushing us toward it — we reached 147 of a 150 content-type ceiling, with the next tier waiting just past 150.

So we ran a deliberate reduction campaign: removing content types that were unused and combining several into one wherever the model allowed. It brought us from 147 down to a little over 100 — real progress, but we couldn’t get under 75 (the threshold to drop to a lower tier) without cutting structure the brands genuinely needed.

That was the signal. Pruning had hit diminishing returns, which proved the problem wasn’t how many content types we had — it was the one-type-per-design model that made new types inevitable in the first place. Reduction alone would never win; the model had to change. In the near term I also kept the existing entries maintainable with a library of batch-update scripts, but CMS 2.0 was the structural fix.

04

CMS 2.0: decoupling content from design

The shift, end to end:

CMS platform evolution, in three stagesStage one, the Gatsby era: Aspen Dental alone, served by two statically built Gatsby apps (Aspen Dental Marketing and Aspen Dental Office Details) deployed to production by hand, with one content type mapped to one React component. Stage two, multi-tenant Next.js: more brands onboard onto two server-rendered apps (Digital Marketing and Office Directory) that publish instantly, while the one shared Contentful space climbs to 147 of a 150 content-type ceiling under the same one-type-per-component model. Stage three, CMS 2.0 with Contentful Studio: each brand gets its own small space and a single app, with layouts composed from a few core content types instead of new ones.01Gatsby eraAspen Dental · one spaceContentful — shared spacefew content types · room to spareAspen Dental Marketing + Office Detailstwo Gatsby apps · static · manual deploy1 content type = 1 React componentconsolidate · go SSR02Multi-tenant SSRmore brands · one shared spaceContentful — one shared space147 of 150 content types — near the ceilingDigital Marketing + Office DirectoryNext.js multi-tenant · SSR · instant publish1 content type = 1 React componentdecouple · compose03CMS 2.0 · Studioa space per brandStudio — space per brandAspen DentalClearChoice+ nextfew core types · stays smallOne app per brandincl. office directory · dynamic fetchfew core types → many layoutsmanual deploys → instant publishat consolidation147 content types → small per-brand spacesstructural cap with Studio
Three stages — Gatsby (static, manual deploys) → multi-tenant Next.js (one shared space at the ceiling) → CMS 2.0 Studio (a small space per brand).

We explored Contentful Studio to separate content from presentation — a small set of core content types, with flexible composition for layouts instead of a new type for every design.

Composition with core atoms

  • Define a small set of reusable “atoms” / building blocks.
  • Editors assemble layouts by composing atoms and binding content.
  • New designs get created without new content types or new components.

That small set of atoms became the backbone of every page — which later made keeping the library clean its own challenge. I wrote a custom audit to track which experiences use which atoms, so they can be versioned and retired safely.

A space per brand

In the new model, every brand gets its own Contentful space and a single marketing app (office-directory pages included). Because Studio composes layouts from a small, stable set of core content types — fewer than 15 today, with no need for more on the horizon — each space stays comfortably small, and the ceiling problem doesn’t recur as brands are onboarded one at a time. It’s a structural cap on sprawl, not a manual one we have to keep enforcing.

05

My role

  • Core contributor to CMS 2.0 exploration and implementation
  • Helped shape the architecture to reduce content-type sprawl
  • Worked the content-type reduction — removing and combining types to buy runway
  • Contributed to the multi-tenant SSR apps and the shared MUI component library
  • Partnered with design/content teams to define the new authoring workflow

Results

  • Reduced the shared space from 147 content types to a little over 100 through targeted pruning.
  • Reframed the real fix: Studio composition caps content types structurally, so new designs no longer create new types.
  • One content model no longer constrains every brand.
  • Per-brand spaces run on a small, stable set of core content types — fewer than 15 today — keeping each brand clear of the ceiling as it onboards.
  • Multi-tenant SSR replaced manual artifact deploys — content changes go live in production instantly.
  • New layouts ship without new content types, new components, or a developer in the loop.
  • Engineering moved off the critical path for routine design and content changes.
06

Why this matters

CMS 2.0 shifts engineering from being a delivery bottleneck to being a platform enabler — improving time-to-market, keeping each brand’s Contentful footprint sustainable, and reducing long-term complexity as more brands come on board.

Continue exploring

Engineering notes

Related case studies