Publish every change of state, not only arrivals

FeatureEmailService
Shipped
August 14, 2026 at 11:24 PM UTC
Author
Kamo
Commit
26e78cd

A member has this open in more than one tab about as often as not, and often on a phone as well. Each of those holds its own socket and draws its own bell, and until now the only thing that reached them was a new notification — so reading or clearing the centre in one window left every other one counting notifications that were already gone, with nothing but a page reload to correct it. Reads, mark-all-reads, dismissals, snoozes and deletions now go out on the same per-member topic arrivals use. The tab that caused the change gets its own echo like everybody else; the browser applies them idempotently. Quiet hours and do-not-disturb were holding the notification rather than the toast. Nothing at all was published inside the window, so the badge could not move until the page was reloaded — the member who had configured the feature was the only one whose count could not be trusted. A held notification is now published with `silent: true`: it belongs in the centre and in the count, and it is the sound, the card and the desktop pop that quiet hours exists to suppress. It still does not touch deliveredAt, so it can never come back as a toast once the window has passed. The topic's `type` strings are constants now rather than literals scattered across six methods, since the browser switches on them and a typo is a frame that falls through to "an arrival".

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing