Implementation model
Build the UI in three layers.- shared primitives
- base buttons, badges, inputs, textareas, avatars, separators, and sidebars
- these should come from the adopted primitive system and be tuned through tokens and variants
- composed patterns
- repeated application patterns such as row layouts, meta pills, count badges, pane headers, and composers
- these should be built by composing shared primitives, not by bypassing them with one-off markup
- surface assembly
- chat, work, observe, and future product surfaces
- these should assemble composed patterns instead of inventing a new local visual language
Taste summary
The product should feel calm, durable, businesslike, and high-signal. It should not feel decorative, playful, or overloaded.Foundation-first rule
Before polishing a surface, stabilize the shared UI rules that the surface depends on.- fix repeated alignment, sizing, radius, and meta-placement problems in shared primitives before applying one-off surface tweaks
- prefer stable row structures such as
left / content / rightover absolute overlays for badges, counts, and status - use surface-specific overrides only after the primitive or reusable pattern is already believable
- treat recurring micro-defects across multiple components as a design-system problem first, not a local patch problem
- do not consider a surface polished if its clean appearance depends on ad hoc exceptions instead of consistent primitives
Interaction principles
- prioritize clarity over cleverness
- prioritize continuity over novelty
- prefer familiar productivity patterns over custom metaphors
- make important state obvious without increasing noise
Density and layout rules
- default to compact, readable density
- prefer continuous lists and dividers over unnecessary boxes
- keep section padding small unless spacing is doing real structural work
- create larger gaps between true sections, not between related rows
Token families
The design system should stay small and predictable.- radius
- use a narrow radius scale for controls, rows, and panels
- avoid introducing new corner styles for one surface
- spacing
- use a compact spacing ladder and reuse it across headers, rows, and composers
- repeated micro-adjustments should be promoted into shared spacing rules
- control sizing
- use one shared control height scale for badges, icon buttons, fields, and pills
- avoid one-off heights unless a component is truly exceptional
- typography
- use one display family, one UI/body family, and one mono family
- metadata should rely on quieter size and tone, not custom fonts per surface
- color
- default to neutral surfaces and restrained emphasis
- reserve accent and workflow color for real state, not decoration
- elevation
- prefer borders and subtle contrast before stronger shadows
- use stronger depth only for true shell boundaries, not routine list items
Typography and hierarchy rules
- hierarchy should come from size, weight, and spacing before color
- metadata should be quieter than primary content
- labels should be short, stable, and easy to scan
Color and emphasis rules
- default surfaces should stay restrained and mostly neutral
- use emphasis only where it changes understanding, priority, or state
- avoid spreading accent color across large surfaces when a compact signal is enough
List vs card discipline
- navigation rows should read as lists, not independent cards
- transcripts and thread replies should read as continuous conversation, not dashboard tiles
- use cards only for true major containers or detail panels with a distinct semantic boundary
Surface construction rules
- major containers may define the shell, but most interactive detail should live in rows, dividers, and restrained controls
- headers should communicate one dominant idea quickly; avoid stacking explanatory chrome when one line and one secondary detail will do
- composer bars, thread rows, and navigation items should feel like parts of one system, not like unrelated custom widgets
- if a UI issue repeats across header, list, thread, and composer, solve the shared pattern before the local surface
Canonical composed patterns
These patterns should be stabilized before surface-specific polish.- pane header
- eyebrow, title, description, and actions should come from one repeated structure
- use it for sidebars, transcript headers, thread panes, and future work/detail panes
- list row
- default anatomy is
left / content / right - counts and status belong in trailing meta, not in absolute overlays
- default anatomy is
- meta pill
- pills carry compact state or counts and should stay visually restrained
- prefer them for room counts, participants, mentions, or compact status
- composer shell
- editor, toolbar, and primary action should read as one control family, not as separate widgets
- message row
- transcript and thread should share the same author/meta/body rhythm unless a clear scope reason demands density changes
Shaping principles for a good system
- prefer a primitive that teams will actually reuse over a theoretically perfect abstraction that they will bypass
- choose flat APIs for simple, repeated usage and composed patterns for complex or extensible usage
- design the system so common product needs fit naturally without local hacks
- treat the design system as a product that must remain easy to adopt, not as a static style guide
What counts as visually unacceptable
- noisy emphasis
- excessive empty space that weakens scanning
- stacked boxes with no semantic reason
- inconsistent alignment or badge positioning
- a surface that reads more like a dashboard than a believable coordination tool