Think in terms of where work happens

A Server Component renders on the server and sends its result to the browser. It can read data close to the source without shipping its implementation as browser JavaScript.

A Client Component is sent to the browser so it can respond to clicks, typing, local state, or browser APIs. A page can combine both kinds.

Keep interaction at the edge

Start with server-rendered content. Add a Client Component around the smallest part that truly needs interaction, such as a menu, filter, or form control.

This boundary can reduce browser work while keeping the interface interactive. It also makes data flow easier to follow.

Choose the boundary deliberately

A component that uses state, effects, or browser-only APIs needs to run on the client. Static headings, content, and data-driven lists can often stay on the server.

Keep props crossing the boundary simple and serializable, then measure the production build to confirm the change helped.