Back

Web Dashboard · Mamo · 2026

AI Insights

Mamo's first AI feature: a chat interface inside the merchant dashboard where merchants ask financial questions and get AI-powered answers. Revenue month-to-date, payment decline analysis, comparisons, predictive insights. It started with a 3-hour design sprint I joined alongside Joharah (Head of Design) and the product squad, contributing directions and ideas. Joharah led the sprint and owns the primary UI that came from it; I owned everything that made it shippable: the Blaze component architecture, making every flow responsive, every interaction state, and the full annotation pass.

My roleDesign Systems Lead: component architecture, interaction states, motion
Team
Joharah AlomairHead of DesignAsma AlyamaniChief Product OfficerFrank StodulskiLead Front-End EngineerPhu TruongBack-End Engineer

The challenge

A full AI chat interface is a different design scope than a standard product screen. Voice input, multiple response formats, responsive behavior across every flow, component architecture that survives the next AI feature. Most of it had to be built from scratch. The sprint and the design review produced the UI. The system layer had to be built on top of it. Both halves were essential. Neither would ship alone.

How I approached it

01

Scoping the system layer myself

After the initial internal review, once the UI and UX were close to ready, I started leaving comments on the file as todos for myself: what the design-system layer would need, the component architecture, the build plan, what would make it extensible for Mamo's AI roadmap. I wrote the game plan up as a proposal, not a response to a task. It was approved without changes. Nobody had to hand me the gaps. They were visible.

02

Component suite

Built the full AI component suite as a dedicated Blaze section. 11 components from scratch: prompt input, voice recording with a real-time audio waveform, chat sidebar, top bar, user bubble, text response, chart response, table response, response actions, thinking state, system messages. Two separate prompt inputs were merged into one. No reason for them to be different, and other AI platforms don't split them either. Every icon replaced with proper Blaze library instances. The alternative was one-off local components that wouldn't survive the next AI feature.

The AI suite as one Blaze section: inputs, chat chrome, response types, and states, built to extend to the next AI feature.
The AI suite as one Blaze section: inputs, chat chrome, response types, and states, built to extend to the next AI feature.
03

Interaction states

None of this existed before. Speech-to-text: designed the full state set: listening, transcribing, two-stage feedback, confirm/cancel controls. Chat response actions: copy, retry, like, dislike, regenerate. Every flow end-to-end with snackbar feedback and cycle navigation for retry versions. Sidebar actions: pin, rename, delete with modals, snackbar, and redirect behavior. Chat loading: thinking state with contextual copy tied to query type. Table and chart loading: each with distinct thinking states. Responsive: the base designs had mobile, but not every flow was accounted for; I made sure all of them worked at mobile sizes, including the table treatment, horizontal scroll, stacked footer, download placement. Every one of these would have shipped as a gap without the dedicated pass.

The speech-to-text state set: listening at first input, listening through a full take, transcribing, then the editable result.
The speech-to-text state set: listening at first input, listening through a full take, transcribing, then the editable result.
04

Annotation pass

Zero annotations before this pass. Every scenario annotated: input size at single line vs multi-line, table generation vs chart generation, thinking state copy, interaction behavior on each action, mobile specifics, edge cases. Gave developers a reference for thinking-state copy tied to query type. Annotations are invisible to users, but they're the difference between a developer guessing and a developer shipping.

One handoff screen, annotated: thinking-state copy keyed to query type, input single vs multi-line, and the edge cases a developer would otherwise guess at.
One handoff screen, annotated: thinking-state copy keyed to query type, input single vs multi-line, and the edge cases a developer would otherwise guess at.
05

What emerged

Two ideas that came from my side. The placeholder animation: cycling prompt suggestions in the input, approved unanimously by the team. The glassmorphism scroll gradient: a blur/fade at the bottom of the scroll area above the input. Validated when the design lead arrived at the same idea on their own in the same session.

The placeholder animation: prompt suggestions cycle through the empty input so merchants always have a way in.
06

Motion

The motion layer ran in parallel with the component work. Deep research into how AI interfaces handle micro-interactions: easing, transitions, timing. Emil Kowalski's principles were active references while building, not background reading. The animation vault content fed directly into this work.

What came of it

Production-ready spec for Mamo's first AI feature. 11 AI components built as an extensible Blaze section so every future AI feature has building blocks ready. Every flow made responsive. Every interaction state designed and annotated. The beta launched as a pilot to learn what merchants actually ask for, with a feedback loop to track every unavailable request. The feature went from a direction to something engineering can build without guessing.

Reflection

What I would do differently

The component architecture is extensible, but the feedback loop should have been built into the component design from day one, not added after. Up and down votes, tracking unavailable requests, response time monitoring. All of it affects how the chat bubble, response actions, and sidebar connect. We designed the analytics layer after the component pass and had to retrofit. The next AI feature gets instrumentation designed in parallel with the UI.