Anti-Patterns
Common design and implementation mistakes, paired with the correct alternative and the principle being violated. Use this catalog as a reviewer's reference, a self-check before shipping, and a teaching artifact.
Each entry shows the wrong way, explains why it’s wrong, and gives you the right alternative — with links to the relevant tokens, components, and design principles. Filter by category or severity, or search by keyword.
Color & Theming
2Anti-patterns related to color choices, token usage, theme support, and brand application.
Hardcoded hex values in component code
highEmbedding raw hex colors directly into CSS or component code bypasses theme support and brand consistency.
Using global color tokens directly in component code
highReferencing `color.teal.500` in components instead of `color.text.brand` collapses the semantic layer and locks components to specific palette values.
Typography
1Anti-patterns related to type sizing, weight, hierarchy, and the typography token scale.
Spacing & Layout
1Anti-patterns related to margin, padding, alignment, and the spacing token scale.
Components
2Anti-patterns related to using design system components in the wrong context or in the wrong way.
Disabling a button without explaining why
highA greyed-out "Submit" button with no hint about what's missing forces users to guess what they did wrong.
Using a Toast for critical errors that require action
highToasts auto-dismiss. If the user must take action — or risks losing work — a toast hides the error before they can read it.
Interaction & States
1Anti-patterns related to hover, focus, active, disabled, and other interaction states.
Accessibility
1Anti-patterns that create barriers for users with disabilities. Often overlap other categories.
Content & Voice
2Anti-patterns related to interface copy, error messages, voice, tone, and terminology.
Cute error messages for failures that need real action
mediumWhimsical copy on consequential errors trivializes the user's problem and hides what they should do next.
Generic empty-state copy that says nothing
mediumEmpty states that say only "No data" or "No items found" leave users unsure what belongs there or what to do next.
Motion
3Anti-patterns related to animation, transitions, and motion design.
Animations that ignore prefers-reduced-motion
highJavaScript-driven animations that don't check the user's reduced-motion preference will fire for users who have explicitly asked their device to hold the motion.
Hardcoded duration and easing in component code
highWriting `transition: opacity 250ms ease-in-out` instead of using motion tokens bypasses the system and creates animations that visually disagree across the product.
Staggering animations across too many elements
mediumStaggering 20+ list items 50ms apart creates a slow cascade the user has to wait through before they can interact with the page.
Tokens & Code
1Anti-patterns related to how design tokens are consumed in code, build pipelines, and packaging.