AtlasCMS is a hosted service for many brands at once, with a free plan available and paid plans for teams. An API keeps the content, revisions and roles. Any Nuxt front end reads it through a read token.
One installation, many brands. Each request is scoped to its brand, and a foreign record is a 404.
brands.ts
// Every manage request names its brand.constheaders={'Authorization':`Bearer ${token}`,'X-Brand-Id':brandId,}awaitfetch(`${api}/v1/manage/entries`,{headers})
Every save writes a revision. Publish promotes the revision you pin, and a page that moved on answers 409.