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>
4 KiB
4 KiB
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.4–0.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
- Default — list grouped by day.
- Filter active — chip on top reflecting filter.
- Empty (after filter) — "Nothing in this slice."
- Empty (truly) — "No engagement yet. Quiet day."
- Refreshing — pull-to-refresh spinner.
- Backend-degraded (M §M2b) — banner: "Last-seen 14h ago; refreshing."
- 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.
Related
- Brief B — parent.
- unified-inbox.screen.md — sibling (raw thread feed).
- prospect-detail.screen.md — row target.
- Brief I, Brief K, Brief N, Brief P.
- triage contract.
Out of scope
- Composing a new outbound (composer is per-prospect from prospect-detail).
- Bulk operations (defer).