Introduction
A support agent should not ask the same customer to explain the same problem twice.
When I started designing this customer support interface, I focused on one question: how can previous customer interactions become useful during the next conversation?
I designed the frontend around this problem, with the goal of making customer history, relevant memories, support tickets, and agent evaluation visible inside the support workflow.
The Problem
Customer support becomes repetitive when previous interactions are not easy to access during a new conversation.
A customer may have already reported a payment issue, tried a solution, and contacted support again with the same problem. Without useful history, the agent may need to ask the customer to explain the issue again.
I wanted the interface to give the support agent more context than the current message alone. The design needed to bring together the current issue, customer information, previous tickets, relevant memory, and successful past solutions.
This became the main idea behind the support interface: make customer history visible and useful during the current support interaction.
Designing the Customer Support Workspace
I started with the customer support dashboard because it is the main place where the agent sees the current support situation.
I designed the dashboard, which I called the AI Support Command Center, to show the current customer issue together with customer information, frustration level, related memory, and a suggested previous solution.
In the screenshot below, the current issue is "Payment failed again" for Rahul Kumar, a Premium customer with a High frustration level. A status card shows the AI agent investigating previous interactions. Two panels sit side by side: Memory Match ("Related History Found", 92% relevance, 3 matches) and AI Recommendation ("Use another payment method"), with a "Use Previous Solution" button.
The goal was to avoid making the agent switch between different screens just to understand the customer's context. The dashboard brings the important information into one support workspace.
The interface also includes quick actions in the sidebar for opening the customer chat, viewing support tickets, checking customer memory, and evaluating the agent.
I captured screenshots of the main interface screens during development to show how the customer support workflow is organized. These include the dashboard, chat, tickets, memory view, and the evaluation dashboard.

The AI Support Command Center: the current issue, customer details, memory match and suggested resolution in one view.
Building the Customer Chat
The customer chat is where the support interaction happens. I designed it to keep the conversation simple while leaving room for customer context and memory to become part of the support flow.
The interface allows the customer message to be added to the conversation and displays the conversation as a sequence of messages. Customer messages and AI Agent messages are visually separated, so it is easy to follow who said what.
The example conversation shows the idea clearly. The customer says their payment failed again, and the AI agent responds that it remembers a similar payment issue and will check what worked last time. That response is the kind of behavior the whole interface is built to support.
For the first version of the frontend, I focused on getting the interaction and layout right before connecting the interface to the real backend responses. This helped me test the user experience without depending on the backend during every UI change.

The Customer Chat screen: customer and AI agent messages appear as a simple sequence, with a message box at the bottom.
Handling Customer Messages
For the chat interaction, I used React state to keep track of the current message and the conversation history.
const sendMessage = () => {
if (message.trim() === "") return;
setMessages([
...messages,
{
sender: "customer",
text: message,
},
]);
setMessage("");
};
Managing Support Tickets
The ticket screen is designed to help the support agent find and manage customer issues without leaving the support workflow.
I added ticket search and status filtering so tickets can be located quickly. Each ticket also shows the customer, issue, priority, status, and related memory information. For example, ticket T001 (Payment Failure, High Priority) includes a "Memory Match Found" block with the previous solution: use another payment method.
I also added actions for the main ticket states. An open ticket can be resolved, a resolved ticket can be reopened, and an in-progress ticket can be escalated.
The interface also includes a New Ticket flow for creating a new support request.
Updating Ticket Status
I used React state to make ticket actions interactive. For example, changing a ticket from one status to another updates the ticket list without reloading the page.
const updateTicketStatus = (ticketId, newStatus) => {
setTickets((currentTickets) =>
currentTickets.map((ticket) =>
ticket.id === ticketId
? { ...ticket, status: newStatus }
: ticket
)
);
};

The Support Workspace: search, status filter, and ticket cards that carry their own memory match.
Making Customer Memory Visible
Customer memory became an important part of the interface because previous support interactions can provide useful context for the current issue.
I designed a separate memory view to make that history easier to understand. At the top it shows three counters: 24 memories stored, 3 relevant matches and 2 successful solutions. Below that, a Memory Timeline lists recent interactions: the current payment issue on Sep 28, a similar payment issue on Sep 20 that was resolved with an alternative payment method, and a login issue on Sep 12 that was resolved with a password reset.
The memory timeline helps the agent see what happened in previous interactions instead of treating every new conversation as a completely new case.
Two more panels sit below the timeline. What the Agent Learned summarizes patterns, such as the customer preferring quick solutions and payment issues occurring multiple times. Relevant Memory links the current payment failure to the previous solution with a 92% match.
Hindsight is central to this design because its memory capabilities provide the foundation for retaining and recalling information from previous interactions. My frontend work focuses on making that memory visible and useful inside the support experience.
Showing Relevant Memory
I represented the relationship between a current issue and previous customer history directly in the interface.
<div className="solution-highlight">
💡 Previous solution: Use another payment method.
</div>

The Customer Memory view: stored memories, relevant matches, successful solutions and a timeline of earlier issues.
What Changed When Memory Became Useful
The difference becomes clearer when comparing a support interaction without useful memory to one that can use previous customer history.
Before memory is available, a customer reporting a repeated payment problem may need to explain the issue and previous attempts again.
With relevant memory available, the agent can see that a similar payment issue occurred before and that a previous solution was successful. This gives the current interaction more context and helps the agent avoid starting from zero.
This is the experience I wanted the interface to support: previous customer interactions should not remain as passive history. They should provide useful context for the next support interaction.
Evaluating the Agent
I also wanted the interface to make the agent's behavior measurable. For this, I created an evaluation screen that brings the main evaluation signals into one place.
The evaluation view shows an overall score of 86 along with Memory Recall (92%), Response Quality (88%), Resolution Efficiency (81%) and Customer Context (90%). Each area has a short explanation of how the agent performed and a progress bar.
I also added a View Details interaction so individual evaluation areas can be inspected more closely. An evaluation history section provides a simple way to review previous evaluation results, such as the Payment Support Session (86/100) and the Account Access Session (82/100).
This makes evaluation part of the support workflow rather than treating it as something completely separate from the agent experience.
Running an Evaluation
I added a simple evaluation action to the interface using React state. The button shows an evaluation state and then returns to the normal state after the evaluation run.
onClick={() => {
setEvaluationRunning(true);
setTimeout(() => {
setEvaluationRunning(false);
}, 1500);
}}

The Agent Evaluation screen: overall score, individual evaluation areas with View Details, and evaluation history.
What I Learned
Building the frontend taught me that a customer support agent is not only about displaying a chat interface. The surrounding context is equally important.
I learned that customer history needs to be visible at the right moment. A memory system is more useful when the agent can understand why a previous interaction is relevant to the current issue.
I also learned the importance of separating the current conversation from supporting information such as tickets, customer memory, and evaluation results. Keeping these areas connected but easy to navigate made the support workflow easier to understand.
Another lesson was to build the interface before depending completely on backend responses. Using initial frontend data allowed me to test the user experience and interactions while the backend integration was still being developed.
Finally, I learned that memory should be treated as part of the support workflow rather than as a separate technical feature.
Limitations and Next Steps
The current frontend focuses on the user experience and the structure of the customer support workflow. During development, some parts of the system were still being connected to the backend.
The current interface therefore uses frontend data to demonstrate the main screens and interactions. The next step is to connect these screens to the backend APIs and replace the initial data with real customer, ticket, memory, and evaluation responses.
Another important next step is completing the Hindsight integration so that customer memories can be stored, recalled, and used during future support interactions.
For the Hindsight memory layer, I referred to the Hindsight GitHub repository and its documentation.
I also used the Vectorize guide to agent memory to understand how persistent memory can support agent interactions.
This will allow the interface to demonstrate the complete flow from a customer interaction to memory retention, memory recall, and improved support responses.
Conclusion
Designing this customer support interface changed the way I think about support systems. The main challenge was not only showing the current conversation, but also making previous customer interactions useful for the next one.
The frontend brings together customer context, support tickets, conversation history, memory, and evaluation in one workflow. The frontend is designed around Hindsight's memory capabilities, with the goal of making retained customer context visible and useful across support interactions.
The current implementation is the foundation for connecting these ideas to a complete backend system. The next stage is to connect the real APIs and Hindsight memory so that the interface can demonstrate how an agent learns from previous support interactions over time.
Top comments (0)