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>
6.3 KiB
6.3 KiB
second-member-invite.screen
Invite a second (or Nth) member to an org. Implements brief AC. 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
- Default (admin invite) — radio on Admin; sensible defaults selected.
- Talent invite — most read-only checkboxes off by default; brand row defaults to "existing brand."
- Owner invite — confirmation banner: "Owner role gives full org admin including billing. Continue?"
- Invalid delivery channel — inline error; Send disabled.
- 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."
- Pending invitation already exists — banner: "An invite to this address was sent on {date} (pending). Resend or cancel?"
- Org member cap reached (per plan tier from brief Z) — banner: "Demimonde's plan supports {N} members. Upgrade to invite more." Routes to billing.
- 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 — parent.
- Brief W — data-scope source.
- Brief Z — member cap source.
- Brief D — invite recipient's onboarding flow.
- Brief N — Coop-blocked check.
- 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).