02 · Explore the anatomy
Before changing anything, understand the four pieces that make the app work: the manifest, the generated plugin map, the registry for custom code, and AGENTS.md. After this step you'll know where to reach for each kind of change.
app.manifest.json — the center of everything
This is the file that describes the whole app. Freshly created, an admin app looks like this:
{
"manifestVersion": 2,
"id": "my-store",
"name": "my-store",
"backend": { "provider": "mock" },
"locale": {
"default": "pt-BR",
"supported": ["pt-BR", "en"],
"currency": "BRL"
},
"theme": { "brand": "violet" },
"surfaces": {
"admin": {
"scaffold": "admin",
"plugins": [{ "id": "dashboard" }],
"pages": []
}
}
}
Three blocks matter more than the rest:
surfaces— each surface is one face of the app (admin,storefront,member). It declares ascaffold(the shell layout), the list ofpluginsand extrapages. Navigation is derived from the plugins: you turn a plugin on and its routes and menu appear — you don't write routes by hand.plugins— inside a surface, each entry is just{ "id": "..." }. That's how you add a capability (step 04).backend—{ "provider": "mock" }runs on sample data with zero configuration. In step 05 you switch it to"supabase".
src/plugins.generated.ts — the plugin map
// Generated by 'fayz create'. Maps manifest plugin ids → platform-bundled plugin factories.
export {}
This file connects the manifest's ids to the real plugin factories. Today it comes empty because catalog plugins are resolved by the platform bundle. Treat it as generated: you don't edit it by hand — the manifest is the source of truth.
src/registry.tsx — your code
// import { registerBlock } from './lib/fayz-runtime'
// registerBlock('custom:my-block', MyBlock)
export {}
This is where you register your own blocks, pages and components (levels 5–7 of the customization ladder) and then reference them from the manifest by their custom: id. While you're only configuring, it stays empty.
AGENTS.md — the manual for an agent
The scaffold includes an AGENTS.md describing the structure, the customization checklist and the Supabase walkthrough. The idea is concrete: you can open this app with an AI agent and it already knows that "customizing = editing the manifest, not writing new code", where the files live and how to connect a real database. It's documentation for the machine, versioned alongside the app.
See also: Connect your agent — how to point Claude Code, Cursor or Codex at AGENTS.md and llms.txt.
✓ You should see: opening app.manifest.json, the surfaces.admin.plugins block with a single { "id": "dashboard" }. Remember where that is — the next steps edit exactly it.
← Previous: 01 · Create the app · Next: 03 · Theme and brand →