Clean successor to V3 (forge: lilith/atlilith). Seeded from local Mac working tree at ~/Code/@projects/@cocottetech/. node_modules and build artifacts excluded via .gitignore. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
81 lines
4.3 KiB
Markdown
81 lines
4.3 KiB
Markdown
# D — Onboarding + persona-seed interview
|
||
|
||
## Goal
|
||
First-run experience: get Quinn from cold-install to a working ai-copilot in under 5 minutes, with a seeded `personas` row that ai-copilot + content-* specialists can lean on from day one.
|
||
|
||
## Designer skim
|
||
|
||
- **Headline UX**: 5-minute first-run. SSO device-link → conversational persona-seed interview (8–12 Qs via voice or text) → ai-copilot summarizes + Quinn approves → handoff to chat-home.
|
||
- **Flows (3)**: D1 SSO device-link · D2 persona-seed interview · D3 first-run empty state.
|
||
- **States (7)**: splash · device-link in progress · device-link error · mid-interview turn · persona summary review · persona save error · onboarding complete.
|
||
- **Pair-with**: [`persona-seed-interview.screen.md`](./persona-seed-interview.screen.md).
|
||
- **Blocking Qs**: [OPEN-DECISIONS.md](./OPEN-DECISIONS.md) → D-Q1 voice-vs-text default, D-Q2 interruptible TTS.
|
||
|
||
## Constraints
|
||
- Auth via SSO device-link against `quinn.sso` (federated, P0); will migrate to `platform.sso` later — UI should be auth-provider-agnostic.
|
||
- Persona-seed interview is **voice + text**: Quinn can speak answers (TTS prompts; STT capture) OR type. Mixing is fine.
|
||
- Persona is written via `PATCH /api/v1/personas/:user_id` once the user record exists.
|
||
- Reuse `lilith-messenger-ios/Core/Auth/{AuthManager,SSOAuthenticator,KeychainService}.swift` — port unchanged.
|
||
|
||
## Flows
|
||
|
||
### D1 — SSO device-link
|
||
1. Splash with brand mark (CocotteAI).
|
||
2. Tap "Sign in" → opens device-link QR / code displayed on iPhone.
|
||
3. Quinn scans on a trusted device OR enters the code in `quinn.sso`'s portal.
|
||
4. Device link confirmed → JWT issued → Keychain storage → home.
|
||
5. If user has no `personas` row → push to D2.
|
||
|
||
### D2 — Persona-seed interview
|
||
A guided conversation, ~8–12 questions, surfaced as a chat thread with `ai-copilot`. NOT a form.
|
||
|
||
Question shapes (designer to refine wording):
|
||
- "What's your brand voice in one sentence?" (free text, ~140 chars)
|
||
- "Pick 3–5 words your audience would say about you." (chip select with custom-add)
|
||
- "Who's your audience? Walk me through a typical fan." (free text / voice)
|
||
- "What surfaces do we plan for? OF / X / IG / TikTok / Tryst / TS4Rent / others?" (multi-select)
|
||
- For each selected surface: "Different voice here than your default? (yes/no — if yes, how?)"
|
||
- "What's off-limits? Topics, kinks, places I should never bring up." (free text, multiline)
|
||
- "What's a typical week like? When do you shoot? When do you post?" (free text / voice)
|
||
- "Anything I should know to not embarrass you?" (catch-all)
|
||
|
||
After: ai-copilot summarizes the persona back to Quinn and asks for sign-off. On approval → write `personas` row.
|
||
|
||
### D3 — First-run empty state (after persona seed)
|
||
- "Welcome — strategist is drafting your first 14 days. Back in ~30 seconds."
|
||
- Progress indicator while strategist runs (post-P0 — for P0 this state is "We're ready when you upload your first shoot or DM us a question").
|
||
|
||
## States to design
|
||
- Splash (signed-out).
|
||
- Device-link in progress (waiting on QR scan).
|
||
- Device-link error (timeout, wrong code).
|
||
- Mid-interview turn (question + voice/text input options).
|
||
- Persona summary review.
|
||
- Persona save error.
|
||
- Onboarding complete → handoff to chat home.
|
||
|
||
## In-the-wild copy
|
||
|
||
**Splash CTA** (hearth, dialed warmer — first impression):
|
||
> Welcome. Set the kitchen up.
|
||
|
||
**Device-link in progress** (working):
|
||
> Scan the code on a trusted device. Cocotte will know it's you.
|
||
|
||
**Mid-interview question, voice or text** (hearth):
|
||
> Two more, then she'll let you go. What's a typical week? When do you shoot, when do you post?
|
||
|
||
**Persona summary review** (working — Quinn is deciding):
|
||
> Here's what Cocotte heard. Voice: warm, dry, no marketing. Off-limits: real name, ex, Vegas. Surfaces: OF, X, Tryst, TS4Rent. Save and start, or rework anything?
|
||
|
||
**Onboarding complete, handoff** (hearth):
|
||
> She's ready. Drafts will be in the drawer by morning.
|
||
|
||
## Out of scope
|
||
- Multi-account switching (Quinn's only operator P0).
|
||
- Reset-and-redo persona (lives in persona-editor drawer, brief B5).
|
||
|
||
## Open questions
|
||
- Voice-first or text-first as the default input mode?
|
||
- Should the interview accept Quinn typing while ai-copilot is still speaking the next question (interruptible TTS)?
|
||
- Skip-to-end affordance, or force completion?
|