{
  "schema": "freshvibe-way-v8.app-dna",
  "schema_version": "1.0.0",

  "app_id": "freshvibe-cms.1.0.0",
  "app_name": "FreshVibe CMS",
  "app_short_description": "Frontend editing runtime + page builder + content admin + AI agent for any HTML page that adopts it",

  "version": "1.0.0",
  "version_label": "FWV v8.3 alignment",
  "created_at": "2026-07-09T00:00:00Z",
  "updated_at": "2026-08-04T07:11:00Z",

  "lineage": {
    "parent": "freshvibe-cms.0.8.0",
    "source": "Pre-alignment state at commit 68410d4 on branch feature/working-v0.8.0-fvre-clean (v0.8.0 base + Phase 8 v2 content admin in chrome)",
    "source_format": "javascript",
    "refactor_completed_at": "2026-08-04T07:11:00Z"
  },

  "supersedes": ["freshvibe-cms.0.8.0", "freshvibe-cms.0.7.3", "freshvibe-cms.0.7.1a"],
  "superseded_by": null,

  "recipe_id": "freshvibe-cms.1.0.0.app-recipe",
  "recipe_format_version": "v8",

  "freshvibe_way_version": "v8.3.0",
  "freshvibe_compliance": {
    "v8_reconstructable": true,
    "v8_deterministic": true,
    "v8_isolated": true,
    "v8_anti_drift_compliant": true,
    "v8_panel_block_naming_clarified": true,
    "v8_module_pact_registration_35": true,
    "v8_tier_model_17": true,
    "v8_pact_3_11_through_3_14": true
  },

  "build": {
    "language": "javascript",
    "framework": "vanilla",
    "runtime": "browser",
    "entry_point": "bootstrap.js"
  },

  "interfaces": {
    "public_apis": [
      "fvcms:content-admin:*",
      "fvcms:editor-palette:*",
      "fvcms:editor-region-actions:*",
      "fvcms:editor-layout-templates:*",
      "fvcms:store:get/set/select/subscribe"
    ],
    "public_surfaces": [
      "home",
      "content-admin",
      "editor-outline",
      "editor-inspector",
      "editor-navigator",
      "editor-palette",
      "editor-region-actions",
      "editor-layout-templates",
      "dev-panel",
      "dev-btn",
      "panel-manager"
    ],
    "extension_points": [
      "app-overlays/",
      "stubs/",
      "app-fragments/editor-save-for-reuse/"
    ]
  },

  "panels": {
    "definition": "Editor chrome — lives in app-fragments/ or runtime/. Manipulates other things, does not render content. Per §1.7a convention.",
    "inventory": [
      {"name": "editor-palette", "purpose": "2-column grid of 16 blocks for the page builder", "path": "app-fragments/editor-palette/"},
      {"name": "editor-region-actions", "purpose": "Toolbar that appears when a region is clicked (background, gradient, parallax, columns)", "path": "app-fragments/editor-region-actions/"},
      {"name": "editor-layout-templates", "purpose": "Layout picker for adding a new region", "path": "app-fragments/editor-layout-templates/"},
      {"name": "editor-outline", "purpose": "Yellow clickable tags floating on each region and block", "path": "app-fragments/editor-outline/"},
      {"name": "editor-inspector", "purpose": "Property editor that opens when a region/block is selected", "path": "app-fragments/editor-inspector/"},
      {"name": "editor-navigator", "purpose": "Structure tree showing all regions and blocks on the page", "path": "app-fragments/editor-navigator/"},
      {"name": "editor-content-admin", "purpose": "Records CRUD for content types, lives in the chrome", "path": "app-fragments/editor-content-admin/"},
      {"name": "editor-context-menu", "purpose": "Right-click menu on regions and blocks", "path": "app-fragments/editor-context-menu/"},
      {"name": "editor-selection", "purpose": "Selection state management (what's currently selected)", "path": "app-fragments/editor-selection/"},
      {"name": "editor-save-for-reuse", "purpose": "Review content types VibeCoder invents", "path": "app-fragments/editor-save-for-reuse/"},
      {"name": "editor-templates", "purpose": "Manage starting points for new records", "path": "app-fragments/editor-templates/"},
      {"name": "editor-breadcrumb", "purpose": "Breadcrumb showing current region/block path", "path": "app-fragments/editor-breadcrumb/"},
      {"name": "cms-panel", "purpose": "The main content management surface (legacy v0.7.3 panel)", "path": "app-fragments/fvcms-cms-panel/"},
      {"name": "fvcms-panel-manager", "purpose": "Multi-panel state machine (pinned, slimmed, auto-hide, multi-per-edge)", "path": "app-fragments/fvcms-panel-manager/"},
      {"name": "fvcms-dev-btn", "purpose": "The { } floating button in the bottom-right corner", "path": "app-fragments/fvcms-dev-btn/"},
      {"name": "fvcms-dev-panel", "purpose": "The Dev panel that opens when { } is pressed", "path": "app-fragments/fvcms-dev-panel/"},
      {"name": "fvcms-floating-buttons", "purpose": "Container for floating buttons (🔧 edge panel, 📋 content admin)", "path": "app-fragments/fvcms-floating-buttons/"},
      {"name": "fvcms-module-editor", "purpose": "Module editor panel for editing block properties in the chrome", "path": "app-fragments/fvcms-module-editor/"},
      {"name": "fvcms-region-editor", "purpose": "Region editor panel for editing region properties in the chrome", "path": "app-fragments/fvcms-region-editor/"},
      {"name": "fvcms-trace", "purpose": "Trace panel for visualising the App-Trace Atlas live", "path": "app-fragments/fvcms-trace/"},
      {"name": "fvcms-watermark-hider", "purpose": "Hides the Oscar watermark in the chrome when not needed", "path": "app-fragments/fvcms-watermark-hider/"},
      {"name": "content-admin-launcher", "purpose": "The {📋} button that opens the content admin panel", "path": "app-fragments/content-admin-launcher/"},
      {"name": "cms-data", "purpose": "Static CMS data files (modules.json, coverage-report.json)", "path": "app-fragments/cms-data/"}
    ]
  },

  "blocks": {
    "definition": "Content chunk — lives in modules/. Renders content. Has props, slots, view. Per §1.7a convention.",
    "inventory": [
      {"name": "heading", "tier": 3, "path": "modules/heading/"},
      {"name": "button", "tier": 3, "path": "modules/button/"},
      {"name": "image", "tier": 3, "path": "modules/image/"},
      {"name": "carousel", "tier": 3, "path": "modules/carousel/"},
      {"name": "testimonial", "tier": 3, "path": "modules/testimonial/"},
      {"name": "info-box", "tier": 3, "path": "modules/info-box/"},
      {"name": "cta-box", "tier": 3, "path": "modules/cta-box/"}
    ]
  },

  "content_types": {
    "definition": "Canonical content types that ship in the package, defined per the §3.14 store-is-truth invariant",
    "canonical_7": [
      "Listing",
      "BlogPost",
      "Product",
      "Recipe",
      "Event",
      "PodcastEpisode",
      "RecipeCollection"
    ],
    "schema_path": "schemas/content-types-default.json",
    "store_path": "runtime/content-items/store.js"
  },

  "tags": {
    "domain": "frontend-cms",
    "audience": "operator",
    "deployment": "vendored-static",
    "compliance": ["fv-cms-constitution", "fwv-v8.3"],
    "panel_block_naming": "yes",
    "per_site_store": "yes",
    "content_admin_in_chrome": "yes"
  }
}
