Azzaz

OOH CMS

Campaign management for out-of-home advertising

OOH CMS
Role
Backend Engineer
Timeline
Aug 2025 – Apr 2026
Context
Tech Emulsion · client in Australia/NZ

Tech & skills

  • NestJS
  • TypeScript
  • TypeORM
  • PostgreSQL
  • CQRS

About

A campaign-management system for the out-of-home advertising market across Australia and New Zealand — inventory, bookings, and the pricing that sits underneath them.

The domain was the difficulty. Layered business calculations, a long tail of edge cases, and scenarios that had to stay correct and auditable as campaigns were revised.

What I built

  • Worked through the migration of the backend to NestJS, applying enterprise patterns — repository, strategy, factory method, CQRS and observer — to keep the domain logic maintainable as it grew.
  • Moved the data layer from Prisma to TypeORM for first-party NestJS support and entity-based design that made those patterns far easier to express.
  • Laid the groundwork for a SaaS conversion with database-per-tenant isolation, so multiple agencies could each run the platform independently.

Outcome

Deployed and under active development throughout my time on it, with the multi-tenant architecture in place for the productisation phase.

What I took away

  • CQRS, the repository pattern and factory methods were all new to me here. They were genuinely hard to get comfortable with, and became the thing I most enjoyed about the project.
  • ORM choice is an architecture decision, not a preference. Prisma was pleasant; TypeORM was the one that made the patterns and the tenancy model expressible.
  • Complex business rules need a structure that isolates them, otherwise every edge case is paid for twice — once in the code and once in every future change.