Unread stays unread until you say otherwise

Opening a conversation does not clear its unread badge — only the explicit Mark read button does.

What it is

Read state on a conversation is controlled by the person, not by the act of looking. The badge survives opening the thread and clears only when the builder presses Mark read in the thread header.

Also called: message marked read too early · unread badge disappears · mark as unread

See it
Unread stays unread until you say otherwise
🔒ridgelinepostframe.com/project/sticky211
Riding Arena
Framing · on schedule
Contact list rows with unread dots still lit after the thread has been opened, and the Mark read button in the thread header. ContactsView.tsx. Sample data — no customer information appears here.
How it works
  1. 1Opening a contact loads the thread but does not write read_at
  2. 2The thread header carries an explicit Mark read control
  3. 3markInboundRead clears read_at for that contact's stored inbound rows only
Why we built it

Reps open messages they cannot act on yet — a reply that needs a price, a question that needs the crew lead — and the moment opening a conversation cleared its unread badge, the only reminder they had was gone. The message got read, then forgotten, and the customer waited. Opening a thread now leaves it unread; only an explicit Mark read clears it.

The problem
  • Replies forgotten because glancing at them cleared the reminder
  • Unread counts that measure looking rather than doing
Sound familiar?
What you get
The unread badge stays a real to-do list
Reading on the run costs nothing

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 →