Same-event toasts merge instead of stacking

Arrivals of the same event on the same project inside a minute collapse into one toast reading “3 × New lead · Latest: S. Mitchell”.

What it is

Grouping is keyed on event type plus project id within a 60-second window. A group that escalates to critical takes on the critical severity and the longer ten-second lifetime, and the countdown restarts on merge so the new duration applies.

Also called: too many popups · toast spam · grouped alerts

See it
Same-event toasts merge instead of stacking
Area
Operations
Group
Notifications
System
Notifications
Solves
1 named problem
01Each fresh row looks for an existing toast with the same group key whose timestamp is within the window.
02On merge the title becomes a count, the body becomes 'Latest: <title>', and the row ids accumulate so dismissing the group marks all of them.
03Rows arrive newest-first and are enqueued oldest-first so the stack reads in order.
A single toast reading '3 × New lead · Latest: S. Mitchell'. NotificationProvider.tsx. Sample data — no customer information appears here.
How it works
  1. 1Each fresh row looks for an existing toast with the same group key whose timestamp is within the window.
  2. 2On merge the title becomes a count, the body becomes 'Latest: <title>', and the row ids accumulate so dismissing the group marks all of them.
  3. 3Rows arrive newest-first and are enqueued oldest-first so the stack reads in order.
Why we built it

A burst — a CSV import, a lead-form spike, a batch of stage completions — would otherwise produce one toast per row and bury the screen. This is the display-layer twin of the dispatcher's batch collapse.

The problem
  • Bursts producing one toast per row
Sound familiar?
What you get
A burst reads as one line with a count
Dismissing the group clears all of it

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →