You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Provide a durable in-app inbox for Friend System actions, with realtime delivery as an enhancement rather than the source of truth.
MVP notification types
The notification foundation ships first with:
incoming friend request;
friend request accepted.
It must define the typed extension point that #187 uses for room invitations, but #105 does not wait for the room-invitation resource to be implemented.
Friend presence is shown in the friends hub and does not create a durable "came online" notification. The MVP does not send email, SMS, browser push, or OS notifications.
Safety model
Notifications are typed references to server-owned resources, not arbitrary action definitions, callback URLs, or executable payloads. Each action calls the authenticated relationship/invitation endpoint, which revalidates the current resource state and recipient. A stale notification may become read/non-actionable but can never authorize an operation by itself.
Never ingest, address, search, deliver, or render notifications through email.
Data and delivery
Persist recipient, type, actor reference, source type/ID, dedupe key, created/read timestamps, and expiry/retention metadata.
MongoDB remains the source of truth; add a backward-compatible PostgreSQL mirror without switching reads.
Deduplicate repeated events for the same active source.
Send a typed notification_created/updated event to the recipient's existing per-user Socket.IO room.
Refetch unread count/recent notifications on connect and reconnect so Redis interruption or missed events self-heal.
Expired/resolved resources remain safe to display but have no invalid action.
User experience
Header bell with unread count and a compact recent-notification menu.
Full /notifications page with cursor pagination.
Mark one/all as read.
Accept/decline friend requests with pending, success, stale, and error states.
Goal
Provide a durable in-app inbox for Friend System actions, with realtime delivery as an enhancement rather than the source of truth.
MVP notification types
The notification foundation ships first with:
It must define the typed extension point that #187 uses for room invitations, but #105 does not wait for the room-invitation resource to be implemented.
Friend presence is shown in the friends hub and does not create a durable "came online" notification. The MVP does not send email, SMS, browser push, or OS notifications.
Safety model
Notifications are typed references to server-owned resources, not arbitrary action definitions, callback URLs, or executable payloads. Each action calls the authenticated relationship/invitation endpoint, which revalidates the current resource state and recipient. A stale notification may become read/non-actionable but can never authorize an operation by itself.
Never ingest, address, search, deliver, or render notifications through email.
Data and delivery
notification_created/updatedevent to the recipient's existing per-user Socket.IO room.User experience
/notificationspage with cursor pagination.Acceptance criteria
Dependencies
Launch gate
Follow-up integration
Non-goals