Contacts is your inbox. Click a person and you see everything they sent you and everything you sent them. Texts, emails, calls, voicemails and photos read as one conversation — not four separate tools. It does not matter which line or which inbox it came down. It lands in the same place. The post-frame & barndominium operating system keeps every word with the customer it belongs to — not on one rep's phone.
Also called: inbox · message history · customer thread · conversation view · communication log
Texts, emails, calls and voicemails read as one conversation
Open a person and you get all of it. The email you sent the quote in. The texts that followed. The call they made Tuesday, the voicemail they left Thursday. In the order it happened. Nobody has to remember whether they texted or emailed. Nobody has to check three places to find out what this customer was told.
Friday afternoon you are scrolling your phone for the texts and your laptop for the sent mail, trying to work out what you actually promised this customer about the sidewall height.
Rather than flatten everything into identical chat bubbles, each row keeps the shape it arrived in — an email folds up under its subject line, a call carries its own badge — so a scan down the column separates a promise you made from a call you missed. It also opens at the newest message and re-reads itself every ten seconds while you sit there, and a poll that finds nothing hands back the same rows rather than redrawing, so the thread only ever moves when something actually arrived.
A call is not a chat bubble
Missed call, incoming call, outbound call, voicemail — four different rows, four different colours, with the arrow pointing the way the call went. Who the call rings, how long it rings for and who takes the message when nobody picks up are phone settings, and they live on what happens when someone calls your number — this page is about where that call ends up written down.
Eleven grey lines starting with a phone emoji, and no way to tell at a glance which of them is a lead who rang twice and got nothing back.
Direction is read off the wording of the record, not the message's own inbound flag — every call row is written by the carrier webhook as an inbound record whoever dialled, so trusting that flag labelled your own outgoing calls as incoming. Colour and an arrow carry it instead, in the same language the phone dock uses, because telling they rang us from we rang them should not require reading a sentence.
Calling is just the third way to reach them
Text, Email and Call sit side by side under the thread, so ringing a customer back no longer means leaving for a dialer and finding them all over again. Press the phone and the softphone comes up over the screen — the call timer, Mute, Speaker, Note, Script, Task and End call live there, not in the thread — and Open conversation brings you back here mid-call, to text or email without hanging up. When a channel is greyed out it tells you which of the two things is missing: your account is not set up for it, or this person has no number on file.
You answer a text with an email because that was the window already open, and the customer, who only ever checks texts, hears nothing back for a week.
The channel picker sits on the same row as Send because how you reach someone is part of sending, not a decision made somewhere else first. And the two reasons a channel is dead are said out loud rather than both showing as a grey tab — one of them is fixed by adding a phone number to the contact, the other by registering the business with the carriers, and letting a rep type a whole message before finding out which is the version nobody forgives. For the rep, never having to leave the conversation to make a call means never losing his place — and the customer never hears the click-click of somebody hunting for his file.
The voicemail where they gave you their budget is on their record
Voicemails, call recordings and photos customers text in are filed onto the contact by themselves. Voicemails sit at the very top, because a message someone left is a person waiting for a call back. Recordings collapse underneath, because they pile up fast. A photo your own crew takes is a different animal — it gets filed against the job and the stage by the jobsite photo system, and never comes near this thread unless you send it.
The customer says he texted you the photo of the rotted post and left his budget on your voicemail, and both are sitting on a phone in somebody else's pocket.
A clip is marked heard on play, not on render — scrolling past a voicemail is not listening to it, and clearing the badge because it appeared on screen hides the one thing still owed a call. Starring pins a clip above the pile after twenty more calls have buried it, and every clip carries a transcript you can read on a noisy site instead of holding a phone to your ear.
Every estimate email says what happened after you pressed send
Emails fold up under their subject line and count themselves — (4 messages) — with one word on the header saying what became of the last one. Open it and each message renders the way the customer saw it, tables and all, because a real email read as plain text is gibberish. Reply and Forward sit at the foot of the chain, so a spec question goes to a supplier without leaving the job record.
You chase a quote for three weeks thinking they are mulling it over, when the address had a typo in it and the thing never landed at all.
Status rides on the message itself instead of living in a separate report, so "did they even get the quote" is answered in the same place as the quote — and only mail we sent ourselves carries a provider id, so a message that came down a connected CRM shows no status rather than a made-up Sent. A quote that bounced, or that has sat unopened for a week, is chased from where you sent it: review and send goes through what each of those words means and what to do next.
Reading a message on the run does not clear the reminder to answer it
Opening a conversation does not mark it read. Only pressing Mark read does. A rep who glances at a text from the truck still has the badge waiting when he gets to a desk. Texts from numbers nobody has saved are not lost either — they collect in their own Unassigned tab, and one dropdown files the message onto the right person.
A question sits four days unanswered because someone opened it at a stoplight, and the count that was supposed to remind you had cleared itself by the time anybody got to a desk.
The unread count is a to-do list, not a record of who looked, so it clears on a deliberate act. The list puts unread threads above everything else and orders both tiers newest-message-first, so an incoming text re-sorts the column live — and the Unassigned pile deliberately offers no "create contact" button, because a stranger's text is not a lead until somebody says it is.
The follow-up you write twenty times a week goes out in two clicks
Saved messages, merge fields and your signature live on the account, not in one browser tab — so they are still there next week, and a starter set arrives already carrying your company name. Drop in the customer's first name, their building type or your own name from a list, and see what each one turns into before it goes. Or press the microphone and talk, which is what you want with gloves on. Send splits: a message written at nine at night goes out at eight in the morning, and sits in the thread as a dashed bubble until it does.
The same "we are on for Thursday, weather permitting" note gets retyped from scratch forty times a month, and one in five goes out with the last customer's name still sitting in it.
All of it sits on the compose row itself — no side panel, no library to go and open — because a shortcut that costs you a detour stops being a shortcut, and people quietly go back to typing it out. Snippets are read from the database rather than held in the page, which is the difference between Save as snippet working and only appearing to work until the next refresh.
The thread is a count you can trust of what was actually sent
A text sent through a connected CRM exists in two places at once, and the pair collapses into one row. Send the same thing twice on purpose and it still shows twice — nothing is hidden from you. Everything the platform sends is written into the conversation as well as leaving, so unplug the CRM in the integrations tab tomorrow and the record of what you told this customer stays exactly where it is.
A rep texts a customer, pulls them up an hour later, finds an empty history and sends the whole thing again — so the customer gets it twice and decides nobody in your office talks to each other.
Both pipes are read rather than one being trusted and the other ignored. Matching on ids alone is not enough — a send through the CRM often comes back with no id at all, which is why every estimate text showed twice — so an outbound row is paired on the same words within five minutes, and the pairing is one-to-one, which is what keeps a deliberate re-send counting as two.
The message is written down before anyone works out whose it is
A reply is stored first and interpreted after. Who sent it, which contact it belongs to and who gets told are all worked out afterwards, and any of them is allowed to fail without the message going anywhere. A text from a number nobody recognises is still a text. So is a note the customer types on their own project page — this page is about where it comes out on your side.
Notifications are switched off while the office argues about who wants what, and a customer's reply is never seen by anybody because the alert was the only thing carrying it.
Carriers deliver at least once and retry anything slow, so a unique index on the provider's own message id means a retry lands on the same row instead of a second copy of the customer's text. The alert is deliberately downstream of the write and gated on your own opt-in in the notification grid: silence is a delivery preference, not permission to drop mail. And when a reply comes back to a sending domain several builders share, it is held for a human rather than filed on a guess — holding a message is recoverable, dropping it into a competitor's inbox is not.
The same conversation is on the lead card
Open a deal on the sales board and the Conversation tab shows the same thread, off the same spine, refreshed on the same ten-second beat. Text or email from there without leaving the deal you are working. It is the short version — no photo gallery, no activity panel — but it can never disagree with the full one.
You are mid-deal on the board, need to answer one question, and end up in a second tab hunting for the same person you already have open.
A light sibling rather than a second copy: both surfaces call the same merge of the two pipes, so there is no chance of one showing a message the other has not got. Its channel buttons are gated on what the company can send, never on the phone number cached in the card — the provider resolves the real address at send time, and a missing one comes back as a plain error instead of a button that mysteriously does nothing.
Ringing them back goes on a list, not in your head
There is a button on the conversation header that drops this person's number straight onto the call list. Reading a thread is exactly when someone decides to ring back, and the decision and the list are one press apart. The calls that went unanswered are already on that same list, put there by the missed-call rules.
You read the voicemail transcript, think "I'll ring him after lunch", and remember at six o'clock on the drive home.
One list holds both the calls you meant to make and the calls nobody returned, because a rep working a queue should not have to check two of them — and a text back closes the same debt a call would, so a builder who answers with a message does not read as somebody who ignored the lead.
I'll get back to them Thursday, written where Thursday can find it
A reminder button in the thread header opens already knowing who this is. Three presets, because they are the only three things a rep means by I'll get back to them: reply to their last message, call them, or check in if they have not replied. The task carries the contact with it, so it opens back onto this conversation.
You tell yourself you will chase the colour choice on Thursday, and Thursday arrives with nothing anywhere saying so.
The reminder is created where the intention forms — in the middle of reading — instead of on a task screen you have to go to and re-describe the situation on. It is filed as coming from the inbox thread, so a follow-up that was never made can be traced back to the conversation that should have produced it.
Hand the job over and the record is the briefing
The thread does not stand alone on the screen. The rail beside it — his number, the job address, what he is having built and where the lead came from — is the contact record, and everything anyone has written about him is in one note stream on the same screen. A rep who has never spoken to this customer opens one screen and knows the job.
The rep who owned this customer is on holiday, and the briefing is a five-minute phone call to him from the truck that leaves out the two things that matter.
The conversation and the facts are kept side by side rather than on separate tabs, because the question a rep actually has is never what did we say or what are they buying on its own — it is both at once, and a tab between them is where the handover breaks down.
- 1Click a customer and their whole history loads in one column.
- 2Every row is labelled by how it arrived — a call looks like a call, not a chat bubble.
- 3The thread keeps itself current while you read it. No refresh button.
- 4Photos open in place. Voicemails play in place. You never leave the record.
- 5Reply from the box underneath by text, email or call.
A builder does not think in channels. He thinks about the person who owes him a decision. Messages used to arrive down two different pipes and only one of them was being read. So a rep could text a customer, open that customer's record, and see "No messages yet" — then send the whole thing again. The customer got it twice and the rep looked disorganised. Now every text, email, call and voicemail for a person lands in one thread on their record, whichever pipe carried it.
- Message history scattered across a phone, an email client and a CRM
- No single record of what a customer was told and when
- Replies arriving on a channel nobody was watching
The same message never shows twice
When you send through a connected CRM, two copies get written — one by the CRM, one here. The copy kept here is deliberate: it is what keeps your history if you ever disconnect. You only ever see one of them. Send the same message twice on purpose and it still shows twice.
Messages from numbers you don't have saved
A message from an unknown number is still kept. Because it belongs to nobody yet, it would show up on nobody's record — so it goes to an Unassigned tab instead. You see the number, the message, any photo, and a search box to pick the person it belongs to.
Unread stays unread until you say so
You decide when a message is dealt with, not the act of looking at it. The unread badge survives opening the thread. It clears when you press Mark read at the top, and not before.
Threads open on the newest message
The thread starts at the bottom every time — on open, on refresh, and when you switch customers. Scroll up to read back through the history and it stops following you. A jump button returns you to the newest message.
Text, email or call from the same box
The reply box is pinned under the conversation. Text and Email are two buttons; Call is the third, and it rings that customer without leaving the screen. A greyed-out channel says which of two things is missing — your account is not set up for it, or this person has no number or address on file.
Saved messages, templates and your signature
Three things, one list. A saved message is reusable wording. A template is a saved message that carries its own subject line. A signature adds itself to the bottom. A starter set — quote follow-up, build update, payment reminder, estimate email, welcome email — arrives already written with your company name in it, and you can edit or delete any of them.
Talk instead of type
A microphone button beside the reply box. Talk and the words appear as you speak. Stop, type a correction, then talk again — the two mix freely. The listening happens on your own device, so no audio is sent anywhere and there is nothing per-minute to pay. On a browser that cannot do it, the button is not there at all.
Forward a customer's email to someone else
Every email in the thread has Reply and Forward. Forward shows you the original, a To box and a note box. What goes out is your note on top, the original underneath, marked as a forwarded message the way anyone would expect.
What happened to the email after you sent it
A small chip on each email you sent, showing the furthest it is known to have got. Open it and you get the honest version: hard facts (delivered, bounced, complained), a real signal (they clicked a link), and a soft one (opened). It also tells you when the customer's mail provider fetched the message on its own — because after that, a genuine open can no longer be seen.
Emails look the way the customer sees them
Emails are shown as the sender built them. A supplier quote or a formatted newsletter keeps its layout and reads in place, in the thread.
Photos customers text you, filed automatically
Photos that arrive by text are gathered into a Photos block on the contact, as well as showing in the thread where they landed. Open one and swipe through every photo that customer ever sent. A picture whose file has expired at the other end drops out rather than sitting there as a broken tile.
Voicemails and call recordings, filed on the customer
Audio on a customer's thread is sorted into two lists on their record. Voicemails sit at the very top and open by themselves, because a message someone left is a person waiting on a call back. Recordings sit underneath, folded away, because they stack up fast. Every clip shows whether anyone has listened to it, and you can star the one that matters.
Calls read as calls in the conversation
Every call lands in the customer's thread as its own kind of row. Answered incoming with how long it lasted. Missed, with the reason. Outbound, with what came of it. Voicemail, with a player on it. Green for incoming, red for missed, your brand colour for outgoing — plus an arrow showing the direction.
Customer replies actually reach you
The receiving half of a two-way conversation. The message is saved before anything else happens. Working out who sent it, telling the team, filing it on a record — all of that comes after, and none of it can throw the message away. A text from a number nobody recognises is still a text.
