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 format —
mdx(frontmatter + body) orjson(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
Creating a Collection
There are three paths. Pick whichever matches your comfort level.- Presets (fastest)
- Ask the AI
- Build it visually
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
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.path—content/<id>orcontent/<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
Pickmdx 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.References Between Collections
Areference field lets one collection point at another. Common patterns:
- A
blogpost references an entry inauthors - A
productreferences an entry incategories - A
blogpost references related entries inblogitself (self-reference is allowed)
"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. Thestatus 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 anauthors collection (name, role, bio, avatar) that the reference points at.
Products (catalog)
Pairs with acategories collection (name, description).
Team Members
Testimonials
NoroutePattern — 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 agroup 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 (
stringtomarkdown); most aren’t. Test on a draft entry first.
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