Command Inbox
Overview

Judge access

Google OAuth sign-in for hackathon judges and reviewers

Command Inbox OAuth is published to Production (2026-06-18). Any Google account can sign in at command-inbox.sayantanbal.in.

  1. Open command-inbox.sayantanbal.inSign in with Google.
  2. If Google shows an unverified app warning, click AdvancedGo to Command Inbox (unsafe) — expected until Google completes OAuth verification (submitted; pending approval).
  3. Connect Gmail + Calendar on onboarding (or click Skip to inbox on the working-days step).
  4. Follow the Evaluator guide — 5-minute walkthrough on your own inbox.

We do not publish shared demo passwords. Every judge uses their own Gmail.

Plan B — Testing mode + test users

If Production sign-in fails unexpectedly:

  1. Open a GitHub issue with your Gmail address.
  2. Wait for confirmation your email was added to OAuth Test users in Google Cloud Console.
  3. Retry sign-in.

Until your email is on the test-user list (Testing mode only), Google shows Access blocked.

Agent demo without real contacts

The agent demo uses a synthetic contact — no email required:

  1. During onboarding, click Load demo contacts (or import in Settings → Contacts).
  2. This adds friend@corsair.dev for calendar invite demos.
  3. In the Agent panel, try: "Send a calendar invite to friend@corsair.dev at 9 AM next Thursday and email them to confirm."
  4. Approve create_calendar_invite and send_email when prompted — nothing sends without your click.

See also: Evaluator guide § Agent · Agent chat.

Before the demo

  1. Use a desktop browser (Chrome or Edge recommended).
  2. Prefer a fully indexed inbox for semantic search (/) — fresh accounts still get the last 50 threads classified immediately; background indexing continues with a progress banner.
  3. Optional: send yourself a scheduling email from another account to populate the Schedule lane before trying M.

Scopes requested

ScopePurpose
Gmail read/send/modifyInbox, compose, archive, search
Calendar read/writeEvents, invites, focus blocks

If a judge sees "Access blocked"

  • OAuth app reverted to Testing and their email is not on Test users — open a judge-access issue.
  • They signed in with a different Google account than the one added.
  • Production GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET do not match the OAuth app in GCP.

If a judge sees "unverified app"

Expected while Google verification is pending. Click Advanced → continue. The app is published; verification removes the warning (2–12+ weeks for Gmail scopes).

Demo account tips

  • Use a real inbox with a few scheduling threads in the Schedule lane for the M hero flow.
  • Send yourself a test email 30s before a live demo to show webhook → lane update.
  • Keep at least one AI provider key funded on the server (GOOGLE_GENERATIVE_AI_API_KEY or OPENAI_API_KEY) or add your own key under Settings → AI.

For the best semantic search (/) experience:

  1. Sign in and connect Google.
  2. Wait until the activity bar shows indexing complete (no “Indexing N more threads…” banner).
  3. Confirm / returns results for phrases in your mail.

Fresh connects still work: the last 50 threads get lanes immediately; older mail indexes in the background.

Calendar webhook security

Calendar push notifications require a stored channel token and an HTTPS APP_URL.

Local dev: Google rejects http://localhost. Use ngrok:

ngrok http 3000
# Set APP_URL=https://YOUR-SUBDOMAIN.ngrok-free.app in .env.local
bun scripts/renew-watches.ts

Production: set APP_URL to your Vercel domain, then reload /inbox once or run bun scripts/renew-watches.ts.

Until renewal succeeds on HTTPS, calendar webhooks return 503 Calendar watch not configured.