Background & current state
The UI polls for updates (frontend/src/hooks/useCampaignPolling.js). Polling is wasteful and laggy. Backend real-time exists/planned (WS #456, Horizon SSE #468), but the frontend doesn't consume a live stream.
Goal
Consume a WebSocket/SSE stream client-side so campaign/participant state updates live, with reconnect/backoff and cache reconciliation.
Technical design
Edge cases
- Connection drop → backoff reconnect + resume; fall back to polling.
- Out-of-order/duplicate events → idempotent cache updates.
- Many tabs → shared worker or per-tab connection cap.
- Auth for the stream.
Task breakdown
Acceptance criteria
Testing & verification
- E2E: trigger a backend event → UI updates without refresh.
Out of scope
Dependencies / related
Difficulty: medium · Effort: M · stellar
Background & current state
The UI polls for updates (
frontend/src/hooks/useCampaignPolling.js). Polling is wasteful and laggy. Backend real-time exists/planned (WS #456, Horizon SSE #468), but the frontend doesn't consume a live stream.Goal
Consume a WebSocket/SSE stream client-side so campaign/participant state updates live, with reconnect/backoff and cache reconciliation.
Technical design
Edge cases
Task breakdown
useCampaignPolling.Acceptance criteria
Testing & verification
Out of scope
Dependencies / related
Difficulty: medium · Effort: M · stellar