{
  "id": "recipe-architecture-grid",
  "name": "Recipe Architecture Grid",
  "description": "Seed project carrying the original sample spatial map that used to live on the home route.",
  "createdAt": "2026-04-20T00:00:00.000Z",
  "updatedAt": "2026-04-23T04:09:05.823Z",
  "spatialMap": {
    "nodes": [
      {
        "id": "page-home",
        "label": "Home",
        "type": "page",
        "depth": 0,
        "purpose": "Landing page that introduces the brand, featured recipes, and seasonal content.",
        "implementation": "SSR page with hero, search prompt, featured collections, and personalized modules.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": [
          {
            "id": "e8cfe7a0-53fd-4f72-ade6-7318cfec28b0",
            "src": "/api/projects/recipe-architecture-grid/images/page-home/e8cfe7a0-53fd-4f72-ade6-7318cfec28b0.png",
            "filename": "e8cfe7a0-53fd-4f72-ade6-7318cfec28b0.png",
            "originalName": "image.png",
            "mimeType": "image/png",
            "size": 253121,
            "createdAt": "2026-04-23T01:51:38.831Z"
          },
          {
            "id": "51369785-36d6-4d38-8e7d-43ed98b4c8bd",
            "src": "/api/projects/recipe-architecture-grid/images/page-home/51369785-36d6-4d38-8e7d-43ed98b4c8bd.png",
            "filename": "51369785-36d6-4d38-8e7d-43ed98b4c8bd.png",
            "originalName": "image.png",
            "mimeType": "image/png",
            "size": 253121,
            "createdAt": "2026-04-23T01:51:38.831Z"
          },
          {
            "id": "2417bbe3-fe26-4510-a4b7-8edd142f44cd",
            "src": "/api/projects/recipe-architecture-grid/images/page-home/2417bbe3-fe26-4510-a4b7-8edd142f44cd.png",
            "filename": "2417bbe3-fe26-4510-a4b7-8edd142f44cd.png",
            "originalName": "image.png",
            "mimeType": "image/png",
            "size": 140075,
            "createdAt": "2026-04-23T01:52:50.582Z"
          },
          {
            "id": "338f53d4-ae84-4995-8015-c09283f3d601",
            "src": "/api/projects/recipe-architecture-grid/images/page-home/338f53d4-ae84-4995-8015-c09283f3d601.png",
            "filename": "338f53d4-ae84-4995-8015-c09283f3d601.png",
            "originalName": "image.png",
            "mimeType": "image/png",
            "size": 140075,
            "createdAt": "2026-04-23T01:52:50.582Z"
          },
          {
            "id": "8704c303-59e1-4c79-899b-4968216a9edf",
            "src": "/api/projects/recipe-architecture-grid/images/page-home/8704c303-59e1-4c79-899b-4968216a9edf.jpg",
            "filename": "8704c303-59e1-4c79-899b-4968216a9edf.jpg",
            "originalName": "home-recipe-architecture-grid-landing-ai-quick-generate.jpg",
            "mimeType": "image/jpeg",
            "size": 119888,
            "createdAt": "2026-04-23T03:35:34.318Z"
          }
        ]
      },
      {
        "id": "page-recipes",
        "label": "Recipes",
        "type": "page",
        "depth": 0,
        "purpose": "Browse and filter the full recipe library.",
        "implementation": "Server-rendered index backed by search facets, sort options, and pagination.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": [
          {
            "id": "3887b979-ac56-43d2-8b64-1bd0d4ba0f24",
            "src": "/api/projects/recipe-architecture-grid/images/page-recipes/3887b979-ac56-43d2-8b64-1bd0d4ba0f24.jpg",
            "filename": "3887b979-ac56-43d2-8b64-1bd0d4ba0f24.jpg",
            "originalName": "recipes-page-browse-filter-ui-mockup.jpg",
            "mimeType": "image/jpeg",
            "size": 125394,
            "createdAt": "2026-04-23T03:39:57.565Z"
          }
        ]
      },
      {
        "id": "page-recipe-detail",
        "label": "Recipe Detail",
        "type": "page",
        "depth": 0,
        "purpose": "Display a single recipe with ingredients, steps, timing, and related content.",
        "implementation": "Dynamic route with structured content blocks and analytics events.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": [
          {
            "id": "f2062077-87ef-480c-8657-f0c98711efa7",
            "src": "/api/projects/recipe-architecture-grid/images/page-recipe-detail/f2062077-87ef-480c-8657-f0c98711efa7.png",
            "filename": "f2062077-87ef-480c-8657-f0c98711efa7.png",
            "originalName": "image.png",
            "mimeType": "image/png",
            "size": 526429,
            "createdAt": "2026-04-23T02:00:28.822Z"
          },
          {
            "id": "97236bf6-b12e-42f4-9bd8-5a1cc353ea1e",
            "src": "/api/projects/recipe-architecture-grid/images/page-recipe-detail/97236bf6-b12e-42f4-9bd8-5a1cc353ea1e.png",
            "filename": "97236bf6-b12e-42f4-9bd8-5a1cc353ea1e.png",
            "originalName": "image.png",
            "mimeType": "image/png",
            "size": 526429,
            "createdAt": "2026-04-23T02:00:28.822Z"
          }
        ]
      },
      {
        "id": "page-profile",
        "label": "Profile",
        "type": "page",
        "depth": 0,
        "purpose": "Show saved recipes, preferences, and meal plans.",
        "implementation": "Authenticated dashboard view with local settings and user-specific data.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": [
          {
            "id": "c72dfdd9-58e1-415b-9d95-70cdcf7e82b9",
            "src": "/api/projects/recipe-architecture-grid/images/page-profile/c72dfdd9-58e1-415b-9d95-70cdcf7e82b9.png",
            "filename": "c72dfdd9-58e1-415b-9d95-70cdcf7e82b9.png",
            "originalName": "profile-dashboard-saved-recipes-weekly-meal-planner.png",
            "mimeType": "image/png",
            "size": 433123,
            "createdAt": "2026-04-23T03:53:11.975Z"
          },
          {
            "id": "8106fa8f-287d-4e01-8e84-d63ccbac4add",
            "src": "/api/projects/recipe-architecture-grid/images/page-profile/8106fa8f-287d-4e01-8e84-d63ccbac4add.png",
            "filename": "8106fa8f-287d-4e01-8e84-d63ccbac4add.png",
            "originalName": "profile-dashboard-saved-recipes-weekly-meal-planner-mockup.png",
            "mimeType": "image/png",
            "size": 451856,
            "createdAt": "2026-04-23T04:09:05.823Z"
          }
        ]
      },
      {
        "id": "asm-home-hero",
        "label": "Hero Assembly",
        "type": "assembly",
        "depth": 1,
        "purpose": "Combines headline, search prompt, CTA, and featured image for the home page.",
        "implementation": "Composable container that wires analytics, layout, and responsive slots.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "asm-home-featured",
        "label": "Featured Recipes",
        "type": "assembly",
        "depth": 1,
        "purpose": "Presents a curated set of recipe cards for quick exploration.",
        "implementation": "Grid assembly that fetches recipe summaries and renders card variants.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "asm-recipes-filterbar",
        "label": "Filter Bar",
        "type": "assembly",
        "depth": 1,
        "purpose": "Lets visitors filter by diet, cook time, cuisine, and difficulty.",
        "implementation": "Sticky control row synced to query state and faceted search params.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "asm-recipes-results",
        "label": "Results Grid",
        "type": "assembly",
        "depth": 1,
        "purpose": "Displays recipe cards after search or filtering.",
        "implementation": "Virtualized grid with pagination fallback and responsive columns.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "asm-detail-overview",
        "label": "Recipe Overview",
        "type": "assembly",
        "depth": 1,
        "purpose": "Combines title, hero media, metadata, and quick actions.",
        "implementation": "Top content assembly using structured recipe data and media assets.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "asm-detail-instructions",
        "label": "Instructions Block",
        "type": "assembly",
        "depth": 1,
        "purpose": "Groups ingredients, steps, notes, and nutrition content.",
        "implementation": "Sectioned container with anchors and semantic content rendering.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "asm-profile-saved",
        "label": "Saved Recipes",
        "type": "assembly",
        "depth": 1,
        "purpose": "Shows bookmarked or favorited recipes for the current user.",
        "implementation": "User-specific listing with cache-aware fetching and empty states.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "asm-profile-planner",
        "label": "Meal Planner",
        "type": "assembly",
        "depth": 1,
        "purpose": "Supports weekly planning and shopping list generation.",
        "implementation": "Interactive planner backed by saved recipes and user preferences.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "cmp-search-input",
        "label": "Search Input",
        "type": "component",
        "depth": 2,
        "purpose": "Free-text search entry for recipe lookup.",
        "implementation": "Controlled input with debounced updates and keyboard support.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "cmp-cta-button",
        "label": "CTA Button",
        "type": "component",
        "depth": 2,
        "purpose": "Primary action button used for exploration and conversion.",
        "implementation": "Shared button component with visual variants and tracking hooks.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "cmp-recipe-card",
        "label": "Recipe Card",
        "type": "component",
        "depth": 2,
        "purpose": "Compact summary for a recipe with image, title, and metadata.",
        "implementation": "Reusable card component used in multiple assemblies and pages.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "cmp-filter-chip",
        "label": "Filter Chip",
        "type": "component",
        "depth": 2,
        "purpose": "Displays an active or selectable filter option.",
        "implementation": "Small interactive chip component tied to search facet state.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "cmp-sort-select",
        "label": "Sort Select",
        "type": "component",
        "depth": 2,
        "purpose": "Lets users change sorting such as newest or fastest.",
        "implementation": "Shared dropdown component with accessible listbox behavior.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "cmp-ingredient-list",
        "label": "Ingredient List",
        "type": "component",
        "depth": 2,
        "purpose": "Renders ingredients with quantities and optional unit scaling.",
        "implementation": "Semantic list component with quantity formatting helpers.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "cmp-step-list",
        "label": "Step List",
        "type": "component",
        "depth": 2,
        "purpose": "Shows the ordered recipe instructions for cooking.",
        "implementation": "Ordered content renderer with timer and completion affordances.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "cmp-rating-stars",
        "label": "Rating Stars",
        "type": "component",
        "depth": 2,
        "purpose": "Shows community rating and review count.",
        "implementation": "Compact display component with average score formatting.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "cmp-save-toggle",
        "label": "Save Toggle",
        "type": "component",
        "depth": 2,
        "purpose": "Allows users to save or unsave a recipe.",
        "implementation": "Optimistic mutation component with auth guard and state sync.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "cmp-calendar-grid",
        "label": "Calendar Grid",
        "type": "component",
        "depth": 2,
        "purpose": "Visual week planner for meal scheduling.",
        "implementation": "Drag-friendly layout component backed by planner state.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "cmp-shopping-list",
        "label": "Shopping List",
        "type": "component",
        "depth": 2,
        "purpose": "Aggregates ingredients across selected meals.",
        "implementation": "Grouped checklist component with pantry-aware grouping.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "page-ai-recipes",
        "label": "AI Recipes",
        "type": "page",
        "depth": 0,
        "purpose": "Provides a standalone experiment page for generating recipe ideas with AI from a simple guided prompt.",
        "implementation": "Create a dedicated route under the home navigation with minimal page chrome and lightweight discovery entry points.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": [
          {
            "id": "11106a78-9193-46a8-bc59-d0797062061a",
            "src": "/api/projects/recipe-architecture-grid/images/page-ai-recipes/11106a78-9193-46a8-bc59-d0797062061a.jpg",
            "filename": "11106a78-9193-46a8-bc59-d0797062061a.jpg",
            "originalName": "ai-recipes-prompt-result-preview-ui-mockup.jpg",
            "mimeType": "image/jpeg",
            "size": 97691,
            "createdAt": "2026-04-23T03:37:14.118Z"
          }
        ]
      },
      {
        "id": "assembly-prompt-builder",
        "label": "Prompt Builder",
        "type": "assembly",
        "depth": 1,
        "purpose": "Collects the user's meal idea, constraints, and preferences before recipe generation.",
        "implementation": "Compose a compact form with selectable constraints and submit the payload to the generation backend.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "assembly-result-preview",
        "label": "Result Preview",
        "type": "assembly",
        "depth": 1,
        "purpose": "Shows the generated recipe draft with core ingredients, steps, and save actions.",
        "implementation": "Render structured recipe output returned by the API and expose lightweight actions for retrying or saving.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "component-prompt-form",
        "label": "Prompt Form",
        "type": "component",
        "depth": 2,
        "purpose": "Captures the main recipe request, serving size, and optional guidance text.",
        "implementation": "Use validated text and field inputs that serialize into a structured generation request body.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "component-constraint-chip",
        "label": "Constraint Chip",
        "type": "component",
        "depth": 2,
        "purpose": "Lets users add compact constraints such as diet, cuisine, or cook time to the AI request.",
        "implementation": "Implement selectable chips that map to normalized prompt modifiers and request filters.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "service-generate-api",
        "label": "Generate API",
        "type": "service",
        "depth": 2,
        "purpose": "Generates structured recipe drafts from prompt and preference inputs.",
        "implementation": "Expose a backend endpoint that calls the model, applies schema validation, and returns recipe JSON for the page.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "service-draft-store",
        "label": "Draft Store",
        "type": "service",
        "depth": 2,
        "purpose": "Persists generated recipes so users can revisit or save promising AI drafts.",
        "implementation": "Store generated recipe payloads with user context and status metadata through a simple persistence API.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "assembly-variant-controls",
        "label": "Variant Controls",
        "type": "assembly",
        "depth": 1,
        "purpose": "Groups simple sliders so users can request recipe variants without rewriting the prompt.",
        "implementation": "Renders spiciness, complexity, and prep-time controls and feeds their normalized values into generation requests.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "component-spice-slider",
        "label": "Spice Slider",
        "type": "component",
        "depth": 2,
        "purpose": "Lets users set the desired spiciness level for generated recipes.",
        "implementation": "Uses a single range input with labeled endpoints and passes a numeric heat preference into the prompt payload.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "component-complexity-slider",
        "label": "Complexity Slider",
        "type": "component",
        "depth": 2,
        "purpose": "Lets users tune how simple or advanced the generated cooking process should be.",
        "implementation": "Captures a low-to-high complexity value that the generation flow maps to technique and step sophistication.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "component-prep-slider",
        "label": "Prep Slider",
        "type": "component",
        "depth": 2,
        "purpose": "Lets users target a shorter or longer prep time before generating a recipe.",
        "implementation": "Collects a preferred prep-time range and sends it as a bounded timing hint to the generation API.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "component-variant-summary",
        "label": "Variant Summary",
        "type": "component",
        "depth": 2,
        "purpose": "Shows the selected variant settings alongside the generated recipe draft for quick confirmation.",
        "implementation": "Reads the active slider values and renders a compact summary in the preview header.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "component-open-detail-link",
        "label": "Open Detail Link",
        "type": "component",
        "depth": 2,
        "purpose": "Lets users continue from the AI preview into the full recipe detail experience.",
        "implementation": "Builds a route to the generated draft detail view after a draft has been stored or published.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "service-draft-publish-api",
        "label": "Draft Publish API",
        "type": "service",
        "depth": 2,
        "purpose": "Promotes a generated draft into a canonical recipe record that can be opened, saved, and revisited.",
        "implementation": "Accepts draft content plus variant metadata, creates a detail-page-ready record, and syncs it with saved-recipe flows.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "page-login",
        "label": "Login",
        "type": "page",
        "depth": 0,
        "purpose": "Provide a dedicated entry page where returning users can sign in to access saved recipes and profile features.",
        "implementation": "Implement a standalone route that renders a simple login layout with a single form-focused assembly.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": [
          {
            "id": "00b2a622-faa4-425e-8515-0a41f108bd1b",
            "src": "/api/projects/recipe-architecture-grid/images/page-login/00b2a622-faa4-425e-8515-0a41f108bd1b.png",
            "filename": "00b2a622-faa4-425e-8515-0a41f108bd1b.png",
            "originalName": "image.png",
            "mimeType": "image/png",
            "size": 61249,
            "createdAt": "2026-04-23T01:59:21.190Z"
          },
          {
            "id": "d960a1ef-7f77-46f2-a129-3966db58ea5e",
            "src": "/api/projects/recipe-architecture-grid/images/page-login/d960a1ef-7f77-46f2-a129-3966db58ea5e.png",
            "filename": "d960a1ef-7f77-46f2-a129-3966db58ea5e.png",
            "originalName": "image.png",
            "mimeType": "image/png",
            "size": 61249,
            "createdAt": "2026-04-23T01:59:21.190Z"
          }
        ]
      },
      {
        "id": "assembly-login-form",
        "label": "Login Form",
        "type": "assembly",
        "depth": 1,
        "purpose": "Group the core sign-in fields and actions into a compact form area for the login page.",
        "implementation": "Compose the form assembly from email and password inputs plus primary and secondary sign-in actions.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "component-email-input",
        "label": "Email Input",
        "type": "component",
        "depth": 2,
        "purpose": "Capture the user's email address for account sign-in.",
        "implementation": "Render a labeled email field with standard input behavior and inline validation affordances.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "component-password-input",
        "label": "Password Input",
        "type": "component",
        "depth": 2,
        "purpose": "Capture the user's password securely during sign-in.",
        "implementation": "Render a masked password field with optional visibility toggle styling and validation state support.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "component-login-submit",
        "label": "Login Submit",
        "type": "component",
        "depth": 2,
        "purpose": "Trigger the sign-in action from the completed login form.",
        "implementation": "Implement a primary submit button styled for the form's main call to action.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      },
      {
        "id": "component-forgot-password-link",
        "label": "Forgot Password Link",
        "type": "component",
        "depth": 2,
        "purpose": "Offer a recovery path for users who cannot remember their password.",
        "implementation": "Render a compact secondary text link beneath or beside the password field within the form.",
        "context": "",
        "rawContext": "",
        "contextMode": "structured",
        "images": []
      }
    ],
    "links": [
      {
        "source": "page-home",
        "target": "asm-home-hero",
        "parentChild": true
      },
      {
        "source": "page-home",
        "target": "asm-home-featured",
        "parentChild": true
      },
      {
        "source": "page-recipes",
        "target": "asm-recipes-filterbar",
        "parentChild": true
      },
      {
        "source": "page-recipes",
        "target": "asm-recipes-results",
        "parentChild": true
      },
      {
        "source": "page-recipe-detail",
        "target": "asm-detail-overview",
        "parentChild": true
      },
      {
        "source": "page-recipe-detail",
        "target": "asm-detail-instructions",
        "parentChild": true
      },
      {
        "source": "page-profile",
        "target": "asm-profile-saved",
        "parentChild": true
      },
      {
        "source": "page-profile",
        "target": "asm-profile-planner",
        "parentChild": true
      },
      {
        "source": "asm-home-hero",
        "target": "cmp-search-input",
        "parentChild": true
      },
      {
        "source": "asm-home-hero",
        "target": "cmp-cta-button",
        "parentChild": true
      },
      {
        "source": "asm-home-featured",
        "target": "cmp-recipe-card",
        "parentChild": true
      },
      {
        "source": "asm-recipes-filterbar",
        "target": "cmp-filter-chip",
        "parentChild": true
      },
      {
        "source": "asm-recipes-filterbar",
        "target": "cmp-sort-select",
        "parentChild": true
      },
      {
        "source": "asm-recipes-results",
        "target": "cmp-recipe-card",
        "parentChild": true
      },
      {
        "source": "asm-detail-overview",
        "target": "cmp-rating-stars",
        "parentChild": true
      },
      {
        "source": "asm-detail-overview",
        "target": "cmp-save-toggle",
        "parentChild": true
      },
      {
        "source": "asm-detail-instructions",
        "target": "cmp-ingredient-list",
        "parentChild": true
      },
      {
        "source": "asm-detail-instructions",
        "target": "cmp-step-list",
        "parentChild": true
      },
      {
        "source": "asm-profile-saved",
        "target": "cmp-recipe-card",
        "parentChild": true
      },
      {
        "source": "asm-profile-saved",
        "target": "cmp-save-toggle",
        "parentChild": true
      },
      {
        "source": "asm-profile-planner",
        "target": "cmp-calendar-grid",
        "parentChild": true
      },
      {
        "source": "asm-profile-planner",
        "target": "cmp-shopping-list",
        "parentChild": true
      },
      {
        "source": "page-home",
        "target": "page-recipes",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "page-recipes",
        "target": "page-recipe-detail",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "page-profile",
        "target": "page-recipe-detail",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "asm-home-featured",
        "target": "asm-recipes-results",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "asm-recipes-filterbar",
        "target": "asm-recipes-results",
        "parentChild": false,
        "relationship": "dependency"
      },
      {
        "source": "asm-detail-overview",
        "target": "asm-profile-saved",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "asm-profile-planner",
        "target": "asm-detail-instructions",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "cmp-search-input",
        "target": "cmp-filter-chip",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "cmp-cta-button",
        "target": "cmp-recipe-card",
        "parentChild": false,
        "relationship": "reuse"
      },
      {
        "source": "cmp-rating-stars",
        "target": "cmp-save-toggle",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "cmp-calendar-grid",
        "target": "cmp-shopping-list",
        "parentChild": false,
        "relationship": "dependency"
      },
      {
        "source": "page-home",
        "target": "page-ai-recipes",
        "parentChild": true
      },
      {
        "source": "page-ai-recipes",
        "target": "assembly-prompt-builder",
        "parentChild": true
      },
      {
        "source": "page-ai-recipes",
        "target": "assembly-result-preview",
        "parentChild": true
      },
      {
        "source": "assembly-prompt-builder",
        "target": "component-prompt-form",
        "parentChild": true
      },
      {
        "source": "assembly-prompt-builder",
        "target": "component-constraint-chip",
        "parentChild": true
      },
      {
        "source": "assembly-prompt-builder",
        "target": "service-generate-api",
        "parentChild": false,
        "relationship": "dependency"
      },
      {
        "source": "service-generate-api",
        "target": "assembly-result-preview",
        "parentChild": false,
        "relationship": "dependency"
      },
      {
        "source": "assembly-result-preview",
        "target": "service-draft-store",
        "parentChild": false,
        "relationship": "dependency"
      },
      {
        "source": "assembly-result-preview",
        "target": "cmp-ingredient-list",
        "parentChild": true
      },
      {
        "source": "assembly-result-preview",
        "target": "cmp-step-list",
        "parentChild": true
      },
      {
        "source": "assembly-result-preview",
        "target": "cmp-save-toggle",
        "parentChild": true
      },
      {
        "source": "service-draft-store",
        "target": "page-profile",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "page-ai-recipes",
        "target": "assembly-variant-controls",
        "parentChild": true
      },
      {
        "source": "assembly-variant-controls",
        "target": "component-spice-slider",
        "parentChild": true
      },
      {
        "source": "assembly-variant-controls",
        "target": "component-complexity-slider",
        "parentChild": true
      },
      {
        "source": "assembly-variant-controls",
        "target": "component-prep-slider",
        "parentChild": true
      },
      {
        "source": "assembly-variant-controls",
        "target": "service-generate-api",
        "parentChild": false,
        "relationship": "dependency"
      },
      {
        "source": "assembly-variant-controls",
        "target": "assembly-prompt-builder",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "assembly-result-preview",
        "target": "component-variant-summary",
        "parentChild": true
      },
      {
        "source": "assembly-result-preview",
        "target": "component-open-detail-link",
        "parentChild": true
      },
      {
        "source": "assembly-result-preview",
        "target": "service-draft-publish-api",
        "parentChild": false,
        "relationship": "dependency"
      },
      {
        "source": "service-draft-store",
        "target": "service-draft-publish-api",
        "parentChild": false,
        "relationship": "dependency"
      },
      {
        "source": "service-draft-publish-api",
        "target": "page-recipe-detail",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "service-draft-publish-api",
        "target": "page-profile",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "component-open-detail-link",
        "target": "page-recipe-detail",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "component-variant-summary",
        "target": "assembly-variant-controls",
        "parentChild": false,
        "relationship": "related"
      },
      {
        "source": "page-login",
        "target": "assembly-login-form",
        "parentChild": true
      },
      {
        "source": "assembly-login-form",
        "target": "component-email-input",
        "parentChild": true
      },
      {
        "source": "assembly-login-form",
        "target": "component-password-input",
        "parentChild": true
      },
      {
        "source": "assembly-login-form",
        "target": "component-login-submit",
        "parentChild": true
      },
      {
        "source": "assembly-login-form",
        "target": "component-forgot-password-link",
        "parentChild": true
      }
    ]
  }
}
