cocottetech/@platform/codebase/@features/ai-copilot/docs/engagement-drawer.screen.md
natalie 1b719e1fd7 chore(bootstrap): initial V4 commit
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>
2026-05-18 08:11:41 -07:00

4 KiB
Raw Blame History

engagement-drawer.screen

The engagement-feed drawer — list of inbound engagement events (replies, DMs, mentions, prospects warming) per brief B §engagement. Sibling to unified-inbox; this drawer is the prospect-funnel view (typed by status × surface × specialist), where unified-inbox is the raw thread view. Voice: working.

Layout (full-screen drawer)

┌─────────────────────────────────────────────────┐
│ ◄ Chat                    🔍   ⚙ filters       │ 56pt
├─────────────────────────────────────────────────┤
│  [ All · 47 ] [ Hot · 12 ] [ Warm · 28 ] [ Cold]│   tier filter
│  via: [ any ▾ ]   sort: [ tier desc ▾ ]         │
├─────────────────────────────────────────────────┤
│                                                 │
│  ─── Today ───                                  │
│  🔥 @felix · Tryst · "thinking about Berlin…"   │   tier + handle + source + excerpt
│     drafted reply pending you · 14:02           │
│  🔥 @mira · OnlyFans DM · "VIP rates?"          │
│     drafted by content-onlyfans · 11:48         │
│  🟡 @carl · X reply · "love the tease"          │
│     no draft, low-tier · 10:32                  │
│                                                 │
│  ─── Earlier this week ───                      │
│  🟡 @vincent · TS4Rent · 2d ago                 │
│  ❄ @anon · OnlyFans · 4d (blocked: spam)        │
│  …                                              │
│  [ See all → ]                                  │
│                                                 │
└─────────────────────────────────────────────────┘

Components

Component Notes
Top bar Back + search (routes to global-search scoped to engagement) + filter cog.
Tier filter Hot ≥0.7 / Warm 0.40.7 / Cold <0.4, per prospect-classifier-claude (brief J port).
Source filter All / iMessage / Tryst / OF / X / … (24-surface roster).
Sort Tier desc / time desc / unread first.
Row Tier glyph + handle + source chip + excerpt + draft status + timestamp.

States

  1. Default — list grouped by day.
  2. Filter active — chip on top reflecting filter.
  3. Empty (after filter) — "Nothing in this slice."
  4. Empty (truly) — "No engagement yet. Quiet day."
  5. Refreshing — pull-to-refresh spinner.
  6. Backend-degraded (M §M2b) — banner: "Last-seen 14h ago; refreshing."
  7. VoiceOver — sections + rows announce tier as "hot/warm/cold."

Interactions

  • Tap row → prospect-detail.screen.md.
  • Long-press row → quick menu: Block / Mark cold / Approve draft / Counter-action.
  • Tap tier filter → re-pull list.
  • Pull-to-refresh → re-pull.

Edge cases

  • Triage marked something as blocked (per brief K §K1) — row shows "(blocked: reason)" muted.
  • Coop intel hit (per N) on the sender — chip "🛡 coop flag" on the row.
  • Multi-thread prospect (same person across surfaces) — single row with chip "+N threads"; tap expands.

Out of scope

  • Composing a new outbound (composer is per-prospect from prospect-detail).
  • Bulk operations (defer).