__cms_manifest__.json open in Code with entities posts schema
CMS manifest

Appifio Creator · Lesson T05 · Glossary

__cms_manifest__.json
& __cms_ui_contract__.json

When Aura CMS is on, these files are the rulebook: the AI must not invent entity file names - follow the manifest.

Goals: Tell CMS off vs on apart; read entities/fields/routes/frontend; know when you need the UI contract.

Time: 13-15 minutes · Before: G01, G04, T03 · Next: T06

CMS UI: Overview · Data types · Interface · Settings · Content catalogs · Posts · Products

1. Diagram

CMS OFF → AI may choose flat/indexed file names for the app
CMS ON → must read __cms_manifest__.json
entities.posts.data_file = blog-posts.json (example)
→ fields, routes.list/detail, frontend.list_html
→ editing layout HTML → __cms_ui_contract__.json (DOM hooks)
Panel /{url}/cms administers entities defined in the manifest

2. Glossary

TermMeaningWhere you see it
__cms_manifest__.jsonMap of entities, fields, data_file, routesFile store · CMS Panel · Files tab
__cms_ui_contract__.jsonFrontend layout hooks ↔ CMS injectWhen AI edits blog-list.html, product-detail.html
entities.*.data_fileRequired indexed file nameData types form · Storage file
publish_statedraft / published / private / trash - custom type field (built-in blog uses status)Custom-type forms in CMS
Security enforceFilter fields · block guest appendCMS Settings

3. Manifest example (short)

"entities": {
  "posts": {
    "data_file": "blog-posts.json",
    "routes": { "list": "blog", "detail": "blog/{slug}" },
    "frontend": { "list_html": "blog-list.html", "detail_html": "blog-detail.html" }
  }
}

Frontend must readList('blog-posts.json') - not my-posts.json invented by the AI.

4. Practical steps

  1. Open /{url}/cms → sign in → nav Posts, Products, Data types and match them to entities.
  2. Creator → Files tab → open __cms_manifest__.json (after CMS bootstrap).
  3. Prompt: “Read __cms_manifest__.json first. Honor data_file. Edit HTML per __cms_ui_contract__ when present.”
  4. Publish a test post as Published → check routes on the Routes tab (T08) → preview the listing.
  5. Add a custom type: CMS → Data types / Custom data type → Save (AS20). Don’t let the AI create a parallel file under another name. If you ask the AI to declare it: merge both files using the Panel-safe method (AS21).
  6. Save changes in Creator after the AI edits the frontend.

5. Comparisons · Limits · Security

  • WordPress CPT + ACF: manifest ≈ registering a post type + fields.
  • Strapi content-types: schema JSON similar to entities.
  • Webflow CMS collections: Appifio AI must follow the schema when CMS is on.

You can: keep Panel ↔ frontend in sync. You can’t: invent my-posts.json when the manifest only lists blog-posts.json.

Security: Security enforce hides sensitive fields from guests; don’t hardcode every admin field into public HTML.

Product note: CMS runs on Aura (Advanced) only - not Easy. Don’t enable Easy Storage and Aura Storage prompt templates together.

5b. Tips

  • Always start AI prompts with: “CMS ON - read __cms_manifest__.json.”
  • When editing listing HTML, check __cms_ui_contract__ for selector hooks before renaming classes freely.

6. Incidents · Checklist

IncidentFix
CMS has posts but the page is emptyWrong data_file / missing route / AI reading a file outside the manifest
Two data sources out of syncDelete the invented file; unify on the manifest
Listing HTML doesn’t match a new fieldRe-read manifest fields + ui_contract hooks
  1. Do you know that with CMS on you must read the manifest before prompting?
  2. Does data_file in code match entities.* in the manifest?
  3. Can you tell manifest (data) apart from ui_contract (layout hooks)?

CMS + AI practice

AS19 · AS20 · AS21

Prompt stack · Panel create type · AI merge both files using the Panel-safe method

Next glossary: T06 - Easy vs Advanced Storage

Appifio Creator · User guide · T05