Expert Conversation Interface — Design Proposal
Author: Design Review (Senior UI/UX) Date: 2026-05-03 Status: Draft — for founder review
0. Executive Summary
The current expert queue UI is functional but conflates too many distinct concerns into a single scrollable pane, creating cognitive load that will compound as the AI becomes more capable and tasks become more complex. This document proposes a redesigned interface built on three core principles:
- Separate what the client sees from what the expert thinks. The client conversation is a historical record and communication surface; the expert workspace is a decision-making environment. These are different jobs with different UX requirements.
- Make the AI a first-class participant, not a form field. The current "AI Suggestion" panel feels like a text box you might accept or discard. The redesign treats the AI as a briefing partner whose reasoning is visible and whose proactive insights are surfaced.
- Adapt to complexity, not to a one-size-fits-all. A 30-second approval of a draft reply and a 3-day agentic task reconciliation are fundamentally different tasks. The UI should make the simple case effortless and the complex case comprehensible.
1. Current State Analysis — What's Broken
1.1 The Single Pane Is Overloaded
TicketDetail.tsx stacks, top to bottom:
- Conversation thread (user + agent + expert messages, up to 340px)
- AI Suggestion panel (confidence + draft text + action buttons)
- Internal Notes (collapsible)
- Action bar (response textarea + 5–6 action buttons)
The expert must mentally separate four distinct concerns while scrolling through a single linear stack. There is no visual hierarchy that communicates what is client-facing vs. internal, what is AI-generated vs. expert-written, or what requires a decision vs. what is reference material.
1.2 Message Roles Are Visually Conflated
In CustomerThread, both role === "agent" and role === "expert" messages render with the same Amy avatar. The only distinction is a tiny (Expert) or (AI, 72%) sub-caption. An expert scanning the thread cannot quickly answer: "What has the client actually experienced? Has anything been sent yet? Was the last response AI or human?"
The thread also includes no indication of whether messages were sent, pending, or unsent drafts. There's no visual marker for escalation events (the moment the AI decided to stop and ask for help).
1.3 Two Competing Response Composers
The expert can compose a response in two places simultaneously:
- The AI Suggestion panel's edit textarea (
mode === "edit"inAISuggestionPanel) - The action bar's draft textarea at the bottom (
ActionBar.draft)
These both call the same endpoint (acceptSuggestion) but they are positioned at different points in the page, have different button labels, and operate independently. This creates confusion about which "compose" gesture commits the response.
1.4 The Escalation Context Is Buried
The most important piece of information for an expert — why did the AI decide it couldn't handle this? — is rendered as a single truncated line in the ticket header (item.reason || item.escalationReason || "Escalated ticket"). It has the same font size as the ticket ID. There is no confidence score, risk level narrative, or AI reasoning visible without digging into message metadata.
1.5 AI Reasoning Is Invisible
The agent service returns chain-of-thought reasoning that informs its confidence score, but no version of this reasoning is shown in the UI. The expert sees "confidence: 72%" with no explanation of what made the AI uncertain. This forces experts to re-derive the AI's logic from the raw conversation, duplicating cognitive work.
1.6 Agentic Tasks Are Disconnected
Multi-step agentic tasks live on a separate /workspace/tasks route. If a ticket arrives that triggered an agentic task, the expert must leave the queue view entirely to review and approve steps. There is no inline path from the conversation context to the task approval flow.
1.7 Internal Notes Are Hidden by Default
Internal notes start collapsed. Because they're collapsed, experts may not think to add them. Because they're rarely added, future experts picking up a deferred ticket have no context. The default should be visible (or at least a prominent "0 notes" indicator that invites addition).
1.8 No Path to AI-as-Peer
The current UI has one interaction mode: AI produces a draft → expert approves or replaces it. There is no surface for the expert to ask the AI a question, request more context, or see AI proactive insights beyond the initial draft. Any future where the AI becomes a bidirectional collaborator requires a dedicated conversational surface between AI and expert — which currently does not exist.
2. Message Taxonomy — Definitions and Display Rules
Before designing the layout, we must define each message type precisely. Confusion about message types is the root cause of most current UI problems.
2.1 Message Types
| Type | Definition | Visible To | Source |
|---|---|---|---|
| Client Inbound | A message sent by the client (user/team member) through any channel | Expert, Client | role: "user" |
| Client Outbound | A message that was actually delivered to the client — could be AI-approved or expert-written | Expert, Client | role: "agent" or role: "expert" with sent: true |
| AI Draft Response | The AI's proposed reply, not yet sent to the client | Expert only | role: "agent" with sent: false / suggestion panel |
| AI Escalation Note | Structured explanation of why the AI escalated: trigger, confidence, risk classification, specific concern | Expert only | item.reason, item.riskLevel, message.confidence |
| AI Reasoning | The AI's internal chain-of-thought that produced its confidence score and draft | Expert only (on demand) | message.metadata.reasoning (new field needed) |
| AI Proactive Insight | An unsolicited observation from the AI to the expert, mid-review ("I noticed…", "You may want to…") | Expert only | New message type (Phase 2) |
| Expert Message | A response composed by the expert and sent to the client | Expert, Client | role: "expert" with sent: true |
| Internal Note | Expert-only commentary on a ticket, never delivered to client | Expert only | is_internal: true |
| Agentic Step | A proposed or executed tool action as part of a multi-step plan | Expert, Client (simplified) | AgenticTask.steps[n] |
| Progress Update | A message sent to the client summarising task progress on a long-running request | Expert, Client | New message sub-type (Phase 2) |
2.2 Visual Treatment per Type
Client Inbound
- Right-aligned bubble, neutral background (
--bg-elevated) - Channel icon (email, WhatsApp, etc.) in top-right corner of first message in a sequence
- No avatar needed — the channel icon is sufficient identity
- Timestamp below bubble
Client Outbound (AI-approved)
- Left-aligned bubble, accent-tinted background (
--accent-subtle) - Amy avatar (the named specialist)
- Label: "via AI · [confidence]%" in muted caption
- Not visually distinguished from Expert Message on the client side — but experts can see the label
Client Outbound (Expert-written)
- Left-aligned bubble, same accent-tinted background
- Amy avatar (maintains persona)
- Label: "via Expert" in muted caption with expert initials indicator
- Subtle badge distinguishes it from AI-approved without breaking client experience
AI Draft Response
- Visually distinct from sent messages — dashed border, lighter background, AI brand color accent
- "DRAFT" pill badge — makes the "not sent" status impossible to miss
- Never appears in the Client View pane (see layout section)
AI Escalation Note
- Card-style component at the top of the Expert Workspace pane — not an inline message bubble
- Contains: escalation trigger summary, risk badge, confidence score, key concern
- Should be the first thing an expert reads when opening a ticket
AI Reasoning
- Collapsed by default under the AI Escalation Note
- "Show AI reasoning" expandable section
- Rendered as a monospace/prose block with subdued styling — it's reference material, not the primary read
- Shows chain of thought that explains the confidence score
Expert Message — same as Client Outbound (Expert-written) above
Internal Note
- Distinct visual language: yellow/amber accent border, notepad icon
- Author initials + name + timestamp
- Clearly labeled "Internal Note" — never ambiguous
- Permanently visible in the Expert Workspace pane (not collapsed)
Agentic Step
- Timeline card showing: step number, tool name, description, parameters summary, risk badge, status
- Color-coded by step status: pending (neutral), approved (green), executing (pulsing blue), complete (green check), failed (red)
- Approve/Reject buttons appear inline on pending steps — not on a separate page
Progress Update (Phase 2)
- Special message type in Client View — appears as an AI-generated progress summary to the client
- Expert can trigger or edit these
- Visually distinct from regular responses: clock icon, "Progress Update" label
3. Two-Pane Design Proposal
3.1 The Recommended Split
The two-pane split the founder proposed is correct. Here is the precise definition of each pane:
Pane A — Client View (left pane) "What does the client experience?"
This pane is a faithful representation of the conversation as the client sees it. It contains only:
- Client Inbound messages
- Client Outbound messages (AI-approved and Expert-written, labeled with provenance)
- Agentic task progress cards (simplified view — not the internal step details)
- Progress updates to the client
- The response composer (at the bottom)
What is explicitly NOT in this pane:
- AI drafts (not yet sent)
- AI reasoning or escalation notes
- Internal notes
- Confidence scores or risk labels
- Any information the client doesn't have access to
The expert can see exactly what the client sees, making it easy to answer "what does the client know right now?" and "what tone/context should my response assume?"
Pane B — Expert Workspace (right pane) "What do I need to decide?"
This pane is everything internal to the expert's decision-making process. It contains:
- AI Briefing Card (escalation note + confidence + risk + AI draft)
- AI reasoning (expandable under the briefing card)
- Agentic task step-by-step approval (when applicable)
- Internal notes (always visible, not collapsed)
- Expert-to-AI chat thread (Phase 2)
- Ticket management actions (Resolve, Defer, Reassign)
3.2 Full Layout Specification
┌──────────────────────────────────────────────────────────────────┐
│ QUEUE LIST (280px fixed) │ CLIENT VIEW │ EXPERT WORKSPACE │
│ │ (flex: 1.2) │ (flex: 1) │
│ [Org tabs] │ │ │
│ [Status tabs] │ Ticket │ ┌─ AI Briefing ─┐ │
│ [Risk/Sort filters] │ header: │ │ CRITICAL · 54%│ │
│ ───────────────── │ Customer │ │ Escalation: │ │
│ ● CRITICAL 2m │ name · ch │ │ Client asked │ │
│ Customer name │ badge │ │ for refund on │ │
│ "Can you refund my…" │ │ │ an order not │ │
│ ───────────────── │ ╭──────────╮ │ │ in our system │ │
│ ● HIGH 8m │ │ user msg │ │ │ │ │
│ Customer name │ ╰──────────╯ │ │ [Show AI │ │
│ "Where is my order?" │ │ │ reasoning ▸] │ │
│ ─── ────────────── │ ╭──────────╮ │ └───────────────┘ │
│ ▸ MEDIUM 1h │ │ Amy sent │ │ │
│ Customer name │ │ via AI │ │ ┌─ AI Draft ────┐ │
│ "I need help with…" │ ╰──────────╯ │ │ DRAFT ░░░░░ │ │
│ │ │ │ │ │
│ │ ╭──────────╮ │ │ "I understand │ │
│ │ │ user msg │ │ │ your concern │ │
│ │ │ (latest) │ │ │ about the │ │
│ │ ╰──────────╯ │ │ refund…" │ │
│ │ │ │ │ │
│ │ ─────────── │ │ [Accept & Send]│ │
│ │ ┌─────────┐ │ │ [Edit Draft] │ │
│ │ │ Compose │ │ │ [Write Own] │ │
│ │ │ response│ │ └───────────────┘ │
│ │ │ as Amy… │ │ │
│ │ └─────────┘ │ ─ Internal Notes ─ │
│ │ [Send] [↩] │ [+ Add note…] │
│ │ │ No notes yet. │
│ │ │ │
│ │ │ ─ Actions ─────────│
│ │ │ [Resolve] [Defer] │
│ │ │ [Reassign] [→Me] │
└──────────────────────────────────────────────────────────────────┘
3.3 Interaction Model
Opening a ticket:
- Expert clicks a ticket row in the Queue List
- Pane A (Client View) populates with the full conversation history, scrolled to the bottom (most recent)
- Pane B (Expert Workspace) shows the AI Briefing Card at top, followed by AI Draft, Internal Notes, Actions
- The AI Briefing Card is the natural first read — the expert's eyes land on it before anything else
The response flow — simple case (AI draft acceptable):
- Expert reads AI Briefing Card (escalation reason, confidence, risk)
- Expert skims the Client View to understand conversation context
- Expert reads the AI Draft in the Expert Workspace
- Expert clicks "Accept & Send" in the AI Draft section
- The draft appears in the Client View composer, pre-populated
- A brief "Sending as Amy…" confirmation, then the message appears in Client View as a sent message (labeled "via AI, 54%")
- The AI Draft section collapses/clears in the Expert Workspace
- Expert clicks "Resolve" — ticket leaves the queue
The response flow — expert wants to edit: 1–3. Same as above 4. Expert clicks "Edit Draft" → the draft text becomes editable in a textarea within the Expert Workspace 5. Expert makes edits → "Send Edited" button 6. Message appears in Client View as sent (labeled "via Expert (edited AI)") 7. A correction category prompt appears briefly: "Why did you edit?" — optional, but always present to encourage capture
The response flow — expert writes from scratch: 1–2. Same as above 3. Expert reads the AI Draft but discards it ("Write Own" button → draft panel collapses) 4. Expert's focus moves to the Client View response composer at the bottom 5. Expert types and sends — response appears in Client View as "via Expert"
Why the response composer is in the Client View pane: The composer belongs in the Client View because you are writing into the conversation. You should be looking at the conversation thread while typing your response — not scrolling a separate pane. The Expert Workspace handles AI interaction and ticket metadata; it should not also be the place where you compose the final message.
The "Accept & Send" button from the Expert Workspace does a one-click commit without requiring the composer. "Edit Draft" pre-populates the composer in Client View and focuses it.