WORK STORY / 04
Consolidate multi-brand external services into a multi-app monorepo
Context
The company was preparing to launch a new external service, and each of its three brands needed its own brand website.
Visually, they differed greatly: different copy, images, and brand colors.
Once I examined the code, however, I found that more than 90% of the templates, component behavior, and page structure were actually the same.
Creating three independent projects would have been fast in the short term, but every later feature would require three synchronized changes. If one was missed or implemented differently, an original brand difference would ultimately become an architectural difference.
My Decision & Action
I therefore did not equate three brands with three copies of the code.
I first organized fundamentally identical templates, UI behavior, and styling logic into shared capabilities. Copy, images, themes, and special requirements that truly belonged to each brand remained configurable or overridable variation points.
I then brought the brand applications and shared modules into one Nx monorepo.
Each brand remained its own app, while shared capabilities had only one maintenance source.
Outcome
The three brands could preserve their individual product identities while sharing the same engineering foundation.
Shared features no longer required repeated changes across repositories, and adding a brand no longer meant copying another website and starting a new divergence.
Code that might gradually have become three separate products was maintained as:
multiple apps sharing one set of core capabilities.
Reflection
This is also why I came to place increasing value on monorepos.
To me, a monorepo is not merely moving many repositories into the same folder. It means:
when multiple products share the same engineering knowledge, making the code structure faithfully reflect that fact.
Brands can evolve independently, but fundamentally identical capabilities should not gain multiple sources of truth merely because their deployment units differ.