Feature docs

Inbox

IN DEVELOPMENT

The conversation-led view of Contacts. One place to triage the thread list, read the full activity feed, reply across every channel, and see who you are talking to — without opening a second tab.

The Inbox exists to kill the context-switching between list, timeline and compose. It is the first real View; the others follow it. The feed inside it is the same feed as the customer profile, repackaged rather than forked, so a message looks and behaves identically wherever you read it.

Two failures it is deliberately built to prevent: missing an incoming message, and a human and DAISI replying to the same customer at the same time.

Rulings ledger

DateRuling
08-06Nothing is pre-selected when the Inbox opens — the detail side holds an empty select-a-customer state until a row is chosen, so the first thing a rep reads is their own triage decision, not an arbitrary thread.
08-06The unread badge counts incoming call, SMS and email only — logs and other non-incoming types never count, because the badge answers "who is waiting on me", not "what happened".
08-06The unread dot is visually distinct from the customer-status colors — two signals that mean different things must never be read as one.
08-06The row timestamp is the last call, text or email in either direction — not the last activity of any kind, so a system update never makes a cold thread look warm.
08-06The row shows a generalized actor — Customer, Dealer, DAISI or Automation rather than a proper name, because at list density the class of sender is what triages the row.
08-06The mobile row opens a quick view inside the Sales tab — only View Customer leaves for the full profile, keeping the triage loop intact on a phone.
08-06Customer Details opens by default on desktop when width allows, and is a closed drawer on mobile — context is free where there is room and on demand where there is not.
08-06Task creation is not in this composer — tasks live in the Agenda flow; the composer sends messages.
08-06Switching DAISI from Agent to Assistant or Off cancels the autoresponder and any active run — the anti-double-talk rule, and the reason the control exists at all.
08-06When an Assistant pause expires the autoresponder wakes again — a pause is a pause, not a silent mode change.
08-06Every outbound path respects the customer's opt-out flags — DAISI Agent mode does not bypass them.
08-06Vehicle of interest is the primary deal, defined as the most recently updated deal — one rule, so the panel and the row never disagree.

Anatomy map

Conversation rowThe list row — actor, snippet, status, unread semantics. Desktop tri-paneViews + list + activity with the composer, and Customer Details. Mobile screenList, quick view, drawer details, half-sheet views. Activity feedEvery message, call and record state the feed renders. Activity header stripName, deals line, and the async next-step directive. Customer DetailsSummary, team, communications, next action, vehicle. Composer + DAISIChannels, collapse, opt-out, the call lifecycle, DAISI modes.

The conversation list

What a row carries, and how an unread thread announces itself.

Inbox — conversation list
Tamika Jefferson2
Customer
Is the 2023 BMW 530i still available for a test drive this weekend?
37 sec ago
Robert Cook
Customer
Sounds good — I'll see you Saturday at 11. Thanks for holding it for me.
2:14 PM
Berald Jones1
Customer
Missed call — no voicemail left
Yesterday
Marcus Webb
Automation
Service reminder: your lease ends in 45 days. Let's talk about your options.
Mon
Priya Anand
Sales
Congrats again on the Defender! I've emailed your finance paperwork over.
Jun 12
R2 leading icon = last ACTIVITY/CHANNEL type (text=comment · call=phone · email=envelope), WHITE by default; a MISSED call is the only colored case (red phone-slash, e.g. Berald Jones). Actor word (Customer/Sales/Automation/DAISI) + direction arrow (incoming ↙ / outgoing ↗) follow. Independent axes: selected (row 2, gray-07 .is-selected) · unread (leading blue-01 dot + blue .sb-marker count) · fully-read. .sb-statusdd footer left (with caret) + time bottom-anchored right. Each row carries the customer name, the customer status pill, channel/actor-type iconography, a generalized actor — Customer, Dealer, DAISI or Automation, never a proper name — a snippet of the last relevant message, and a timestamp of the last call, text or email in either direction, anchored consistently in the row.
A blue dot marks an unread thread. The numeric badge counts unread incoming activities only — call, SMS and email — and excludes logs and every other non-incoming type. The unread dot is deliberately distinct from the customer-status color cues so the two are never confused.

The screens

The same feature at two densities. Desktop is a tri-pane — views, the conversation list, and the activity feed with the composer, plus Customer Details alongside when width allows. Mobile is progressive disclosure — the list first, then a quick view of the conversation, with details arriving as a drawer. Both are live, interactive screens; open them rather than reading a squashed copy here.

Desktop tri-paneViews + list + activity with the composer, and Customer Details. Mobile screenList, quick view, drawer details, half-sheet views.

The activity feed

The shared feed and the strip that sits above it.

1 · Message lifecycle — sent · received · collapsed↔expanded · scheduled · failed · canceled
Sent · outbound (pill right) — collapsed ("Show")
Karla Sellers@ 9:05 AM
Text SentSMSShow
Sent · same item — expanded ("Hide")
Karla Sellers@ 9:05 AM
Text SentSMSHide
Absolutely — I have Saturday at 11 open. Want me to hold it?
Received · inbound (pill left)
Lincoln Buyers@ 9:02 AM
Text ReceivedSMSHide
Is it still available for a test drive this weekend?
Scheduled · dashed + countdown chip ("Show")
Karla Sellers@ 9:00 AM
Email Scheduledon Jun 18 at 9:00 AM24h 20mShow
Failed · red dashed ("Show")
Karla Sellers@ 9:06 AM
Text FailedUndeliveredShow
Canceled · gray muted ("Show")
Karla Sellers@ 9:07 AM
Email CanceledScheduled send canceledShow
2 · Channels — color = channel (DAISI = actor, not a color)
Text · blue
Karla Sellers@ 9:05 AM
Text SentSMS
Want me to hold Saturday at 11 for a test drive?
Email · purple
Karla Sellers@ 9:10 AM
Email SentHide
Your financing options
Attached are three pre-qualified payment plans.
Note · orange — internal (no direction)
Karla Sellers@ 9:12 AM
Internal NoteHide
Cross-shopping the Bronco — pull a trade quote before Saturday.
Log · indigo — manual event
Karla Sellers@ 9:14 AM
Call Logged05:00 PM
Left voicemail about the new Land Cruiser allocation.
DAISI as actor · Text (blue) — actor = "DAISI Auto Responder"
DAISI Auto Responder@ 9:16 AM
Text SentAuto
Just confirming your appointment tomorrow at 4:00 PM — reply C to confirm.
DAISI as actor · Email (purple)
DAISI Auto Responder@ 9:18 AM
Email SentAuto
Following up on the Land Cruiser
Saw you were looking — happy to answer any questions.
3 · Calls — audio player (play · scrubber · time · View Transcript)
Call Made · green · outbound ↗
Karla Sellers@ 9:20 AM
Call Made2:14Hide
Call Received by Karla Sellers · green · inbound ↙ (answering dealer named)
Lincoln Buyers@ 9:22 AM
Call Received by Karla Sellers2:38Hide
Call Missed · red · inbound ↙ (voicemail player)
Lincoln Buyers@ 9:24 AM
Call MissedVoicemailHide
Call In Progress · green (.sb-bubble--live · header-only)
Karla Sellers@ 9:26 AM
Call In Progress01:24
Call Failed · red dashed (no connection)
Karla Sellers@ 9:28 AM
Call FailedNo answer
4 · Record rows — neutral .sb-ind (status = bare colored text · edit = .sb-diff)
Deal Created · Fresh (orange text)
Karla Sellers@ 9:00 AM
Deal CreatedDefender (#1234) Fresh
Deal Updated · collapsed ("Show") · status Finance (blue text)
Karla Sellers@ 9:20 AM
Deal UpdatedDefender (#1234) FinanceShow
Deal Updated · EXPANDED ("Hide") · GitHub-style field diff (.sb-diff)
Karla Sellers@ 9:20 AM
Deal UpdatedDefender (#1234) FinanceHide
Any Misc. Meta Data Can Go Here.
- Selling Price: $68,500
+ Selling Price: $66,900
- Status: Working
+ Status: Finance
Deal Moved · status (indigo text)
Karla Sellers@ 9:24 AM
Deal MovedDefender (#1234) Working
Deal Deleted · red text (delete/expire reserves red)
Karla Sellers@ 9:30 AM
Deal DeletedDefender (#1234) Deleted
Task Updated · Call (green text)
Karla Sellers@ 9:32 AM
Task UpdatedCall Jordan · Due Fri CallShow
Appointment · Scheduled (indigo text)
Karla Sellers@ 9:34 AM
Appointment SetSat Jun 21 · 11:00 AM Scheduled
Trade-in · added
Karla Sellers@ 9:36 AM
Trade-in Added2019 Ford Bronco (est. $24,500)
Customer · created (New, orange text)
Karla Sellers@ 8:58 AM
Customer CreatedLincoln Buyers New
Website Session · neutral bubble + step list (collapsed)
Jenifer Burton@ 07/20/2026 9:26 am
Website Session0:01:31Show
The Inbox feed and the customer-profile feed are the same feed and the same templates — repackaged, never forked. Channel color language: text blue · email purple · call green · failure red · neutral gray. Long rows expand with an explicit Show / Hide control, not a bare chevron. Incoming and outgoing keep their alignment, and the accent bar follows the channel or state. Pending and cancelled rows use the dashed treatment.
1 · Loaded — "Finalize appointment"
Lincoln Buyers
2022 Jeep Wrangler Rubicon+2
Finalize appointmentDetails
Name (t-title) + compact phone/kebab icon-buttons (.sb-msel) · deal summary (regular vehicle text + "+2", no icon) · divider · async AI action-summary (regular, orange-01 circle-exclamation + directive + blue Details). Header band gray-07; bottom hairline divides header from feed.
2 · Skeleton — next-step loading (async)
Lincoln Buyers
2022 Jeep Wrangler Rubicon+2
Details
The directive is AI-generated and loads after the conversation opens → the phrase is a .sb-skeleton shimmer line until ready. Details stays live.
3 · Variant — "Send pricing"
Tamika Jefferson
2023 BMW 530i+1
Send pricingDetails
Same strip, different async directive. Directive stays 2–3 words; the row truncates before crowding Details.
The strip carries the customer name plus the deals line, and a short next-step directive of two or three words (for example “Finalize appointment”). That directive loads asynchronously and shows a skeleton while it resolves.

The composer

How a reply gets written, and what happens when a channel is unavailable.

1 · Channels — six colors (full composer)
Text · blue (.sb-composer--text)
Agent
Compose a message or use a Template
Email · purple (.sb-composer--email) — subject row
Note · orange (.sb-composer--note) — internal
Agent
Leave an Internal Note….
Log · indigo (.sb-composer--log) — event row
Agent
04/22/2026
Describe the event…
DAISI · yellow (.sb-composer--daisi)
Assist5m 36s
Tell DAISI to do something for this customer…
2 · Mobile collapse — Insert toolbar hidden until focus
collapsed — tabs + mode pill + field + send (no Insert row)
Agent
Compose a message or use a Template
focus field
focused — Insert toolbar revealed (:focus-within)
Agent
Saturday at 11 works great — see you then.
On mobile the Insert toolbar is hidden until the compose field is focused (:focus-within).
opt-out — Call tab disabled (.cp-tab--call.is-disabled), calls off for this customer
Agent
Compose a message or use a Template

Calls

The call lifecycle, from the idle channel to the log that closes it out.

idle (ruling 61) — one labeled green call button; no fields, no send
Agent
live (.is-live) — text-free: the full-width waveform IS the body · running timer · mute + speaker tools, red End only. The second tool is idiom-conditional: mobile shows the speaker toggle, desktop replaces it with the audio-device picker (comp-phone-call-states.html). Navigate away mid-call and the live body detaches into the floating Call Pill, docking back into the composer on return — the full pill contract (states, mobile, audio devices, busy) is specced on comp-phone-call-states.html.
Agent
Shane Dusang 02:41
LOG — the manual backup (type=Call)
Agent
04/22/2026 05:03 PM
Confirmed the 36/10k terms — sending the quote after we hang up. Call 2m 41s.

DAISI

The mode control that keeps a human and the AI from talking over each other.

3 · DAISI mode — pill lifecycle (.sb-daisi-pill)
Off (gray)
Off
enable assist
Assist (orange) · countdown
Assist5m 36s
switch to agent
Agent (green) · idle
Agent
run starts
Agent · red run-dot (click to cancel)
Agent
Three modes — Agent, Assistant and Off — mapping to the backend values full, internal and disabled. Assistant can be paused for a set duration and the badge shows a live countdown. An in-progress run shows an indicator whose tooltip explains DAISI is working in the background; clicking it cancels the run. Switching from Agent to Assistant or Off cancels the autoresponder and any active agent run — the anti-double-talk rule, and the reason this control exists. When an Assistant pause expires the autoresponder wakes again. The whole surface respects the DAISI and background-agent feature flags.

Customer Details

The context panel beside the conversation.

Summary
Location Traffic Source Lead Source

Here is a summary of the customer that is roughly 2 to 3 sentences. It explains the status of the customer, what is needed, blockers and what the next move is for them.

Hot
Suggested Next ActionText

Send the customer a text message with three vehicle suggestions based on their budget constraints and preferences.

Recent Communications
Lincoln BuyersText
Hey, I got your message.. thanks for the link...
Karla SellersCall
Summary: Carla reached out and offered Lincoln several buying options and talked about financing.
DAISI AgentEmail
Great to hear. By the way did you see we did a price drop on this x5?
View the 2023 BMW X5
Automations
None

Engineering scope

What the Inbox needs from the backend, and what it already has.

Open questions. What is the exact Inbox inclusion predicate? Do the other Views ship disabled, or wired with real counts? Is the next-step directive AI-generated or rules-derived? Does an Assistant pause persist per user and device, or on the customer record? Are scheduled sends deprecated, hidden, or folded into a send-later flow? And at what breakpoint does the composer collapse?

Composed under the Atomic documentation LAW — narrative + rulings ledger + anatomy map + @dsEmbed transclusions (the build inlines them with provenance links) + eng scope notes. Every embedded fact is owned by the spec page it comes from.