The default is Server. Promote on hard requirement only.
Walk every component you write through this tree:
Does it need...
├── useState / useEffect / useReducer? → Client
├── onClick / onChange / onSubmit? → Client
├── Browser APIs (window, navigator)? → Client
├── A library that requires hooks? → Client
└── None of the above? → Server ✓
What "mostly server" looks like
In a typical Next.js app, 80–90% of components are Server Components. Pages, lists, cards, headers, footers, articles, tables — all server. Only the leaves that hold state or event handlers wear 'use client'.
Real examples
- Blog post page (renders content) — Server.
- Search bar (controlled input) — Client.
- Markdown renderer (data shape) — Server.
- Theme toggle (writes to localStorage) — Client.
- Like button (optimistic UI) — Client wrapper, server data feed.