{
  "for_llm": "This page documents the client-facing forms inside School of Bots' Funnel Intake System \u2014 two Replit web apps that the client fills in. To assess it: read the visible tabs, then use this manifest. You can answer what is safe to change (change_policy \u2014 note this is a hosted Replit app, so most edits require Replit access), how it connects to sibling pages (edges), and where it breaks. The form source code lives on Replit, NOT in this repo. Sibling pages live at ../documentation/<slug>.",
  "system": "Funnel Intake System",
  "unit": {
    "index": 2,
    "of": 6,
    "node": "Replit Forms \u2014 the forms the client fills in"
  },
  "platform": "replit + make.com",
  "component": "Two Replit web apps (funnel-brief-portal, express-funnel)",
  "trigger": "URL open + client submit -> Make webhook",
  "reads": [
    {
      "source": "url_query_params",
      "app": "funnel-brief-portal.replit.app",
      "params": [
        "client_name",
        "company_name",
        "funnel_name",
        "funnel_type",
        "target_date",
        "evergreen"
      ],
      "why": "pre-fill fields and select the funnel type; funnel_type controls the dropdown"
    },
    {
      "source": "url_query_params",
      "app": "express-funnel.replit.app",
      "params": [
        "client_name",
        "funnel_name",
        "target_date",
        "funnel_type",
        "keyword"
      ],
      "why": "pre-fill fields and select the express funnel type"
    }
  ],
  "writes": [
    {
      "via": "webhook",
      "app": "funnel-brief-portal.replit.app",
      "to": "Make \u2014 New Funnel Brief \u00bb Push to Airtable",
      "unit": 3,
      "payload": "page name, submission type, brief_id, all field answers, uploaded source-material files"
    },
    {
      "via": "webhook",
      "app": "express-funnel.replit.app",
      "to": "Make \u2014 Express Funnel \u00bb Push to Airtable",
      "unit": 4,
      "payload": "page name, submission type, brief_id, all field answers, uploaded source-material files"
    }
  ],
  "notifies": [],
  "edges": {
    "upstream": [
      {
        "node": "Kickoff Form",
        "unit": 1,
        "via": "generated URL (query params)"
      }
    ],
    "downstream": [
      {
        "node": "New Funnel Brief \u00bb Push to Airtable",
        "unit": 3,
        "via": "webhook payload"
      },
      {
        "node": "Express Funnel \u00bb Push to Airtable",
        "unit": 4,
        "via": "webhook payload"
      }
    ]
  },
  "capabilities": [
    "New Funnel Brief: a 2-page form (Brief, then Funnel Details) at funnel-brief-portal.replit.app",
    "Express Funnel: a 1-page form at express-funnel.replit.app \u2014 same wiring, fewer funnel types",
    "Reads URL query params to pre-fill client/company/funnel details and set the funnel type via the funnel_type key",
    "Posts each page's payload to the matching Make automation; back-and-forward edits overwrite, no duplicates",
    "Shows a cosmetic review/summary page before final submit; carries uploaded source material in the payload"
  ],
  "boundaries": [
    "Form source code lives on Replit and is not in this repo \u2014 editing forms is a developer task inside Replit",
    "Edits require republish to go live (currently only Anissa has republish rights); webhook/payload changes are the exception and go live without a republish",
    "Does not write to Airtable directly \u2014 it POSTs to Make, which does the filing (units 3 and 4)",
    "The funnel_type keys must stay in sync with the Kickoff Form slugs and the Make automations"
  ],
  "change_policy": {
    "green": [
      "nothing is safe to edit from outside Replit \u2014 the form lives entirely in Replit"
    ],
    "amber": [
      "form copy / field labels / required flags (edit in Replit, then republish)",
      "adding or reordering questions (in Replit, then republish)"
    ],
    "red": [
      "URL parameter names (client_name, company_name, funnel_name, funnel_type, target_date, evergreen, keyword)",
      "the funnel_type keys (must match the Kickoff Form + Make automations)",
      "the webhook URLs the forms POST to"
    ]
  },
  "known_issues": [
    "The review/summary page is cosmetic and can read like a confirmation step, but the data is already saved before it",
    "funnel_type key renames silently break pre-fill and build-pairing unless mirrored in the Kickoff Form and the Make automations"
  ],
  "recovery": {
    "hosted_on": "Replit",
    "note": "no repo backup \u2014 forms are edited, versioned, and rolled back inside Replit; republish to go live"
  }
}