Nx Monorepo · Angular · CI/CD
Turning a fragile Angular codebase into an engineering platform.

The problem
As the Wi-Fi portal grew, the codebase accumulated technical debt. Coverage was sitting at 68%. There were 580 lint errors, high cyclomatic complexity and frequent regressions. The team was spending too much time fixing yesterday's problems instead of building tomorrow's features.
The decision
I proposed moving to an Nx monorepo and upgrading Angular to v16. The important part wasn't simply introducing Nx. It was using the architecture to enforce boundaries, make dependencies visible and allow CI to understand which parts of the system actually needed to be built and tested.
The trade-off
A migration of this size temporarily slows feature delivery. I made the case by looking at the cost of doing nothing: longer regression cycles, slower releases, growing onboarding time and increasing maintenance overhead.
Architecture
- Applications
- Nx Monorepo
- Shared libraries
- Module boundaries
- Affected CI
- Targeted builds/tests
Result
68% → 90% coverage
580 → 0 lint errors
−38% regressions
12 → 4 complexity
The migration wasn't about adopting another tool. It was about making the engineering system easier to reason about.