Engati logo
Case Study · EngatiConversational AI · Agent workflow

Finding the Signal in the Inbox

Redesigning how support agents prioritize conversations on a conversational AI platform.

Role
UI/UX Designer
Company
Engati low-code chatbot & conversational AI platform
Tools
Figma, design system
Status
Shipped
Overview

The busiest room in the house

Engati is a low-code platform that lets businesses build and run chatbots across channels but every automated conversation that a bot couldn't resolve eventually landed in the same place: a human agent's inbox. That inbox was the busiest room in the house, and it hadn't been designed to handle its own traffic.

I worked on Engati's design team, where one of my core areas of ownership was the agent-facing inbox: the screen where support agents spent most of their day triaging live chats, escalations, and unanswered bot conversations. Alongside releases where I supported broader UI consistency, this was the project where I went deepest: from diagnosing the actual problem in the data, through a full interface rework, to a component system that made the fix scalable across the product.

Status system

NewActiveUnassignedPost

A busy inbox isn't a design problem until you can't tell which message actually needs you right now. Then it's the only problem that matters.

That distinction between an inbox that's full and an inbox that's usable is what shaped every decision on this project.

The Challenge

“In order” was the problem

On paper, the inbox did its job: every conversation a bot escalated showed up, in order, for an agent to handle. In practice, "in order" was the problem. Conversations were listed chronologically, with no visual distinction between a brand-new lead, a conversation an agent was mid-way through, and one that had been sitting unassigned for hours. An agent opening their queue couldn't tell, at a glance, what was urgent and what could wait.

I didn't take that as a given. Before touching any screens, I went back to support ticket and usage data to find out where agents were actually losing time and where conversations were falling through the cracks. The pattern was consistent: agents were spending their first few minutes on every shift scanning and re-scanning the same undifferentiated list, opening conversations just to figure out whether they needed action, and unassigned or high-priority chats were sitting untouched simply because nothing on screen told an agent to look there first.

The brief I gave myself was narrower than "redesign the inbox." It was: make the state of every conversation legible before an agent opens it.

The agent

Which of these 540 conversations actually needs me right now?

The team lead

Are unassigned or negative-sentiment chats getting missed?

The new hire

How do I even read this queue without asking someone?

Research & Discovery

A triage problem first, a visual one second

A

Track A Ticket and usage analysis

I pulled support tickets and usage patterns to see where agents were actually getting stuck: which conversation types took longest to get a first response, and which parts of the queue agents overlooked entirely.

B

Track B Workflow walkthroughs

I traced every state a conversation could be in new, active, unassigned, resolved and mapped where the interface gave agents no visual cue to tell those states apart.

Two findings shaped everything that followed.

  1. Finding 01

    Status needs to be visible before content

    Agents didn't need to read a conversation to know what to do with it they needed the interface to tell them its state before they clicked in. A conversation that's unassigned, one that's brand new, and one an agent is already mid-conversation on all require completely different actions, and none of that was visible in a flat, chronological list.

  2. Finding 02

    Not all "active" conversations are equal

    Sentiment mattered as much as status. A negative-sentiment conversation sitting in the queue was fundamentally more urgent than a neutral one, but the old inbox had no way to surface that it was information agents only discovered after opening a chat, which was already too late to prioritize correctly.

Designing for Prioritization

Turning the queue into a triage tool

Turning the queue into a triage tool, not a list

I restructured the inbox around explicit, color-coded status tags New, Active, Unassigned, Post so an agent could scan the queue and understand the state of every conversation without opening a single one. I paired this with dedicated filter tabs (New, Active, Unassigned, All) so agents could work a specific slice of the queue instead of scrolling past conversations that didn't need them yet. The goal was to move the cognitive work of triage out of the agent's head and onto the screen.

Surfacing sentiment where decisions actually happen

I brought sentiment previously buried inside individual conversations up into the agent's working view, flagging negative-sentiment chats directly. Combined with the status tags, this meant an agent glancing at their queue could immediately spot the conversation that was both unassigned and negative: the exact combination most likely to turn into an escalation if left too long.

Giving agents context without a second click

On opening a conversation, I designed a persistent right-hand panel with user details, intent, tags, and recent conversation history all visible alongside the chat itself. Agents no longer had to leave the conversation or dig through separate screens to understand who they were talking to and why the context traveled with the conversation instead of being one more thing to go find.

Engati agent inbox screen

Building it to scale, not just to ship

Because this redesign touched status indicators, tags, and panel components that would need to reappear consistently across other parts of the product, I extended Engati's design system alongside the workflow itself formalizing the color palette, type scale, and component patterns used for status states so future releases could reuse the same visual language instead of reinventing it. This was deliberate: a triage system only works if its visual cues stay consistent everywhere an agent encounters them.

Status system
NewActiveUnassignedPost
Broadcasts

Extending the same thinking to broadcasts

The inbox wasn't the only place where agents were flying blind until it was too late. Sending a broadcast message meant uploading a contact list often an Excel or Word file with hundreds or thousands of rows and hoping it went through cleanly. If a phone number was malformed or a country field was blank, agents often didn't find out until the send had already failed or partially failed, well after the moment they could easily fix it.

I applied the same principle from the inbox redesign here: surface the state of the data before the action, not after. I designed an inline editor inside the "Import Contact List" flow that validated every row on upload and returned a per-row verdict directly in the table Success in green, Error in orange with a specific reason like "Number not valid" or "Country column is empty," and a distinct flag for rows that would be held back due to batch limits, so agents could see exactly which contacts wouldn't go out in this send and why. A running error count sat above the action buttons, so an agent never had to scroll the full list to know whether the file was clean.

The harder problem was what to do with a file that was almost right. Instead of forcing an all-or-nothing choice, I let agents validate, review flagged rows inline, fix what could be fixed, and send only the batch that had actually passed. Large lists were broken into processable batches rather than one monolithic send, so a handful of bad rows in a 12,000-contact file no longer blocked the other 11,995 from going out.

Reusing the same status colors and tag language from the inbox redesign was deliberate. An agent who'd learned that orange meant "needs attention" in their conversation queue didn't have to relearn that logic here the design system did the work of making a completely different workflow feel like part of the same product.

Design system

The foundations everything was built on

Before the inbox could be redesigned, the platform needed one shared vocabulary. These are the library plates: colour, type, grid, controls and the builder specific components that every screen in this case study is assembled from.

Colour
Engati design system: Colour
Primary and secondary palettes with a 60/20/10/10 theme split.
Type
Engati design system: Type
Hind across page headers, nav, entry fields and right panel.
Buttons
Engati design system: Buttons
Primary, secondary and tertiary across three sizes with full state coverage.
Icons, actions & search
Engati design system: Icons, actions & search
Action bars, tooltips, checks, radios and the navigation search stack.
Navigation & brand
Engati design system: Navigation & brand
Rail icons in default, selected and hover, plus lockups and account menu.
Grid
Engati design system: Grid
12 column stretch grid, 16px gutter, zero margin.
Form fields
Engati design system: Form fields
Inputs, selects, help text and error states in one specimen sheet.
Node configuration
Engati design system: Node configuration
Builder side panel elements: config blocks, tabs, dialogs and node pickers.
Shipped screens

The work, screen by screen

Scroll horizontally through the delivered interfaces from the triage inbox to the broadcast and analytics surfaces built on the same design system.

Agent inbox
Engati Agent inbox screen
Status tags, sentiment marker and filter tabs make the state of every conversation scannable without opening it.
Contact import inline validation
Engati Contact import   inline validation screen
Row-level Success/Error states with plain-language comments, so bad rows are fixed before the send, not after.
Broadcast history
Engati Broadcast history screen
Delivery overview and per-broadcast status reuse the same colour language as the inbox.
Scheduled broadcasts
Engati Scheduled broadcasts screen
In-flight sends stay visible and stoppable from the same table.
Create new broadcast
Engati Create new broadcast screen
A single-column form with contextual integration resources kept alongside it.
Bot responses analytics
Engati Bot responses analytics screen
Answered vs unanswered volume framed against live chat load.
Agent performance
Engati Agent performance screen
Quality, productivity and performance views over the same agent table.
Outcome & Reflection

Evidence, not instinct

The redesigned inbox, and the broadcast import flow that followed it, shipped as part of a broader platform release. The clearest signal that it worked wasn't a dashboard metric it was the drop-off in the kind of confusion and complaints that used to reach the support and product teams directly. Agents stopped asking which conversations needed attention, and stopped discovering broken contact lists only after hitting send, because the interface was finally answering those questions before they had to ask.

What I'm most proud of isn't the tag system or the panel layout individually it's that the redesign came from evidence, not instinct. The instinct on a busy inbox is to add more filters and hope agents find their way. The actual fix was almost the opposite: reduce what agents had to figure out for themselves, and let the interface state the obvious thing out loud.

The best triage interface isn't the one with the most options it's the one where the right conversation is already at the top before you've had to think about it.

That principle make the state of the work visible before someone has to go looking for it is one I've carried into every workflow-heavy screen I've designed since.