Shipped several production apps on Next.js's App Router this year — server components, route handlers, the whole model of blurring client and server code in one codebase.
The learning curve isn't the syntax, it's the mental model: knowing which half of your component is actually running where, and why that matters.