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.9 KiB
4.9 KiB
notifications-settings.screen
S3 settings category — notification channel × stakes × specialist preferences. Implements per brief S §S3 + brief C matrix. Reached from settings-root.screen.md "Notifications" card. Voice: working.
Layout (full-screen sheet)
┌─────────────────────────────────────────────────┐
│ ◄ Settings Done │ 56pt
├─────────────────────────────────────────────────┤
│ │
│ ─── Channels ─── │
│ ☑ iOS push │
│ ☑ iMessage self-notify │
│ ☑ Email digest │
│ ☐ Apple Watch │ AB only on if Watch paired
│ │
│ ─── By stakes ─── │
│ Push iMsg Email Watch │ matrix per brief C
│ High ☑ ☑ ☑ ☑ │
│ Med ☑ ☐ ☑ ☐ │
│ Low ☐ ☐ ☑ ☐ │
│ │
│ ─── Quiet hours ─── │
│ From: [ 22:00 ▼ ] To: [ 08:00 ▼ ] │
│ Override for high-stakes: ☑ allow │
│ │
│ ─── Per-specialist ─── │
│ • ai-copilot [ inherits ▼ ] │
│ • triage [ high+med only ▼ ] │
│ • content-x [ inherits ▼ ] │
│ • bookings-tryst [ failure-only ▼ ] │
│ [ See all 11 → ] │
│ │
│ ─── Daily digest ─── │
│ ☑ Show in-app at first chat open │
│ ☑ Send via email at 06:00 local │
│ [ Customize sections → ] │
│ │
└─────────────────────────────────────────────────┘
Components
| Component | Notes |
|---|---|
| Channels | 4 channels Quinn can opt into. Watch greyed when no Watch paired. |
| Stakes matrix | 3×4 grid: high/med/low × channel. Per brief C default-checked pattern. |
| Quiet hours | Time range + high-stakes override flag. |
| Per-specialist | Per-specialist preference: inherits / high+med only / failure-only / off. |
| Daily digest | In-app daily-digest.screen.md surfacing toggle + email cadence. |
States
- Default — sensible matrix per brief C. Quiet hours empty (no restriction).
- No push permission — top banner: "Cocotte doesn't have push permission. Grant in iOS Settings."
- Watch unpaired — Watch column greyed.
- All channels off — banner: "Cocotte can't reach you. Approvals will queue in-app only. Enable at least one channel."
- Quiet hours covering current time — banner: "It's quiet hours now. Cocotte's holding notifications."
- Per-specialist override active — chip: "{N} specialists overriding defaults."
- VoiceOver — matrix announced as table; channel columns announced as headers.
Interactions
- Tap a stakes-matrix cell → toggle that channel for that stakes tier.
- Tap quiet hours picker → time range editor.
- Tap per-specialist row → preference picker for that specialist.
- Tap "Customize sections" → daily-digest section toggles (which sections appear).
- Tap "See all 11" → full per-specialist list.
Edge cases
- High-stakes notification during quiet hours, override off — Cocotte still sends via iMessage as fallback (per brief M fallback hierarchy).
- Email channel set but Quinn's email unverified — chip "Email unverified. Add a working address."
- Daily digest off + chat-home open at 06:00 — Cocotte still shows the pinned card (digest section toggle covers the email, not in-app).
Related
- Brief S §S3 — parent.
- Brief C — channel × stakes matrix design.
- Brief M §M4 — fallback hierarchy.
- daily-digest.screen.md — in-app digest target.
- specialist-drawer.screen.md — per-specialist override entry.
Out of scope
- Per-channel quiet-hours overrides (defer).
- Notification-action quick replies (P3+).