The estate portal has grown over the years into an extensive, business-critical application. Bereaved relatives go through a complex process there during an emotionally heavy moment in their lives. The codebase reflected that history: a large AngularJS application, still stable and well-maintained, but increasingly a brake on speed and a turn-off for new developers.
The classic move in this situation is a big-bang rewrite. For a portal of this size that's not a real option: too risky, too long without delivering new value, and too much knowledge that only lives inside the existing code. As a team we deliberately chose a gradual approach in which old and new live alongside each other for an extended period.
My role was the architecture and implementation of a micro-frontend setup, based on the existing AngularJS codebase next to Angular 16. New screens and features are built in modern Angular; existing screens keep working as they are until they're due for replacement. The portal decides at runtime which version to show, so end-users don't notice anything.
Integrating a micro-frontend with a legacy SPA is technically thankless work: routing, authentication, sessions, styling, and state must continue to interoperate seamlessly. I spent significant time on a clean separation between shells, a shared authentication layer, and a consistent styling strategy so we could build on both old and new — without one breaking the other.
The build and deploy process was reworked too. The old project built with Grunt and RequireJS; the new part with modern Angular tooling. We set up a pipeline that builds, tests, and merges both worlds into one coherent artifact. That sounds unspectacular, but without that discipline a micro-frontend would have added fragility rather than reduced it.
The effect was immediate: new features could once again be built with energy and at pace, and the team got a credible path to replace the old code step by step without endangering the stability of the portal. For me this is a pattern I'd happily reach for again on long-running projects where a full rewrite simply isn't viable.
Outcomes
- AngularJS and Angular 16 productive side by side inside one portal for years
- One build and deploy pipeline that builds, tests and merges both worlds
- New screens in modern Angular without rebuilding the existing ones