Manifest Schema
Every project has a manifest.json at its root. This is the source of truth for project structure.
{
"project": {
"name": "Landing Page",
"slug": "landing-page",
"client": "acme",
"canvas": "desktop",
"created": "2026-04-12T00:00:00.000Z",
"links": {}
},
"rounds": [
{
"id": "round-1",
"number": 1,
"name": "Round 1",
"createdAt": "2026-04-12T00:00:00.000Z",
"closedAt": null,
"selects": [],
"concepts": [
{
"id": "concept-abc123",
"slug": "clean-minimal",
"label": "Clean Minimal",
"description": "",
"position": 0,
"visible": true,
"versions": [
{
"id": "version-def456",
"number": 1,
"file": "concept-1/v1.html",
"parentId": null,
"changelog": "Initial version",
"visible": true,
"starred": false,
"created": "2026-04-12T00:00:00.000Z",
"thumbnail": ".thumbs/concept-abc123-version-def456.webp",
"annotations": []
}
]
}
]
}
],
"workingSets": [],
"comments": [],
"clientEdits": []
}Key Fields
project
canvas— preset slug (desktop, mobile, landscape-16-9, etc.)links— external references (production URL, Figma, etc.)userId— Supabase user ID (cloud projects only)
rounds[]
selects— starred concept/version pairs when round was closedclosedAt— null while active, timestamp when finalizedconcepts— the concept array for this round
concepts[]
label— human-readable name (“Clean Minimal”, not “Concept 1”)position— display orderbranchedFrom— source concept/version if drifted right
versions[]
file— relative path to HTML (e.g.,concept-1/v2.html)changelog— what changed (“New drift slot — empty” for unfilled slots)annotations[]— prompts and feedback pinned to this version
annotations[]
x,y— pin position (0-1 normalized, null for whole-version prompts)text— the prompt textauthor— “designer”, client name, or “agent”isClient/isAgent— who wrote itparentId— for threaded repliesstatus— “running” when agent is working
Last updated on