The panel next to the thread. Phone, email, job address, building type, source, start and due dates. The answers they gave when they first enquired. Their voicemails, recordings and photos. And chips that jump to their pipeline card and their estimate. Sections fold independently and you can drag the panel wider. And its contact history: every call — answered or not, and for how long — every text and email, and who on your team made each one. We don't build software for plumbers or remodelers — only for post-frame and barndominium builders — so the record carries the building they're buying, not a generic deal.
Also called: customer details · client file · contact card · customer record · contact history · call log
The facts about the customer sit next to the conversation
Phone, email, job address, building type, source, what the deal is worth and where it stands — all on one rail beside the thread. Where a 3D design exists, the record carries a summary of the actual building, not a button that says open the estimate. Three screens to see one customer is three screens a rep will not open while somebody is on the phone. This rail sits beside the messages; the messages themselves, and the box you answer them from, are the one conversation.
He is on the phone to a man he quoted in June, clicking through the pipeline board to remember whether it was the 40×64 or the 30×40, while the man listens to him click.
It is a column beside the thread rather than a tab behind it, because a tab is a decision and a man on a call will not spend one. The cost is width — the rail takes three hundred pixels off the conversation — so it folds shut from its own header and drags wider by the handle, and it opens the same way every time rather than remembering a width somebody set once by accident.
Who reached them, which way, and how it went
Under the Timeline sits Contact history: every call with whether it was answered and for how long, every text and every email, newest first — and who on your team made each one, or whose line they rang. The line on top sums it up: 3 calls (1 answered, 4:12) · 2 texts · 1 email, and the last touch. The same history opens from the pipeline card and from Contacts, because it is one record.
A customer says nobody called him back. Your rep says he called twice. Neither of you can prove it.
Proof of effort ends the did anyone call him argument in one glance — and reps like being seen doing the work. The quiet rep who makes fourteen calls a day finally gets credit for it, and the owner can coach on facts instead of hunches.
Every list says who has already tried
Each Contacts row — and each sales card — carries a short strip: the calls and how many were answered, with the talk time, the texts, the emails, and the last touch with who made it (called · no answer · Dale · 2d ago). A row with no strip is a person nobody has reached out to yet, and on a long list that stands out on its own.
A list of names says nothing about which of them anybody has actually got through to.
The eye goes straight to the empty rows, so the person nobody has called gets called — without a report, a meeting, or anyone feeling singled out. For the business that is fewer leads that die of silence.
The job address is kept as street, city, state and zip
One line of free text has to be guessed back apart, and a guess here quietly puts a building in the wrong jurisdiction — which shows up as a failed inspection, not a typo. Four separate boxes mean the permit lookup, the crew's drive and the delivery all read something clean. Anyone can add or fix it in seconds instead of waiting for a lead form to have collected it.
"1840 Weavertown Rd Gap PA" gets read as the wrong county, the permit is filed there, and the crew finds out the morning of the pour.
The four parts are stored apart because everything downstream reads them apart — the permit check matches city and state against a jurisdiction table. Parsing one typed line back into four would be guessing on the customer's behalf. It costs four taps instead of one, and buys a lookup that never has to interpret anything.
What they said they wanted, on the screen where you ring them back
The questions and answers from the form that made them a lead sit on the contact, with the ad and the campaign beside them. Ringing a lead back without knowing what they asked about wastes the first thirty seconds of the only conversation you are going to get. The answers come off the branded form on your own site, a Facebook lead ad, or an import — and they read the same either way.
He rings back and opens with "so, what were you after?" — the man already typed it, three weeks ago, into the form that cost forty dollars to get him to fill in.
The answers are written onto the contact at intake rather than fetched from the form provider when somebody opens the record. That costs a copy of the data, and buys answers that are still there in March after the ad is switched off and the form has been rewritten twice.
What the man is buying, without opening the estimate
Where a 3D design exists, the record carries a card: 40′ × 64′, 14′ eave, 2,560 sq ft, two overhead doors, four windows, a 4″ slab — and the price. The total comes from the same function the pipeline card and the estimate list read, so the three cannot disagree. Where there is no design yet, the card is replaced by a button that starts one in the 3D builder.
He opens the Estimates tab to remember whether the man had two overhead doors or three, and by the time he is back the customer has asked something else and he is on the back foot.
Every fact on the card is read off the design spec rather than typed onto the contact, so it can never describe a building the estimate is not actually pricing. The trade-off is that a contact with no design gets no card at all — an empty card, or one filled in by hand, is worse than a button.
Two clicks from a text message to that customer's estimate
Chips on the record move you between the contact, their pipeline card and their estimate. One person, three views, all reading off the same record so they cannot disagree. Where there is no pipeline card yet, the chip turns into Send to Pipeline and makes the link right there — in the place you noticed it was missing. What that card does once you land on it — the stage it sits in, the checklist riding with it, the money it adds to the column — is on the sales pipeline board.
Three surfaces hold the same customer and nobody can say which is right, so the quote says $74,300, the card says $68,000, and he has been told both.
The Estimate chip only appears when an estimate actually exists. It used to appear whenever we knew the person, on the theory that landing on a list beat a missing button — in practice it promised something that was not there. A chip means "this exists, go to it", and a chip pointing at a view the man's role cannot open is not drawn at all.
A phone or an email you can add while the customer is still on the line
Both rows are always there and always editable, even when empty. Click, type, Enter. They used to disappear when blank — so a contact with no number had no Phone row and no way to add one. You found out when the text confirming tomorrow's site visit failed to send. The number saves where you type it, and the phone can dial it a second later.
The number goes on a sticky note because there was nowhere on the screen to put it, and the confirmation for tomorrow's site visit never sends.
Filtering blank rows out is tidy and wrong: the contact who most needs a number is the one who has none. Rendering the row empty makes the gap an invitation instead of an absence — blur or Enter commits, Escape abandons, and there is no Save button to forget on the way out of the call.
Line up tomorrow's calls without leaving the record
A contact with a number carries Add to call queue on the record itself. Working down a list deciding who to ring tomorrow is a real pass through this screen, and it used to have no way of doing it — the queue could only be filled from the phone dock. The call button opens the phone, and dialling, mute and hang up are all covered over there.
Six people to ring back, remembered in whatever order he happened to scroll past them, and the one who left a voicemail on Friday is still waiting on Wednesday.
The affordance is put where the decision is made, not where the dialling happens. A queue you can only fill from the dialler asks the man to hold four names in his head while he walks to another screen, and he will hold two.
You find out they opened it without leaving the record
Try itEvery estimate sent to this person is listed on the record with what it did — Sent, Opened, Approved — grouped by project with a version number where there is more than one. How long they spent on it, and how many times they came back, is on the estimate itself.
He rings to chase a quote the man approved on Sunday night, and the call opens with an apology instead of a start date.
The status is fetched when the record is opened rather than stored on the contact, so an approval that happened on the customer's phone at nine at night is not still reading Sent at nine the next morning. It costs a request every time the panel loads; it buys a status nobody has to distrust.
Two records for one man, found by number, not by name
The same email or the same phone in the same bucket is grouped as a duplicate, with the count sitting on the toolbar where you add contacts. Merging keeps the fuller record: non-empty fields win, blank ones fill from the other, the notes, tasks and estimates that hung off the other copy are re-pointed at the survivor, and the further-along of the two stages is the one that is kept.
Two Marlin Zooks — one holds the quote, one holds the texts — and the reply goes into the thread he never sees.
Numbers are normalised with the country code in mind, so a ten-digit and an eleven-digit copy of the same line group together — the old last-seven-digits match missed those and falsely joined two different people in different area codes. Matching is scoped per bucket on purpose: the same man as a team member and as a supplier is deliberate, not a mistake to merge.
A supplier's record does not look like a customer's
One screen holds Contacts, Team, Leaders, Members, Suppliers, Contractors and Tasks, each with its own count — and the panel changes with the bucket. A supplier opens on their purchase orders where a customer opens on their build. A man can sit in two buckets at once: Also a supplier on the record's menu puts him in both without making a second copy of him.
The lumber yard lives in a spreadsheet, the framing sub lives in somebody's phone, and the only place all three ever meet is the invoice at the end.
One list rather than four address books, because the yard selling you posts is the same shape of record as the man buying the building — a name, a number, a history. The bucket only decides which panel opens beside the name, which is why the same person can be in two of them without the duplicate finder treating it as a mistake.
'fb ad' and 'Facebook lead' stop looking like two different sources
Where a lead came from arrives in a dozen spellings from forms, imports and typing. Each one is matched to a single brand mark, so you can scan a list of leads and see where the work is coming from. A source nobody recognises keeps its own words beside a plain grey dot — it is never hidden from you.
The month-end count says Facebook brought nine leads. It brought twenty-two — the other thirteen were spelled differently.
The logo comes from the brand, the words come from the data. Matching is fuzzy on keywords so "fb ad", "Facebook lead" and "Facebook ads" all resolve to one mark — but the label stays the original text, because collapsing "Facebook ads" to "Facebook" would quietly turn a paid lead into an organic one on the screen.
How long this person has been waiting, in hours
A Timeline shelf on the record carries every stage move and every step inside it, with who and when — time in the platform, time in the current stage, and hours from created to first contact. Notes, tasks, documents, payments and the calendar sit on the same rail, and every note about the person, whoever wrote it and wherever they wrote it, is one stream. The voicemails, the recordings and the photos that collect against a person play in the one conversation rather than on this rail.
"When did we last speak to him?" gets answered from memory, and the honest answer is nineteen days.
It is the same audit history the pipeline card shows, read out of the same log rather than recomputed here. Two surfaces telling different stories about how long a lead has been sitting is how a rep learns to trust neither, so there is only ever one story and this is a second window onto it.
What this person has personally signed, on this person
Contracts this contact signed themselves are listed on the record and open the same document everywhere else opens — a crew leader's acceptance of a job, a sub's agreement, the project agreement. The section is drawn even when it is empty, so "no signed contracts" is a stated fact rather than a missing heading.
Nobody can find the acceptance the crew leader signed in April, so the job runs on everyone's memory of what he agreed the day rate was.
Empty sections are hidden almost everywhere else on this rail — a contact with no voicemails should not carry a Voicemails header. Contracts is the deliberate exception, because the absence of a signature is itself the answer somebody came to this screen to get, and a hidden section reads as a missing feature rather than a missing signature.
- 1Open a customer and the facts sit beside the conversation.
- 2Click any field to fix it — phone, email, address — and it saves where you type.
- 3Where a 3D design exists, the record shows what they are actually buying, not a button.
- 4Fold the sections you don't use and drag the panel to the width you like.
- 5Contact history sits under the Timeline: calls with whether they were answered and the talk time, texts, emails, newest first, and who made each one
- 6Every Contacts row and sales card carries the same short strip — how many calls and how many answered, texts, emails, and the last touch
The contact details said nothing about the build itself — just a link to open the estimate. So a rep on the phone with a homeowner had to leave the conversation to remember what the man was buying. By the time he got back, the customer had asked something else and the rep was on the back foot. Now one panel holds the lot, sitting beside the messages instead of behind a tab.
- Customer facts split across CRM, estimate and pipeline
- Needing to open the estimate just to remember what the building is
- No record of who reached a customer, which way, or whether they got through
Phone and email you can add or fix on the spot
The two rows that matter for reaching someone are permanent. They do not vanish when they are empty; an empty one reads Add phone. Click the value and it turns into a box. Enter saves. Escape throws it away.
The job address, kept in parts
The address sits with phone and email as something anyone can fix in seconds, edited the same way. It is stored as four separate boxes, not one line of free text.
What they answered when they became a lead
Everything they typed when they enquired — the size they wanted, the timeline, the budget — reads as question-and-answer rows on the record. Beside it, small chips for where it came from: the source, the campaign, the form, the page.
Where the lead came from, shown as the real logo
Where a lead came from arrives in a dozen spellings from forms, imports and typing. Each one is matched to one proper mark — Facebook, Instagram, Google, LinkedIn, TikTok, YouTube, Angi, Zillow, website, referral, typed in by hand, imported. Anything unrecognised keeps its own wording beside a plain grey dot.
Jump between the contact, the card and the estimate
A small row of chips that moves you between the contact, the pipeline card and the estimate, leaving out whichever one you are already looking at. Where there is no pipeline card yet, the chip becomes Send to Pipeline and makes it right there. The same chips sit inside the phone dock, so a call leads straight into the job.
The same history on the contact and the card
The Activity panel on the contact shows the same history the pipeline card shows. Stage moves, system events and audit notes — kept out of the chat thread on purpose and shown here instead, so the conversation stays a conversation.
One phone number, however it was typed
One rule, used everywhere a number matters: matching an inbound text to a customer, routing a call, spotting duplicates, logging a callback. Punctuation and a leading country code come off. Under seven digits and it will not claim a match — better no match than the wrong person.

