Skip to Content
DocsReferenceManifest Schema

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 closed
  • closedAt — null while active, timestamp when finalized
  • concepts — the concept array for this round

concepts[]

  • label — human-readable name (“Clean Minimal”, not “Concept 1”)
  • position — display order
  • branchedFrom — 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 text
  • author — “designer”, client name, or “agent”
  • isClient / isAgent — who wrote it
  • parentId — for threaded replies
  • status — “running” when agent is working
Last updated on