- Fighting hydration mismatch errors has been extremely annoying
- (related to hydration errors) react server component is a misnomer - "use client" still does a server side render
- Compile time is around 10s+ for dev mode because if you happen to import from modules that have tons of exports, it will compile the entire thing even if you're not using them
- next-auth has nonsensical APIs (eg the jwt and session callbacks); if you want to do federated sign out, it's also a hacked solution you have to come up with on your own
- app router middleware is difficult to extend. want to have multiple pieces of middleware like express? you'll have to hack your own solution since they only support a single piece of middleware
- caching problems. next 14 cached nearly everything, and 15 now disables some of it by default to help with the issues around stale data being rendered
- no way to specify that next.js runs in node.js mode and not edge mode. have to use annoying comparisons to run node.js specific code
developing a modern JS app shouldn't be this difficult and annoying that I totally regret using it