The CMS emits data and a way to fetch it — never markup, never layout. You own 100% of the presentation. Content arrives as whole, typed records through one generated contract; you render it.
The contract is the only door. All content comes through the generated helper — never a hand-rolled fetch, never inline SQL. The generated types are regenerated whenever the schema changes; if a field you expect is missing, the answer is a schema change in the CMS, never a type edit in your repo.
You always receive the whole record. There are no projections and no selection sets, and that is why a field added in the CMS tomorrow arrives in your payload immediately — nothing enumerates fields at fetch time, so nothing goes stale.
Every site is its own Worker. Its own database, its own media bucket. Nothing shared serves your pages, and the CMS being offline is invisible to your visitors.
Full integration docs ship with your repo at handover — generated against your actual schema, not a generic example. Ask us anything meanwhile.