| Importing Framer Motion without checking package.json | Build fails, missing dependency | Verify dependency exists first. Output npm install framer-motion if missing. |
| Using Tailwind v4 syntax in v3 projects | Breaking changes in class names | Check package.json Tailwind version. Match syntax to installed version. |
h-screen everywhere | iOS Safari viewport bugs, layout shift | Always min-h-[100dvh] for full-screen sections. |
Animated width/height/top/left properties | Layout thrashing, GPU cannot accelerate | Only animate transform and opacity. Use compositor-only properties. |
| Inter as display font for premium products | Looks generic, no character | Use Geist, Outfit, Cabinet Grotesk, or Satoshi for display headings. |
| Neon glows, purple button shadows, oversaturated accents | AI tell โ looks templated | Neutral bases (Zinc/Slate) with a single controlled accent. OKLCH over hex. |
| Grain texture on scrolling containers | Scroll jank, paint storms | Apply grain exclusively to position: fixed; pointer-events: none pseudo-elements. |
useState for continuous animation values | Triggers React re-renders 60fps | Use Framer Motion useMotionValue + useTransform outside React render cycle. |
| Centered hero section when DESIGN_VARIANCE > 4 | Clichรฉ, no personality | Split screen (50/50), left-aligned content with right-aligned asset, or asymmetric whitespace. |
| Missing loading/empty/error states on interactive components | Broken UX when data isn't perfect | Implement all four states: loading (skeleton), empty (guidance), error (inline+actionable), success. |