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
The viewer renders the entire sender table at once — 1,400+ rows on a realistic dataset — with no way to find a specific sender or dismiss ones you don't care about.
Proposal
Front-end only (web/, so the Pages demo inherits it via #19/#20):
Search filter: text input, case-insensitive substring match on sender addresses
Pagination: client-side, 50 rows per page, prev/next controls with page info
Hide button: an emoji button on each row that hides that sender from the list and subtracts its count from the Total messages tile (top-sender and distinct-senders tiles recompute too); hidden senders persist in localStorage
Show hidden toggle: reveals hidden senders (dimmed, with an unhide button) without adding them back into the totals
Acceptance criteria
Works in both the local viewer and the static demo (no server changes needed)
Sender strings still rendered exclusively via textContent (they are attacker-controlled)
Search and pagination compose (filtering resets to page 1; page clamps when rows disappear)
Hidden state survives reload; totals always exclude hidden senders
Problem
The viewer renders the entire sender table at once — 1,400+ rows on a realistic dataset — with no way to find a specific sender or dismiss ones you don't care about.
Proposal
Front-end only (web/, so the Pages demo inherits it via #19/#20):
Acceptance criteria