Skip to content

Unified team notification inbox — invites, shared sessions & control requests through the bell + toasts #67

Description

@kipavy

Part of the team-ux initiative (brainstorm 2026-07-24). This is the keystone — the receive-side channel that makes #66 and half of #65 feel magic.

Relates: #41 (async key-distribution: the "waiting for owner" state belongs here).

Problem

Every receive-side team event is silent or hidden today:

  • Pending team/vault invites → a 10px dashed amber icon in the vault sidebar (PendingInviteButton in VaultSidebar.tsx). No toast, no bell entry — easy to miss.
  • Shared sessions → just appear in the Team Sessions rail; no signal that they did.
  • Control requests → only inline in the thin MultiplayerBar.tsx. If the host isn't looking at that terminal tab, the request is missed entirely; the guest sees a dead button with no pending/queue feedback.

Meanwhile a NotificationBell component already exists (src/components/notifications/NotificationBell.tsx) but only carries plugin banners.

Proposed reflow

  • Route all team events through the notification bell + a toast on arrival, with inline one-tap actions:
  • One consistent inbox for anything requiring a team decision. Retire the dashed sidebar icon as the primary surface (keep as a secondary indicator if useful).
  • Team vault: invitee locked out (no key) when they accept while the inviter is offline #41 tie-in: when an invitee accepts but the owner is offline (keyless window), the inbox shows an honest "waiting for owner to grant access" state instead of a silent failure.

Decisions (brainstorm 2026-07-24)

  • Reuse NotificationBell + notificationStore rather than a new surface; extend it to carry actionable team events (not just severity banners).
  • Toasts via existing teamActionFeedback.ts patterns; never steal focus for low-ceremony actions (mirror the AI-agent risk-scaled-toast rule in AI Agent: UI/UX design & anti-clutter pass #59).

Still open

  • Event taxonomy + persistence (dismiss/read state, history).
  • Transport: which events are ws-pushed vs. polled (loadMyPendingInvitations).
  • Control-request delivery to a host who's on a different tab/window.
  • Mobile surfacing of the inbox.

Metadata

Metadata

Assignees

No one assigned

    Labels

    designUI/UX design & interactionenhancementNew feature or requestteam-uxTeam & collaboration UX flows (sessions, vaults, invites, presence)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions