{
  "for_llm": "This is the index page for LeadLift's OS Walkthrough system: the LeadLift OS app (React on Cloudflare Pages, Supabase database, Modal server) and the Slack channels it posts to. Each unit has its own page with its own embedded manifest. 'pending' lists parts that are built but not filmed. 'access' says who can open what, how to add or remove a person, what is shared, the Claude connector and where the code lives. Items marked OPEN are unconfirmed: do not state them as fact. Sibling systems: ../onboarding/ and ../editing-pipeline/.",
  "system": "LeadLift OS Walkthrough",
  "client": "LeadLift Marketing (owner Fidel Guajardo)",
  "flow": "Sign in (emailed code) -> My Work -> [Clients + Team | Boards: Editing Pipeline, Scripts, Tasks, Launches | Onboarding | AI Documentation | Dashboards x4] -> card move -> database trigger -> Modal server -> Slack [client channels | team channels | #pipeline-errors | #sentry]; Make does the Google Drive work; 4 Modal crons",
  "units": [
    {
      "index": 1,
      "name": "Operating system overview",
      "file": "01.html",
      "component": "LeadLift OS app",
      "code": {
        "stage": "os/process/ll-ops-system.md"
      }
    },
    {
      "index": 2,
      "name": "Slack channel system",
      "file": "02.html",
      "component": "LeadLift Slack channels (17 SLACK_CHANNEL_* settings + one channel per client)"
    }
  ],
  "schedules": [
    {
      "function": "footage_scan_schedule",
      "cron": "0 6,18 * * *",
      "timezone": "America/Chicago"
    },
    {
      "function": "board_digest",
      "cron": "0 15 * * 0,1,3,5",
      "timezone": "America/Chicago"
    },
    {
      "function": "daily_cost_per_lead_check",
      "cron": "0 7 * * *",
      "timezone": "UTC",
      "state": "runs, writes nothing: no Active client, no spend or lead feed"
    },
    {
      "function": "weekly_client_report",
      "cron": "0 8 * * 1",
      "timezone": "UTC",
      "state": "runs, writes nothing; a person sends the report"
    }
  ],
  "pending": [
    "Reporting: daily cost-per-lead check and weekly report. Built, cannot run yet: nothing brings in ad spend or leads, no client is Active, and targets typed on the client record do not reach kpi_baselines, which the two jobs read",
    "Fathom calls: intake, #call-transcripts message, client matching and the Slack client picker. Built, no real call yet",
    "Claude connector demo: live for Fidel only; filmed only after Sheni's yes on the Final Builds QA",
    "#sentry test (tools/qa_sentry.py) and the Database page (os/db/schema_doc)"
  ],
  "access": {
    "people": [
      {
        "who": "Fidel Guajardo",
        "role": "Founder",
        "can_open": [
          "the app",
          "Slack (workspace admin)",
          "Make (owner)",
          "Google Drive (owns every client folder)",
          "Whop (admin)",
          "Skool (group admin)",
          "Modal (workspace owner)"
        ],
        "sign_in": "emailed code",
        "connector_role": "admin (only link today)"
      },
      {
        "who": "Paulo",
        "role": "CSM",
        "can_open": [
          "the app",
          "Slack",
          "Drive client folders (edit)"
        ],
        "sign_in": "emailed code",
        "connector_role": "none"
      },
      {
        "who": "Sterlin Phillips",
        "role": "Head of Media Buying",
        "can_open": [
          "the app",
          "Slack",
          "Drive client folders (edit)"
        ],
        "sign_in": "emailed code",
        "connector_role": "none",
        "note": "no slack_user_id on the Team page"
      },
      {
        "who": "Chris Brown",
        "role": "Media Buyer",
        "can_open": [
          "the app",
          "Slack",
          "Drive client folders (edit)"
        ],
        "sign_in": "emailed code",
        "connector_role": "none"
      },
      {
        "who": "Jo\u00e3o Marcos Cascione",
        "role": "Media Buyer",
        "can_open": [
          "the app",
          "Slack",
          "Drive client folders (edit)"
        ],
        "sign_in": "emailed code",
        "connector_role": "none"
      },
      {
        "who": "Icarus Growth (Sheni Salami)",
        "role": "Builder and support",
        "can_open": [
          "the app (2 app_access addresses)",
          "GitHub (admin)",
          "Make (admin seat + API key)",
          "server deploys"
        ],
        "sign_in": "emailed code",
        "connector_role": "makes connector links today"
      }
    ],
    "counts": {
      "team_active": 5,
      "sign_in_allow_list": 2,
      "github": "Sheni admin + 3 Icarus Growth developers read; nobody at LeadLift"
    },
    "sign_in": {
      "method": "email -> 6-digit code (Resend), no passwords",
      "allowed": [
        "Active team row with an email",
        "app_access allow list (Icarus Growth's 2 addresses)"
      ],
      "add_outside_address": "a developer adds it to app_access",
      "status": "as of 12 Oct no LeadLift person has signed in"
    },
    "add_member": [
      "Team -> Add someone (name, email, job title, capacity limit)",
      "status Active",
      "person panel -> Slack id",
      "person signs in with the emailed code",
      "invite to LeadLift Slack + team channels",
      "new client channels invite every Active member with a Slack id; add to existing client channels by hand",
      "Fidel shares the Drive Clients folder (edit)",
      "connector link on request (admin or member)",
      "send this page"
    ],
    "remove_member": [
      "Team -> Inactive (no sign-in; connector link stops within 60 s)",
      "remove from LeadLift Slack",
      "remove from the Drive Clients folder and each shared client folder by hand",
      "remove GitHub access if any"
    ],
    "sharing": [
      {
        "what": "client private Slack channel",
        "who": "paying client via Slack Connect invite (expires 14 days)",
        "revoke": "remove the client in Slack; do not archive the channel"
      },
      {
        "what": "Raw Footage folder",
        "who": "anyone with the link (edit), Sheni's choice 11 Oct; bookmarked in the client channel",
        "revoke": "Fidel changes Drive sharing; tell Icarus Growth first"
      },
      {
        "what": "client Drive folder",
        "who": "client views the folder, edits Raw Footage and Lead Sheet",
        "revoke": "Fidel removes the client in Drive"
      },
      {
        "what": "ad review link",
        "who": "client, at Client Review; no sign-in",
        "revoke": "acts only while the card waits at Client Review"
      },
      {
        "what": "onboarding form link",
        "who": "client, in the welcome email; one per client",
        "revoke": "OPEN: no switch documented"
      },
      {
        "what": "Skool invite",
        "who": "paying client",
        "revoke": "Fidel removes the member in Skool"
      },
      {
        "what": "this documentation site",
        "who": "anyone with the address",
        "revoke": "ask Icarus Growth"
      }
    ],
    "connector": {
      "exists": true,
      "what": "read boards, clients, team and calls; admin makes approved changes (add a script, move a card)",
      "roles": {
        "admin": [
          "reads everything the app shows",
          "writes after the person approves each one; logged under that person"
        ],
        "member": [
          "reads only"
        ]
      },
      "who_has_one": "Fidel only (as of 12 Oct); no write has run live",
      "get_link": "Icarus Growth makes each link one-to-one today; after handover the named owner (OPEN) does; shown once",
      "add_steps": [
        "Claude -> Settings -> Connectors",
        "Add custom connector",
        "Name: LeadLift OS",
        "Paste the personal link, save"
      ],
      "revoke": "Team -> Inactive (within 60 s), or a developer rotates the key",
      "plugin": "Claude Code plugin (connector + 4 skills), installed by nobody",
      "settings": [
        "LEADLIFT_CONNECTOR_KEY",
        "LEADLIFT_CONNECTOR_PEOPLE (not set)"
      ]
    },
    "code": {
      "exists": true,
      "repo": "https://github.com/Icarus-Growth/leadlift-os (private)",
      "owner_today": "Icarus Growth (Sheni admin; 3 developers read)",
      "owner_after": "OPEN: CHANGE_GUIDE.md owner line is still TODO",
      "server": "Modal app leadlift-os in Fidel's workspace; deploys run by Icarus Growth",
      "move_steps": [
        "LeadLift makes or chooses a GitHub org",
        "Icarus Growth transfers the repo (history stays)",
        "named owner gets a deploy login for Fidel's Modal workspace; do not move the server",
        "CI (lint, test) runs with no secrets",
        "owner name + email in CHANGE_GUIDE.md",
        "plugin users re-add the marketplace from the new owner"
      ],
      "checks": "lint, test",
      "warning": "the server URL is in 3 pg_net database rules and every saved connector"
    },
    "accounts": [
      {
        "tool": "Modal",
        "role": "server, routes, 4 crons",
        "owner": "Fidel's workspace; deploys by Icarus Growth",
        "secrets": [
          "Modal secret leadlift-os-secrets (copy of the repo .env)"
        ]
      },
      {
        "tool": "Supabase",
        "role": "database + sign-in",
        "owner": "OPEN",
        "secrets": [
          "SUPABASE_URL",
          "SUPABASE_SECRET_KEY",
          "SUPABASE_PUBLISHABLE_KEY",
          "SUPABASE_DATABASE_URL"
        ]
      },
      {
        "tool": "Cloudflare",
        "role": "app + onboarding form hosting",
        "owner": "OPEN (Icarus Growth holds an API token)",
        "secrets": [
          "CLOUDFLARE_API_TOKEN",
          "CLOUDFLARE_ACCOUNT_ID"
        ]
      },
      {
        "tool": "GoDaddy",
        "role": "leadliftagency.co DNS",
        "owner": "OPEN"
      },
      {
        "tool": "Resend",
        "role": "sign-in codes + welcome email",
        "owner": "OPEN",
        "secrets": [
          "RESEND_API_KEY",
          "RESEND_FROM"
        ]
      },
      {
        "tool": "Make",
        "role": "Drive work, Fidel's welcome, footage scan and moves",
        "owner": "Fidel (org Leadlift, Core plan, 10,000 ops/month); Icarus Growth API key + Sheni admin seat",
        "secrets": [
          "MAKE_HOOK_DRIVE_FOLDER",
          "MAKE_HOOK_DRIVE_ACCESS",
          "MAKE_HOOK_FIDEL_WELCOME",
          "MAKE_HOOK_FOOTAGE_SCAN",
          "MAKE_HOOK_FOOTAGE_MOVE",
          "MAKE_HOOK_FOOTAGE_MERGE",
          "MAKE_HOOK_EDITED_FOLDER"
        ]
      },
      {
        "tool": "Google Drive",
        "role": "client folders + footage",
        "owner": "Fidel; Make's Drive connection expires 11 Apr 2027"
      },
      {
        "tool": "Slack",
        "role": "every message and button",
        "owner": "Fidel (workspace admin); app set up by Icarus Growth",
        "secrets": [
          "SLACK_BOT_TOKEN",
          "SLACK_SIGNING_SECRET",
          "17 SLACK_CHANNEL_* ids"
        ]
      },
      {
        "tool": "Whop",
        "role": "payment",
        "owner": "Fidel",
        "secrets": [
          "WHOP_WEBHOOK_SECRET",
          "WHOP_SELLER_BUSINESS_ID"
        ]
      },
      {
        "tool": "Skool",
        "role": "group add",
        "owner": "Fidel",
        "secrets": [
          "SKOOL_ADD_MEMBER_WEBHOOK"
        ]
      },
      {
        "tool": "Fathom",
        "role": "calls",
        "owner": "LeadLift's Fathom account",
        "secrets": [
          "FATHOM_WEBHOOK_SECRET",
          "FATHOM_API_KEY"
        ]
      },
      {
        "tool": "OpenRouter",
        "role": "AI client matching",
        "owner": "LeadLift (checked 12 Oct)",
        "secrets": [
          "OPENROUTER_API_KEY"
        ]
      },
      {
        "tool": "PandaDoc",
        "role": "contract (not built)",
        "owner": "LeadLift company login, connected in Make"
      },
      {
        "tool": "GitHub",
        "role": "code",
        "owner": "Icarus Growth; moves to LeadLift at handover"
      }
    ],
    "secrets_policy": "Names only on this page and in this file. Values live in the Modal secret, Cloudflare settings and each tool's own connection settings. After any .env change run deploy/modal.sh secrets, or the server keeps the old key."
  }
}