cocottetech/@platform/codebase/@features/ai-copilot/docs/second-member-invite.screen.md

100 lines
6.3 KiB
Markdown
Raw Normal View History

# second-member-invite.screen
Invite a second (or Nth) member to an org. Implements [brief AC](./AC-second-member-onboarding.brief.md). P5+ — speculative. Reached from org-overlay-settings.screen.md → "+ Invite member." Voice: working.
## Layout (full-screen sheet)
```
┌─────────────────────────────────────────────────┐
│ Cancel Invite to Demimonde Send │ 56pt
├─────────────────────────────────────────────────┤
│ │
│ ─── Their identity ─── │
│ Display name (their choice): │
│ ╭───────────────────────────────────────╮ │
│ │ Their working name │ │
│ ╰───────────────────────────────────────╯ │
│ Email or phone (for invite delivery): │
│ ╭───────────────────────────────────────╮ │
│ │ │ │
│ ╰───────────────────────────────────────╯ │
│ │
│ ─── Their role ─── │
│ ○ Owner (full org admin) │
│ ● Admin (manage members + brands) │
│ ○ Talent (operates under brand, no org admin) │
│ ○ Read-only (audit + analytics only) │
│ │
│ ─── What they can see ─── │
│ ☑ Their own engagement / audit │
│ ☑ Org-wide audit (per W §data-scope) │
│ ☐ Other members' private data │
│ │
│ ─── Specialists ─── │
│ Initial posture: ● Inherits org defaults │
│ ○ Custom │
│ ☑ All gates at "propose only" for first 14d │ safety default
│ │
│ ─── Brand ownership ─── │
│ Will they operate a brand? │
│ ○ Quinn's existing brand (Cocotte umbrella) │
│ ● Their own brand (new sub-brand under org) │
│ [ Configure their brand → ] │
│ │
│ ─── Notes for them ─── │
│ ╭───────────────────────────────────────╮ │
│ │ "Looking forward to working with you" │ │
│ ╰───────────────────────────────────────╯ │
│ │
└─────────────────────────────────────────────────┘
```
## Components
| Component | Notes |
|---|---|
| Identity | Display name (their pick, not real name) + delivery channel. |
| Role | 4 levels: Owner / Admin / Talent / Read-only. |
| What they can see | Data-scope overrides per W §data-scope. |
| Specialists | Initial posture inheritance + 14-day "propose only" safety default. |
| Brand ownership | They join an existing brand or get their own sub-brand. |
| Notes | Personal welcome message in invite email. |
## States
1. **Default (admin invite)** — radio on Admin; sensible defaults selected.
2. **Talent invite** — most read-only checkboxes off by default; brand row defaults to "existing brand."
3. **Owner invite** — confirmation banner: "Owner role gives full org admin including billing. Continue?"
4. **Invalid delivery channel** — inline error; Send disabled.
5. **Existing CocotteAI user on this email** — chip: "This person already has a CocotteAI account. They'll see the invite as 'join org' on their next sign-in."
6. **Pending invitation already exists** — banner: "An invite to this address was sent on {date} (pending). Resend or cancel?"
7. **Org member cap reached** (per plan tier from brief Z) — banner: "Demimonde's plan supports {N} members. Upgrade to invite more." Routes to billing.
8. **Compliance flag** (jurisdiction conflict: e.g. talent in a jurisdiction the org can't operate in) — soft warning, doesn't block.
## Interactions
- **Tap a role** → updates "what they can see" defaults.
- **Tap "Configure their brand"** → brand-config sheet (sub-brand details: name, domain, voice lean).
- **Tap "Send"** → sends invite + records audit; confirmation toast.
- **Long-press a sent invite (in member list)** → "Resend / Cancel / Modify role."
## Edge cases
- **Sending to a Coop-blocked address** (per N) — soft warning: "This address is flagged in your Berlin coop. Continue anyway?"
- **Member accepts and immediately wants different role** — they request via chat; owner gets approval card.
- **Invite expired** (14-day default TTL) — automatically marked expired; member list shows expired chip.
- **Pre-existing personal account being upgraded to org member** — data migration prompt: "Their personal data will stay personal. They'll see org data after accepting."
## Related
- [Brief AC](./AC-second-member-onboarding.brief.md) — parent.
- [Brief W](./W-org-overlay.brief.md) — data-scope source.
- [Brief Z](./Z-billing-payments.brief.md) — member cap source.
- [Brief D](./D-onboarding.brief.md) — invite recipient's onboarding flow.
- [Brief N](./N-provider-coop.brief.md) — Coop-blocked check.
- [org-overlay-settings.screen.md](./org-overlay-settings.screen.md) — entry.
## Out of scope
- Bulk invites (defer; per-member at P0).
- Inviting to a coop (separate flow; brief N coop-invite mechanism).
- Custom role definitions (4 fixed roles at P0).