Skip to main content

Screen: Kickoff Interview

web/interview.html, reached via interview.html#t=<token>. This is the stakeholder-facing side of Kickoff Discovery — the one screen in the entire application a person with no SABLE account, and no SABLE login, will ever open.

No login, a token instead

The invite token in the URL fragment is the entire authentication model — there is no username, password, or Supabase session on this page. kickoff-intake verifies the token by hash lookup, checks expiry/revocation, and enforces a per-interview rate limit before accepting any answer.

What the stakeholder sees

The project's display name and their own name — nothing else about SABLE, the account, or any other stakeholder's answers. The interview itself is adaptive: it works through five built-in themes (success criteria, pain points, risks/concerns, data/access, scope/priorities) unless a project has configured its own question set, in which case those take priority.

What happens on completion

The full rendered transcript, capped at 60,000 characters, is written as one sources row (type = 'manual', external_id = 'kickoff:<id>') — the provenance root interview-synthesize later reads when a lead runs synthesis back on the Kickoff Discovery screen.

Where the code lives

  • sable-agents-demo/web/interview.html
  • sable-agents-demo/supabase/functions/kickoff-intake/index.ts