Migrating GetMeChai's creator profile pages to Server Components removed almost all client-side JavaScript from the initial render, which mattered a lot given how many profiles are viewed once by a supporter who never returns.
The mental model that helped most: default to a server component, and only reach for 'use client' when a piece of UI genuinely needs interactivity, state, or a browser API. Everything else, especially data fetching and formatting, belongs on the server.
Streaming with Suspense boundaries let the shell of a profile page (avatar, name, bio) paint instantly while the supporter wall and recent activity stream in slightly behind it.
The biggest gotcha was prop serialization: passing functions or class instances from server to client components fails silently in some setups and loudly in others, so keeping the boundary data-only avoided a lot of debugging.