Busyless
A seven-year-old Angular scheduling app rebuilt on Next.js — same features, a third of the load time, and a codebase the team can actually change.
Problem
Busyless ran on AngularJS. The framework had been end-of-life for years, the build only worked on one engineer's laptop, and every new feature meant touching a 14,000-line controller that nobody fully understood. Page loads were taking close to five seconds on mobile, and the team had quietly stopped shipping.
They did not want a rewrite for its own sake. They wanted to be able to say yes to customers again.
Solution
We mapped every route in the existing app to a behavioural spec, then rebuilt on Next.js App Router with server components doing the data work. The old database stayed exactly where it was — we put a typed data layer in front of it rather than attempting a schema migration at the same time as a framework migration.
The cutover ran page by page behind a proxy: new routes went live one at a time while the legacy app served everything else, so there was never a big-bang release to be nervous about.
Result
The rebuilt app went live over six weeks with no scheduled downtime. Load times dropped by more than four seconds on mobile, and the team shipped three customer requests in the first fortnight after handover — more than the previous quarter combined.
Stack
- Next.js 15
- TypeScript
- PostgreSQL
- Drizzle ORM
- Tailwind CSS
- Vercel