Inbox

A shared inbox, because sales mail is not a mailbox problem

/emails is one queue for the whole team rather than a personal inbox each. Conversations get assigned, snoozed, archived and commented on without anything leaving the building.

01

One queue, not a mailbox each

A thread is every message that shares a conversation, computed the same way everywhere it is used, so “this conversation” means the same thing in the list, the detail view and the ageing calculation. The whole team works from that one queue instead of five people each guessing whether someone already answered.

02

Assignment survives the next reply

Ownership, open or closed status, spam, trash and tags are stored against the conversation, not the latest message, so a new inbound reply cannot quietly wipe out who owns it. A reply that did clear ownership would send every active conversation back to Unassigned the moment the contact wrote back, which defeats the point of assigning it in the first place.

Archive and snooze work the other way round on purpose. They sit on the latest message, so a fresh reply carries none of that stamp and the thread naturally comes back into view, the same way an email client resurfaces something you archived.

03

Comments that stay internal

Reps can leave a note on a conversation for each other, a heads up, a reason for a delay, a question for a manager. That comment is never synced to HubSpot or Zoho, never copied into a reply, and no send path reads it at all. It is coordination for your team, not part of the customer’s record.

04

Bounces that do not overreact

An address only gets suppressed on a genuine hard bounce, a 5.x.x failure that means the mailbox or domain is gone. A 4.x.x delay, like a full inbox on the other end, does not suppress anything, because that mail is still queued for delivery, not failed.

05

Ageing that reflects the real wait

If the last message on a thread is inbound, it is waiting on your team, and the clock starts at the first message of that unanswered run rather than the most recent one. Three follow-ups from a contact over two days with no reply is a two-day wait, not a few minutes.

Website chat used to share this same queue and now has its own surface at /chat, because a visitor on the page is a live conversation in a way that mail is not. Assignment, status, and tags still mean the same thing on both.

06

Common questions

Is this a separate mail client, or does it use our existing addresses?
It reads and sends through the mailboxes you already have, Gmail, Microsoft 365, IMAP, or Amazon WorkMail among others. What changes is where mail lands: one shared queue at /emails instead of everyone's personal inbox, so the whole team sees the same conversation.
What happens to assignment when a contact replies?
It survives. Ownership, open or closed status, and tags live on the conversation itself, not on the latest message, so a new reply cannot silently return an assigned conversation to unassigned. Snooze and archive work the opposite way on purpose: they are stamped on the latest message, so a fresh reply naturally resurfaces a thread that was put away.
Do internal comments ever reach the customer?
No. A comment is coordination between reps, and it is never synced to HubSpot or Zoho, never quoted into a reply, and never sent anywhere near the customer. That boundary is checked directly, not just assumed.
When does a bounce actually suppress the address?
Only on a hard failure, a 5.x.x response saying the address does not exist or the domain is gone. A 4.x.x is a temporary delay, like a full mailbox, and does not suppress anything, because treating a delay as a bounce would mark mail that is still queued as failed.
How is a thread's waiting time measured?
From the first message of the current unanswered run, not the most recent one. If a contact sends three follow-ups over two days with no reply from you, the thread has been waiting two days, not the few minutes since their last message.