Operator onboarding
Zero to a running SpeakerOps workspace: install, env names, migrate, seed, first admin, and the demo walk.
Goal and timebox
New human operators should go from a clean machine to a running local workspace without tribal knowledge. The target is under ninety minutes through install, migrate, seed, first admin, and a demo walk of CFP → evaluation → portal → schedule → readiness. Cloudflare dogfood deploy is optional and may take longer because of account setup.
Judges and invited staff who only need to click through the product can skip local install and use the private demo host with an allowlisted email instead.
Prerequisites
You need Node.js 20 or newer, pnpm matching the workspace packageManager pin, and a git clone of the SpeakerOps monorepo. Cloudflare account access is optional until you deploy dogfood or demo.
- Confirm node -v reports v20 or higher.
- Enable corepack if needed, then confirm pnpm -v matches the workspace pin.
- Clone the monorepo and change into the repository root.
- Run pnpm install. Do not source deployment secrets into install or CI gates.
node -v
pnpm -v
pnpm install
Environment names only
Copy variable names into a local secrets channel or a gitignored .env / .dev.vars file. Document names only in shared docs. Never commit API keys, magic-link tokens, encryption keys, or Cloudflare tokens.
| Name | Needed for | Purpose |
|---|---|---|
| SPEAKEROPS_DB_PATH | Local DB | Optional SQLite path (default .data/speakerops.local.sqlite) |
| BOOTSTRAP_ADMIN_EMAIL | First admin | Allowlisted email for controlled bootstrap |
| AUTH_DEV_OUTBOX | Local e2e only | Set to 1 to expose magic-link outbox for Playwright — never production default |
| TURNSTILE_SITE_KEY | Public CFP / Worker | Public Turnstile site key |
| TURNSTILE_SECRET_KEY | Worker secret | Turnstile secret via wrangler secret put |
| SPEAKEROPS_API_KEY | CLI / agents | Bearer secret spk_… minted in admin |
| SPEAKEROPS_API_URL | CLI optional | API base URL (default http://127.0.0.1:8787) |
| EMAIL_PROVIDER | Comms drain | sandbox (default), resend, or cloudflare on demo |
Migrate, seed, and first admin
Apply linear D1 migrations to local SQLite with the same SQL used on Cloudflare. Seed loads a realistic demo graph so every admin surface has data. First admin is controlled by allowlist and magic-link flow — there is no password database.
- Run pnpm db:migrate to apply packages/db/migrations to local SQLite.
- Run pnpm seed to load the demo event graph.
- Start the API and web apps per repository scripts (typical ports 8787 and 5173).
- Open /login, request a magic link for your allowlisted admin email, and complete the exchange.
- Confirm you land in admin with access to CFP, submissions, schedule, and settings.
pnpm db:migrate
pnpm seed
# then start API + web per package scripts / AGENTS.md
Demo walk (program path)
After login, walk the product in season order so you see how fields flow from forms to readiness. Keep this Learn handbook open beside the app.
- Open Admin → CFP forms. Review or edit the draft form, then understand publish pins an immutable version.
- Open the public CFP route for the form slug and submit a test proposal if your host allows it.
- Score the submission in evaluation, then record accept, reject, or waitlist on the submissions screen.
- As an accepted speaker, open the portal and complete a task or note outstanding work.
- Place a session on the schedule studio and resolve any conflict messaging.
- Open readiness and confirm outstanding tasks and stats match what you just did.
Gates and optional deploy
Local quality gates must stay non-interactive: typecheck, unit and CI tests, and Playwright inventory proofs run without production credentials. Optional dogfood deploy needs CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID in a secrets channel, plus D1 and Worker configuration described in Operations.
- pnpm typecheck
- pnpm test:ci
- pnpm test:e2e (and inventory crawl when required)
- Optional: dogfood deploy scripts from docs/OPERATIONS.md