I migrate piece by piece, never in a big bang
Whenever an app outgrows its stack, the hardest part is keeping product velocity alive while changing the engine underneath. I look for the cleanest seams, draw strict TypeScript contracts at the boundaries, and migrate one route or module at a time. Customers keep using the app, and the team never has to pause shipping.