The real problem, I think, is that 95% of real business problems are not simple CRUD apps. There is always some complication unique to your domain that burdens you with constraints. Also, it seems like authentication is a problem that is still not solved smoothly without paying for SaaS. It doesn’t take long before you feel like you’re anything but a standard “CRUD app.”
My lesson from the past few years has been this: stay within the guardrails as much as possible. Use frameworks when you can, and try not to deviate too far from their conventions, no matter how tempting. If you stay within these rails, it’s fairly easy to ride the flow of changes and keep your code up to date without losing velocity on new features.
Whatever you choose, you're still going to be using it in three years. The safest option is probably to pick something really popular.