Task Breakdown: Per-Agent Inbox UI
Feature ID: agent-inbox-ui
Last updated: 2026-05-28
Each task = one Jira child issue. Target ~10 min per task.
Phase 1 — Dependencies
- T1 Install
@react-email/components+@react-email/renderinapps/web. - T2 Install
@novu/react(gated, only when novu plugin enabled).
Phase 2 — Settings routes
- T3
/settings/integrations/emailspage shell (list view). - T4 Add-address wizard (4-step Sheet).
- T5
/settings/integrations/channelspage shell. - T6 Add-channel wizard (3-step Sheet).
- T7
/settings/notificationspage shell (subscriptions matrix). - T8 Sidebar update to include new entries.
Phase 3 — Per-Agent inbox tab
- T9 Add Inbox tab to agent detail layout.
- T10 Inbox list page (table + filters).
- T11 Message detail page.
- T12 Composer page.
Phase 4 — Components
- T13
AddressListcomponent. - T14
AddAddressWizard(4 steps + verification poll). - T15
MessageList(virtualised when >500 rows). - T16
MessageDetail. - T17
Composerform (subject + to/cc/bcc chips + body). - T18
ComposerReact-Email template mode toggle. - T19
Composerlive preview iframe. - T20
ChannelList+AddChannelWizard. - T21
PreferencesMatrix(event × channel checkbox grid). - T22 Quiet-hours + category-mute panels.
Phase 5 — Data hooks
- T23
useEmailAddresses. - T24
useAgentInbox. - T25
useEmailMessage. - T26
useNotificationChannels. - T27
useNotificationPreferences. - T28
useInboxStream(SSE + SWR fallback).
Phase 6 — i18n
- T29 English strings for all new surfaces.
Phase 7 — Testing
- T30 Composer state-machine unit tests.
- T31 Playwright E2E: add address → assign → send message round-trip.
- T32 axe-core accessibility pass on new routes.
Phase 8 — Polish
- T33 Empty states.
- T34 Virtualised message list for >1000 rows.
- T35 Provider-error chip + retry action.
Status legend
[ ] not started · [~] in progress · [x] done · [!] blocked