> ## Documentation Index
> Fetch the complete documentation index at: https://speaker-weave.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Self-host SpeakerWeave in about fifteen minutes.

<Steps>
  <Step title="Clone and install">
    ```bash theme={null}
    git clone https://github.com/Brandonmchu/speakerweave.git
    cd speakerweave
    python3.12 -m venv api/venv && source api/venv/bin/activate
    pip install -r api/requirements.txt
    (cd web && npm ci)
    ```
  </Step>

  <Step title="Configure the environment">
    ```bash theme={null}
    cp api/.env.example api/.env
    cp web/.env.example web/.env
    ```

    Set `SUPABASE_URL`, `SUPABASE_SERVICE_API_KEY`, `SUPABASE_JWT_SECRET`, and `PORTAL_SESSION_SECRET` in `api/.env`. Every variable the code reads is documented in the example file. A Supabase free-tier project is the shortest path (the API expects PostgREST + Storage); any Postgres works with equivalent roles.
  </Step>

  <Step title="Apply migrations and seed">
    ```bash theme={null}
    for m in api/migrations/*.sql; do psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f "$m"; done
    (cd api && python -m scripts.seed_demo seed)
    ```

    The seed creates a complete demo conference in `org_dev` — the same workspace the public demo uses.
  </Step>

  <Step title="Run it">
    ```bash theme={null}
    (cd api && uvicorn main:app --reload)   # http://localhost:8000
    (cd web && npm run dev)                 # http://localhost:5173
    ```

    Open `/dev-login` with the token printed by `python scripts/mint_dev_token.py`, or `/demo` for the public demo flow.
  </Step>
</Steps>

## Open the demo as anyone

The seeded workspace has three audiences, and each one has a public door — no account, no email code:

| Persona   | Door                               | What it opens                                                                                                          |
| --------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| Organizer | `GET /public/demo-entry/organizer` | A short-lived session token for the demo org (the same one `/public/demo-token` returns)                               |
| Reviewer  | `GET /public/demo-entry/reviewer`  | A review magic link — `{"kind":"path","path":"/review/…"}` — for a seeded evaluator with assignments in the open round |
| Speaker   | `GET /public/demo-entry/speaker`   | A portal magic link for a seeded speaker who still owes content                                                        |

The landing page offers the same three doors as buttons. Links are minted with the real magic-link machinery (scoped to the demo org, 8-hour expiry, revocable), so what a visitor sees is what an invited reviewer or speaker sees. A deployment whose demo workspace was never seeded answers `404` rather than handing out a link into an empty portal.

## Optional layers

Each activates with configuration alone and stays dormant otherwise:

| Layer          | Enable with                                                                                                                                                                                      |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| AI chat agent  | `OPENAI_API_KEY` **or** `ANTHROPIC_API_KEY` ([details](/ai/chat-agent))                                                                                                                          |
| Email delivery | `RESEND_API_KEY` (without it, mail writes local `.eml` files)                                                                                                                                    |
| Clerk auth     | `VITE_CLERK_PUBLISHABLE_KEY` + a `supabase` JWT template                                                                                                                                         |
| Slack agent    | Manifest at `api/slack_manifest.json`; Events + Interactivity on the same URL; `SLACK_BOT_TOKEN`, `SLACK_SIGNING_SECRET`, `SLACK_DEFAULT_ORG`, and the agent provider key ([details](/ai/slack)) |
| Airtable sync  | Per-organization settings in the UI ([details](/integrations/airtable))                                                                                                                          |

The complete environment reference — every variable, grouped by feature, with swap guidance per layer — lives in [configuration](/configuration) and [tech stack & swap points](/architecture).
