UX Audit — ai.com Web UI (Sunbeam frontend)

Score: 67/100 — Grade C

Users building a Skill, removing a chat member, or disconnecting an integration hit destructive actions with zero confirmation, or copy that contradicts what the code does. Fifty-nine issues span all eight units, with Trust & Credibility scoring weakest at 52/100. Chat's optimistic model-selection revert and Workflows' schedule-preview sentence show the product can calibrate feedback well when it tries.

This audit covers 8 live surfaces — Chat conversation, Conversation list & nav rail, Skills & Apps marketplace, App & Skill builder, Command Center triage, Calendar & calls, Workflows, and Permissions/connections/vault — plus a cross-cutting consistency pass across all of them. Domain packs active: High-Stakes (destructive/access-granting actions present in nearly every unit), Product & Growth (marketplace/builder), Accessibility (always on).

Dimension scores

Dimension Weight Score Summary
Cognitive Load 0.18 74 Most units chunk into 5–8 groups with progressive disclosure (BuildConfirmDialog, MarketplaceHero); the weak spots are ChatInput's ~13 always-visible composer controls and ConvergenceRailLayout's 7 flat nav rows sitting above the conversation list.
Visual Hierarchy 0.15 77 Strongest dimension — Send button, Workflows' shared PageHeader/BTN_PRIMARY/SectionHeading system, and RailRow's fill+weight combo each give one clear focal point; Calendar's competing LIVE badge and equal-weight card actions are the main dents.
Trust & Credibility 0.18 52 Weakest dimension — Marketplace and Builder both contradict their own "build it right here, in your workspace" copy the instant a build starts (BuildProgressPanel.tsx:58); Workflows' "pauses for approval" subtitle is untrue for ordinary send workflows; disconnect/kick/uninstall fire with zero confirmation across three units.
Action Clarity 0.15 67 Single-CTA discipline holds within most units (Send, Add/Update, BTN_PRIMARY), but three unrelated hand-rolled "primary/confirm" button treatments compete product-wide, and several time-sensitive controls (Join, checkbox, refresh) render under the 44px target.
Information Scent 0.12 73 Labeling is generally predictive (ChatInput's full aria-label coverage, Workflows' plain-language triggerChips), but an "Update available" badge and an "Install to a room" menu item both advertise actions with no click path wired to them.
Error Resilience 0.12 56 Resolve, model-revert, and failed-build retry show real recovery patterns, but snooze/dismiss, workflow-create failure, and disconnect/uninstall all skip the undo or confirmation their closest siblings (Resolve, Delete-message) get.
Emotional Design 0.10 68 Breathing-pip progress and reassuring micro-copy calibrate well against stakes in Workflows and Command Center, but the mid-build redirect away from the workspace and no-consent call recording create real anxiety spikes.

Strongest: Visual Hierarchy (77). Weakest: Trust & Credibility (52). Spread check: σ = 8.7 — clears the ≥8 anti-clustering threshold; scores are not anchored.

Per-unit scores

Unit Score Grade Declared dimensions Packs Findings
Chat conversation 67 C Error Resilience, Trust & Credibility, Cognitive Load, Information Scent High-Stakes (destructive actions), Accessibility 5
Conversation list & nav rail 71 B Cognitive Load, Information Scent, Action Clarity, Error Resilience Accessibility 8
Skills & Apps marketplace 63 C Trust & Credibility, Action Clarity, Error Resilience, Emotional Design High-Stakes, Product & Growth, Accessibility 6
App & Skill builder 60 C Trust & Credibility, Error Resilience, Action Clarity, Emotional Design High-Stakes, Product & Growth, Accessibility 7
Command Center triage 65 C Error Resilience, Trust & Credibility, Information Scent, Cognitive Load (none) 6
Calendar & calls 68 C Trust & Credibility, Error Resilience, Action Clarity, Information Scent Accessibility, High-Stakes (privacy/consent) 8
Workflows 70 B Trust & Credibility, Error Resilience, Visual Hierarchy, Cognitive Load High-Stakes (destructive actions), Accessibility 6
Permissions, connections & vault 67 C Trust & Credibility, Error Resilience, Action Clarity, Information Scent High-Stakes, Accessibility 6

No unit is flagged uniform — every unit's 7 dimensions spread by more than 8 points, so none required a "this is genuinely level" defense.

Cross-cutting theme (not a routed surface — a consistency pass across the 8 units above): cognitiveLoad 58, visualHierarchy 55, trust 35, actionClarity 50, infoScent 68, errorResilience 48, emotionalDesign 52. This is the lowest trust score anywhere in the audit: high-stakes trust actions (vault save, disconnect) stay silent while low-stakes ones get toasts with Undo, and the "confirm ceremony" is inverted — a free, reversible create action gets a full modal while harder-to-reverse remove/disconnect actions fire from a bare text button. 7 findings (xc-1…xc-7), all folded into the severity-sorted list below.

Findings (59, sorted by severity then task-impact)

P0 — Critical (6)

P0 Build confirm copy says here, code navigates away

P0 Workspace copy is contradicted the instant a build starts

P0 Failed workflow creation fails silently, drops draft

P0 "Pauses for approval" subtitle is inaccurate

P0 "All"-secrets vault grant applies with one click

P1 — Major (11)

P1 Removing a member fires instantly with no confirmation

P1 Delete-message dialog auto-focuses the destructive button

P1 Install-to-room action has no trigger anywhere

P1 "Update available" badge has no way to act on it

P1 Agent "question" state exists in UI but never fires

P1 Snooze and dismiss vanish with no undo

P1 Recap/scribe panel has no dialog semantics

P1 Failed call history load offers no retry

P1 Run button sits above what it will do

P1 Disconnect revokes access with zero confirmation

P1 "Allow Always" consequence never stated

P2 — Moderate (25)

P2 Usage-cap composer disables send with zero visible explanation

P2 Composer toolbar shows nine formatting icons at all times

P2 Dismiss controls invisible on the mobile list

P2 All-chats panel text fails contrast on dark surface

P2 Hand-rolled all-chats dialog has no focus trap

P2 Seven nav rows sit above the conversation list

P2 Room access granted on one click, no confirm

P2 Uninstall removes instantly with no confirmation

P2 Primary build button is smaller than a touch target

P2 Failed build offers dismiss, never a retry

P2 Finished build ends without a path to publish

P2 Deep-linked recap header never gets enriched

P2 Create form errors stay hidden until submit

P2 Two delete-confirm patterns on one screen

P2 Draft-replace warning isn't a real dialog

P2 Add-key Save enables before name format is valid

P2 Access-level radio looks pickable but never is

P2 Icon-only connect button has no accessible name

P2 High-stakes trust actions stay silent; low-stakes ones get toasts

P2 Confirm ceremony inverted: cheap actions get a modal, costly ones don't

P2 Three unrelated button systems play the role of "primary CTA"

P2 Four competing loading-skeleton treatments across units

P2 Only marketplace survives a render crash without losing the shell

P2 Legacy tertiary-text token fails contrast on two trust-control screens

P2 Same destructive-remove action confirms in chat, not in trust-control

P3 — Minor (17)

P3 Model-selector button borrows the generic "more options" icon

P3 Section delete uses a raw glyph, not lucide

P3 Dismiss control nests one button inside another

P3 Empty people/groups sections offer no guidance

P3 Sidebar resize handle has no rest-state affordance

P3 Build and publish dialogs use a different design language

P3 Owner action row can overflow with no wrap

P3 Close and send icons are too small to tap reliably

P3 "Skip" and "Close" silently disagree on your rating

P3 Triage icon buttons skip aria-label

P3 16px checkbox is the only way to resolve

P3 Recovery tray buried below Getting Started

P3 Join button outranked by New Call button

P3 Live-refresh control is a 24px icon target

P3 Three card actions share equal visual weight

What's working

Coverage & limits

This is a static-code audit: no mock/offline layer exists and .env.local points at a live dev gateway, so loading/empty/error/modal states were inferred from JSX and handlers, not observed at runtime; every finding above names the state it occurs in. No finding required an "unverified — check actual value" flag — all contrast claims (e.g. chat-list-3, xc-6) are computed WCAG ratios against the actual hex values in the token reference, not estimates.

Every finding in this report — including the 7 cross-cutting ones — faced an adversarial verification panel, and each finding above carries its own vote count. 0 findings were killed (a finding dies only when ≥2 lenses refute it). 13 findings had their severity corrected by the severity lens during that pass (marked "severity corrected" above): chat-1, chat-3, calendar-1, calendar-4, calendar-5, command-center-2, command-center-3, command-center-4, trust-control-1, trust-control-3, trust-control-4, xc-1, xc-2.

Three caveats on that verification, and on this run:

Deferred surfaces (not audited in this pass): billing, subscription & account danger zone (via CoreSettingsModal); delete-account; TopUpUsage/ConfirmPurchase; claim-handle onboarding (9 pages, plan → card → confirm); Meet in-call UI (components/meet/**); Insights & custom dashboards; Knowledge base; Routines / playbooks; signup & email-connect; marketing & support pages; /[slug]/admin iframe wrapper; src/app/dev/* demo routes.

Code-health asides (not UX findings)

The following surfaces are unreachable code, not UX findings, and carry no ticket: the _settings/** and _upgrade/** page trees are private (underscore-prefixed) App Router folders opted out of routing entirely — the live settings/upgrade UI is instead CoreSettingsModal.tsx/UpgradePlanModal.tsx. The /[slug] root page (BotClient.tsx) is redirected away by middleware before it can render. social/calls and social/huddles are redirect-only stubs with no UI of their own. Orphaned UserAvatar.tsx/UpgradeButton.tsx links point at these dead URLs and have zero live importers.