How a page ships: without shipping code.

View as Markdown
Last updated September 18, 2026

The Lifecycle

Six steps. The first two ship through git, PR, and a deploy (your normal SDLC). The next three ship through Studio's publish: same React, same CMS, no rebuild. Below: where each step lives, who owns it, and what you don't have to repeat per page.

Click to enlarge

The engineering lifecycle: side by side

The Section / Template model changes what each step of building a page looks like. Without Studio, every page's layout, fetch, and prop-mapping is hand-wired in code. Every layout change ships as a code change. With Studio, two new steps (build Sections and build Templates) turn a page into a composition that authors can rearrange without a deploy.

Click to enlarge
Click to enlarge

The per-page flow: before / after

Once your team's engineering lifecycle is in place (above), every individual page moves through this before / after, a two-column decomposition of what a developer actually does per page, with the code that ships in each column.

Click to enlarge

For the horizontal one-scan version optimised for first-touch readers, see Where Studio fits in your day-to-day flow on the docs home.

What you do, side-by-side

StepWithout StudioWith Studio
SetupApp shell + Delivery SDKApp shell + Delivery SDK + Studio SDK + canvas route + ONE catch-all template route (handles every URL)
Build componentsAuthor + Storybook (isolated, fixtures)Author + Storybook + register in Studio (1-liner or via CLI)
Compose multiple componentsIn code, per pageIn Studio as Sections (reusable, previewable with real data)
Build a pageHand-code layout + data-fetch + prop-mapping per pageBuild a Template once, drop Sections, bind to fields, done
Change page layoutCode change, then PR, then redeployAuthor in Studio, then publish
Re-map a prop to a different CMS fieldCode change, then PR, then redeployClick the binding, pick a different field, then publish
Preview a composed page with real dataBuild + deploy + visit URLOpen the Section/Template canvas, pick a preview entry
Launch a new content type pageNew route + new layout file + new fetcherDrop a new Template against the content type, drop Sections

What stays the same

Studio isn't trying to take over your stack:

  • Your components stay in your repo: same build, same bundler, same deploy
  • Your design system stays sovereign: Studio uses your components, tokens, breakpoints. Not its defaults
  • Contentstack stays Contentstack: entries, content types, locales, publishing, branches, webhooks all work the same way
  • Storybook still does its job: isolated component preview is still its lane
  • Your existing pages remain functional: Studio is additive. You can adopt it Section-by-Section, Template-by-Template

When you'd still use code (and why that's fine)

Studio is for layout + composition + binding. Rendering, data fetching, and business logic are still better done in code:

  • Component implementation itself (Studio doesn't write components for you: it composes them)
  • App-level concerns (auth, analytics, error boundaries). Studio handles page routing via Template URL patterns + a catch-all, but the surrounding app shell stays in code
  • One-off complex logic inside a component (data transformation, animations, integrations)
  • Server-side data fetching strategy (Studio supports CSR + SSR but you choose the path)

The right way to think about Studio: the layer above components, the layer below the app shell. Everything above stays code. Everything below stays code. The composition in between becomes data.

Two paths to onboard

Depending on where you are, pick the setup path that matches:

Both lead to the same destination: a Studio-powered app that composes your components against your CMS data, previewable at every step.