COROS AI · Case Study
COROS AI Redesign: MUI → shadcn
Testers said v1 strained their eyes. As engineering moved to shadcn, I rebuilt the COROS AI product UI and its design system, live on web, iOS, and Android.
3
platforms live in production
54+
semantic tokens
0
redesign requests on handoff specs
- Role
- Product Designer
- Ownership
- Design system owner
- Platforms
- Designed for 4: web, tablet, iOS, Android
- Links
- app.coros.ai · Figma
The product
COROS AI is an AI coach that helps professionals shift moods, repair relationships and act when they’re stuck; I joined as founding designer in 2025 and led product, UX, prompts, research and brand.
Try what I builtThe live product





Foundation
Tokens that mirror the code


- Colors resolve through primitives, brand layer, then semantic tokens.
- Custom 11-stop scales for COROS blue, orange, and neutrals.
- 54+ tokens in light and dark, published as a shared library.
- Variants only when structure changes: the chat input handles 4 states.
Screens
Eight onboarding screens became six




Mobile, light theme.
8 dark-only screens became 6 themed ones, with the name moved up front. On the tone screen, the orb and card respond.
Screens
Chat, designed state by state




Message actions, tone quick-switch, composing.
I prototyped 3 user-bubble options in working HTML to settle a debate.
Every state a conversation can be in
| State | What triggers it | What the user sees |
|---|---|---|
| Empty state | Triggered byA new conversation. | User seesThe greeting and the composer. |
| Typing indicator | Triggered bySent, awaiting the model. | User seesAn indicator for the wait. |
| Streaming text | Triggered byThe response arrives. | User seesText building in the bubble. |
| Message-level actions | Triggered byA response completes. | User seesRead-aloud and flag actions. |
| Error and retry | Triggered byThe response fails. | User seesThe failure in place, with retry. |
| Scrolled away mid-response | Triggered byThe user scrolls up mid-response. | User seesA return-to-chat button. |
Screens
Settings in one modal shell





Sidebar flyout, Account, inline Connected accounts.



Influences search, chips, type-to-confirm delete.
Feature
A team-only Retrieved Context panel

Debugging the AI meant digging through logs. For my own prompt QA, I designed a panel showing what the model saw:
- Retrieved sessions with semantic and recency scores.
- Session-boundary probability.
- Chunk results.
- Memory.
Tone
One system, two voices
User
I feel like I'm working overtime every single day, but my team just keeps giving me grunt work and I'm so pissed off.
Supportive
I hear you. How are you doing as you bring this up? What's happening at work?
Provocative
Are you going to do it or not?
Tone swaps the response architecture: one reply asks for context, the other for a decision.
Impact
Results
- Live in production on web, iOS, and Android at app.coros.ai.
- Days to hours for design-to-review cycles.
- Zero redesign requests on documented handoff specs.