Styling & UI Performance
Priority: P1 (HIGH)
Prioritize Zero-Runtime CSS for Server Components.
Workflow: Set Up Styling
- Choose library — Tailwind/shadcn (preferred), CSS Modules (scoped), or Ant Design (with client wrappers).
- Create
cnutility — Combineclsx+tailwind-mergefor dynamic classes. - Configure fonts — Use
next/fontfor zero-CLS self-hosted fonts. - Set image dimensions — Always specify
width/heightorfillon<Image>.
cn Utility Example
Library Selection
| Library | Verdict | Reason |
| :------------------------- | :----------------- | :------------------------------------------------- |
| Tailwind / shadcn | Preferred (P1) | Zero-runtime, RSC compatible. Best for App Router. |
| CSS Modules / SCSS | Recommended | Scoped, zero-runtime. Good for legacy projects. |
| Ant Design | Supported | Use with Client Component wrappers for RSCs. |
| MUI / Chakra (Runtime) | Avoid | Forces use client widely. Degrades performance. |
Library Patterns
For specific library setups, see:
- references/scss.md
- references/ant-design.md
- references/tailwind.md (Tailwind/shadcn)
Patterns
- Dynamic Classes: Use
clsx+tailwind-merge(cnutility).- Reference: Dynamic Classes & Button Example
- Font Optimization: Use
next/fontto prevent Cumulative Layout Shift (CLS).- Reference: Font Setup
- CLS Prevention: Always specify
width/heighton images.
Anti-Patterns
- No runtime CSS-in-JS with RSC: MUI/Chakra force
'use client'; prefer Tailwind or CSS Modules. - No
<img>without dimensions: Always setwidth/heightor usefillto prevent CLS. - No hardcoded conditional classes: Use
clsx+tailwind-merge(cn) for dynamic styles. - No Google Fonts
<link>tag: Usenext/fontfor zero-CLS self-hosted fonts.