Content and CMS
Everything a visitor can read is content you can edit without touching code: page sections, headings, buttons, labels, error messages, emails, SEO texts, photos and their alt text.
One content model
Section titled “One content model”Each template describes its content once, in src/content/model.ts. The editors are generated
from it, so they always offer exactly the fields your pages use:
- Keystatic (default): your content stays in the project as Markdown and JSON files, and
Keystatic is a friendly editor for them at
/keystatic. No service, no extra cost. See Keystatic. - Sanity: your content lives in a Sanity project and your team edits it in Sanity Studio. Good when clients or several editors work on the site. See Sanity.
- EmDash: a separate variant of the template, chosen when you create the site
(
wptom new my-site -t aurora --cms emdash). EmDash runs inside your site on Cloudflare, with a WordPress-like admin, and what you publish is live at once. See EmDash.
Your pages don’t change between them: the site reads the same fields from every source.
Where the content lives
Section titled “Where the content lives”| What | Files |
|---|---|
| Single pages (home, pricing, waitlist, 404…) | src/content/singletons/*.json |
| Site settings, navigation, footer | src/content/singletons/site.json |
| Small interface texts (buttons, labels, emails) | src/content/singletons/ui.json |
| Brand (colors, fonts, shape) | src/content/singletons/brand.json |
| Blog, changelog, docs, legal | src/content/<name>/*.md |
| Landing pages | src/content/landing/*.json |
| Photos | src/assets/photos/<page or collection>/ (EmDash: its media library) |
Choosing the source (files or Sanity)
Section titled “Choosing the source (files or Sanity)”In the files/Sanity variant, set CMS in .env (or in your host’s environment variables):
CMS=files # default: the files above, edited in KeystaticCMS=sanity # read from your Sanity projectContent is read when the site is built, so the published site stays fast and static. After editing, the site rebuilds: with Keystatic every save is a commit, with Sanity a webhook starts the build. (In the EmDash variant, pages are rendered on request instead, so there’s no rebuild.)