Tailwind is great for small projects, but at scale you need patterns. Here's how we structure Tailwind in large codebases.
The Component Abstraction Pattern
Design Tokens with CSS Variables
The cn() Utility
CVA for Variant Management
Anti-Patterns
- Don't use
@applyextensively — it defeats Tailwind's purpose - Don't hardcode colors — use semantic tokens
- Don't create utility classes with arbitrary values everywhere
- Don't ignore dark mode — build it in from the start