Description
Notification Inbox collects attention-worthy events from Chat, Automations, and system processes into a persistent shell surface. It maintains unread state, supports mark-read and archive workflows, presents in-app toasts for new arrivals, announces updates accessibly, and can offer operating-system notifications when the runtime permits. The inbox remains reachable from the global shell while its settings determine which categories and sources may interrupt the user.
Delivery begins with typed event intents rather than arbitrary UI strings. The events package validates producer payloads, computes severity, lifetime, source identity, coalescing keys, titles, and summaries, then hands the intent to an injected sink. The web shell consumes persisted items and a server-sent event stream, reconciling the unread badge, list, toast stack, and announcements from one event flow.
Selling Points
- Centralizes cross-module attention signals so important automation or system outcomes do not disappear inside their source feature.
- Combines durable inbox history with immediate toast and optional OS delivery, serving both active and background work.
- Lets users mute categories or individual sources, reducing notification fatigue without disabling the whole system.
- Uses typed, validated event definitions so buyers receive consistent titles, severity, expiration, and grouping.
- Coalesces repetitive events, keeping high-volume workflows informative rather than noisy.
User Story
A workspace owner leaves an automation running and continues editing a Dotabase. A warning toast appears when the run reaches a cost threshold, the inbox badge increments, and the full item remains available after the toast clears. They mute a noisy source while leaving system warnings and direct Chat events enabled.
Extension Surface
The user-facing inbox is configurable. apps/web/src/modules/shell/notifications/CustomizeInboxPanel.tsx exposes category and source mute controls, and apps/web/src/modules/shell/notifications/useNotificationPrefsApi.ts persists those choices. Although packages/events/src/define-event-type.ts is an in-repo producer seam, it is not an external plugin registration contract, so this UI capability is rated by its supported user configuration.
Capabilities & Limits
- Lists persisted notifications with unread, read, archive, source, category, and severity state.
- Streams new items into badges, accessible announcements, in-app toasts, and optional OS notifications.
- Supports category and source muting plus coalescing of repeated events.
- Limit: producers must register typed events with concrete renderers; the inbox is not a general arbitrary-message broadcast channel.
Implementation Map
apps/web/src/modules/shell/notifications/NotificationsListPanel.tsxapps/web/src/modules/shell/notifications/CustomizeInboxPanel.tsxapps/web/src/modules/shell/notifications/useNotificationSseBridge.tspackages/events/src/emit.tspackages/events/src/types.ts