Skip to main content
A collection is a group of entries that share the same shape — for example, “Blog Posts,” “Products,” or “Team Members.” Each collection has a single schema (its fields) and lives in a single directory on disk. Most sites need three to ten collections; some need only one. This page covers what a collection is, the ways to create one, naming and format conventions, references between collections, and ready-to-use patterns for common content types.

What’s in a Collection?

Every collection in your manifest has:
  • An id — the stable identifier (blog, products, case-studies)
  • A name — the human label shown in the CMS panel
  • A path — where entries live on disk (content/blog/)
  • A formatmdx (frontmatter + body) or json (structured data only)
  • Fields — the schema each entry must conform to
  • An optional routePattern — the URL each entry maps to
  • An optional defaultSort for the entries table
  • An optional group — collections sharing a group label cluster together in the collections rail
Each entry in the collection becomes one file in the directory.

Creating a Collection

There are three paths. Pick whichever matches your comfort level.
Open the CMS panel, click Manage collections (the gear at the bottom of the collections rail), then New collection. The chooser opens with Start with a preset — one-click bundles for the most common content types:
  • Blog — posts plus an Authors collection, wired together with a reference
  • Products — a catalog plus a Categories collection
  • Team Members, Testimonials, FAQs, Case Studies
Presets that use references bundle their target collection in the same click (Authors lands before Blog Posts), so everything resolves immediately. Every preset’s primary collection ships with status and publishAt fields, so publishing and scheduling work from day one. After a preset lands, the panel offers to have the AI generate pages for the new collection.

Naming Conventions

A few rules to keep things consistent across collections:
  • id — lowercase, hyphenated, singular when ambiguous. Good: blog, case-studies, team. Avoid: blog_posts, BlogPosts, posts (too generic).
  • name — Title Case, plural. Good: Blog Posts, Case Studies, Team Members.
  • pathcontent/<id> or content/<plural>. Whichever you pick, be consistent across the manifest.
  • Field name — camelCase. Good: publishAt, heroImage, seoTitle. Avoid: published_at, Hero-Image.

Format: MDX vs JSON

Pick mdx when entries have a substantial long-form body and you want Markdown features (headings, embeds, components) in that body. Pick json for purely structured data.
MDX collections require exactly one field with isBody: true. JSON collections must not have any. The visual builder catches this for you; if you hand-edit the manifest, the validator will too.
You can mix formats in one project — most real sites have one or two MDX collections (blog, docs) and several JSON collections (products, testimonials, FAQs).

References Between Collections

A reference field lets one collection point at another. Common patterns:
  • A blog post references an entry in authors
  • A product references an entry in categories
  • A blog post references related entries in blog itself (self-reference is allowed)
In the manifest:
In the CMS panel, this renders as a searchable picker. On disk, the value is the referenced entry’s slug. For a list of references, use "type": "array", "items": "reference" with itemReferenceCollection — see Field Types. The entry editor also shows the reverse view: a Referenced by list of every entry pointing at the one you have open. See Linking Collections with References for examples of rendering referenced data on the page.

Reusable Patterns

These are the same schemas the collection presets create — shown here in full so you can adapt them by hand or feed them to the AI. All of them pass manifest validation verbatim. The status and publishAt fields appear on each routed pattern deliberately: they’re the conventional publish signals that drive the Draft / Published / Scheduled badges and scheduled publishing.

Blog

Pairs with an authors collection (name, role, bio, avatar) that the reference points at.

Products (catalog)

Pairs with a categories collection (name, description).

Team Members

Testimonials

No routePattern — testimonials render inside other pages, not on their own URLs.

FAQs

Case Studies

Shows a repeater field (metrics — an array of objects).

Site Settings (one entry)

For site-wide values, make a small collection and keep a single entry in it. Give it a group so it files under “Settings” in the rail.

Editing a Collection’s Schema

You can edit an existing collection’s schema at any time from Manage collections — each field opens in a settings panel, and drag-to-reorder works on existing collections too:
  • Add a field — safe. Existing entries get the new field’s default; the form shows it on next open.
  • Remove a field — safe but lossy. The data stays in the file; re-adding a field with the same name restores the editor.
  • Rename a field — invasive. Old data is orphaned. Ask the AI to write a migration if you have many entries.
  • Change a field’s type — risky. Some types are convertible (string to markdown); most aren’t. Test on a draft entry first.
Every manifest edit is captured in version history, so you can always roll a schema change back.

What’s Next?

Add a Collection

The step-by-step for all three paths

Field Types

Every supported field type

References

Link collections with reference fields

Migrate to CMS

Move hardcoded content into CMS collections