Seen versus read

The badge counts what has never been surfaced; opening the panel clears the badge but leaves unread rows visibly unread until you actually click them.

What it is

Two acknowledgement states on every notification. Unseen means never shown to you — it is what the badge and the toast candidates are drawn from. Seen-but-unread keeps its accent treatment in the panel. Read means you opened or clicked it.

Also called: badge won't clear · unread notifications · mark all read · still shows as new

See it
Seen versus read
Area
Operations
Group
Notifications
System
Notifications
Solves
2 named problems
01Opening the panel marks everything seen, and re-fires for anything that arrives while it is open.
02Clicking a row marks it read and navigates; dismissing a toast with the ✕ marks only SEEN; a toast that expires on its own marks NOTHING, because 'the badge still owes the user that event'.
03Counts move optimistically; server counts are skipped while a mark POST could still be racing the read, so a diff cannot re-light a badge the user just cleared.
The panel with three accented unread rows above older plain ones, badge cleared. NotificationBell.tsx. Sample data — no customer information appears here.
How it works
  1. 1Opening the panel marks everything seen, and re-fires for anything that arrives while it is open.
  2. 2Clicking a row marks it read and navigates; dismissing a toast with the ✕ marks only SEEN; a toast that expires on its own marks NOTHING, because 'the badge still owes the user that event'.
  3. 3Counts move optimistically; server counts are skipped while a mark POST could still be racing the read, so a diff cannot re-light a badge the user just cleared.
Why we built it

Migration 098 defines the model: 'unseen → badge + toast candidate; seen-but-unread → accent row in the panel'. The race guard exists because 'a diff read racing the seen/read UPDATE would re-light the badge the user just cleared' — and re-lighting it would also re-trigger the bell's mark-all-seen.

The problem
  • A badge that resurrects itself on the next poll
  • Glancing at the panel wiping your unread state
Sound familiar?
What you get
Clearing the badge does not lose your place
An auto-expiring toast never costs you the notification

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 →