Background & current state
With multiple channels (in-app NEW-094, web push NEW-093, email #342), there's no single place for users to control what they receive where. Without a respected preference store, we risk over-notifying.
Goal
Add a unified notification preferences center: per-channel, per-event-type opt-in/out, enforced by the notification service.
Technical design
- Preferences model:
(user, event_type, channel) -> enabled. The notification service checks preferences before dispatching on any channel; sensible defaults; "unsubscribe all".
- Frontend preferences UI grouped by event type with channel toggles.
Edge cases
- New event types → safe default + surfaced in UI.
- Legal/critical notices (e.g., security) → non-disableable category.
- Conflicting defaults → documented precedence.
Task breakdown
Acceptance criteria
Testing & verification
- Matrix tests asserting suppression per preference.
Out of scope
Dependencies / related
Difficulty: medium · Effort: M
Background & current state
With multiple channels (in-app NEW-094, web push NEW-093, email #342), there's no single place for users to control what they receive where. Without a respected preference store, we risk over-notifying.
Goal
Add a unified notification preferences center: per-channel, per-event-type opt-in/out, enforced by the notification service.
Technical design
(user, event_type, channel) -> enabled. The notification service checks preferences before dispatching on any channel; sensible defaults; "unsubscribe all".Edge cases
Task breakdown
Acceptance criteria
Testing & verification
Out of scope
Dependencies / related
Difficulty: medium · Effort: M