Documentation
Architecture
How AtlasCMS separates brands, keeps an append-only revision ledger, and serves content to Nuxt front ends.
AtlasCMS is one multi-brand headless CMS. Staff edit pages, posts, media, settings and theme for every brand from one account, and brand sites stay Nuxt 4 and read content through a cached API.
Multi-brand isolation
One database holds every brand, and every brand-owned row carries its brand_id. Models use a global tenancy scope, jobs and commands run inside a brand context, and cross-brand reads fail closed with a not found answer. One account can belong to many brands with a role per brand: editor, publisher or admin.
Append-only revisions
Entries hold pages, posts and custom types, unique on brand, locale, type and path. An edit never overwrites the live record: it writes a new revision, and the draft is simply the latest revision. Publishing moves published_revision_id, rollback moves it back, and nothing is copied. Every revision keeps its title, blocks, SEO and custom fields, so the history stays complete.
Delivery API
Brand sites read the public delivery API, which resolves media ids to URLs and answers conditional requests with an ETag and 304 support, so browsers and CDNs reuse content that has not changed. Drafts are only reachable with a preview token, and preview responses are private and uncached. Publishing fires signed webhooks, so a brand site can purge its cache and refresh.
Nuxt front ends
Each brand site is a Nuxt 4 app on the @atlas/nuxt layer: a catch-all route, a block renderer, the theme injected as CSS variables and SEO fed to @nuxtjs/seo. The layer asks the API for the route and the template a path resolves to, so the same content renders the theme the brand runs.