Travelopia

Multi-brand platform · Tech Lead · Oct 2023 — Present · 1 min read

One codebase that looks and feels like three different luxury brands.

Internal tool
Login, Four Seasons
Brands
3
Apps in the monorepo
6
Shared packages
14+

The problem

Three luxury brands needed the same post-booking portal, each with its own look, content and rules, without maintaining three codebases.

What we did

  • Built a semantic token theming system in Chakra UI, so brand differences live in tokens, not in conditional logic.
  • Organised the work as a Turborepo monorepo with 6 apps and 14+ shared packages: brand theming, PDF generation, email templates, spreadsheet exports, Salesforce and AWS clients, and payment libraries.
  • Generated brand-specific trip PDFs on demand from EJS templates.
  • Every brand runs identical code, with brand-specific styling, configuration and content filtering.

Screenshots

  • Login, Smithsonian Journeys

  • Login, TCS World Travel

  • Dashboard, Four Seasons

  • Dashboard, Smithsonian Journeys

  • Destination page, Four Seasons

Result

Three brands ship from one codebase with full visual differentiation and zero brand conditionals in components.

What I learned

  1. 01

    Design tokens are an architecture decision, not a styling detail: they decide how cheap the next brand is.

  2. 02

    Shared packages pay off only with clear ownership; otherwise they become a dumping ground.

Stack

  • React 18
  • TypeScript
  • Chakra UI
  • Turborepo
  • EJS
  • Sanity.io

Want something like this for your business?