Hybrid is the right call. RSCs solve a real problem (data fetching overhead), but they're not a silver bullet for state management.
The friction you hit is fundamental. Server components can't hold interactive state. So you either accept client boundaries everywhere (defeating the purpose) or you artificially flatten your component tree to avoid them. Both suck.
What worked for us: RSCs for top-level data fetching and layout, client components for anything with interaction. Keep the boundary high in the tree. Treat it like an API contract, not a seamless abstraction.
The marketing made it sound like RSCs replace client state. They don't. They're a different tool for a different problem.