Nortik

Case Study · YGO

A multi-brand travelbooking platform withan AI travel agent.

YGO is AI infrastructure for the travel industry. We built and continuously developed its entire frontend estate: the customer-facing booking sites, the whitelabel partner storefronts, the CMS and the internal operations tooling, all out of a single SvelteKit monorepo on top of a separate Go backend, with an AI travel agent running search, packaging and booking end to end.

Production apps, one monorepo
10+Production apps, one monorepo
Branded storefronts, one frontend
5Branded storefronts, one frontend
AI capabilities in the booking flow
6AI capabilities in the booking flow

Engagement Overview

YGO sells AI infrastructure to the travel industry: search that reads a sentence instead of a filter panel, ranking that is personal to whoever is looking, packaging that turns a hotel into a whole trip, and the automation that keeps the inventory behind all of it usable. We built and continuously developed the entire frontend estate that this is delivered through.

That covers the customer-facing booking sites, the whitelabel storefronts YGO runs for partner brands, a multi-tenant CMS, and the internal admin and operations tooling the staff work in. All of it lives in one SvelteKit monorepo and sits on top of a separate Go backend, so the frontend was ours end to end and the contract between the two was an API rather than a codebase.

The single biggest win is the whitelabel architecture. New partner brands launch out of the same codebase with their own theming, locales, routing rules and booking flows, without forking. Adding a brand is a configuration and theming exercise rather than a rebuild.

10+
Production apps, one monorepo
5
Branded storefronts, one frontend
6
AI capabilities in the booking flow
Engagement
Staff Augmentation
Team
1 Sr. Fullstack AI Engineer
Focus
Multi-brand booking and AI search
Working model
Owned frontend, against a Go backend

Stack

Frontend

  • SvelteKit
  • Svelte
  • Next.js
  • React
  • TypeScript
  • Tailwind CSS

Backend & data

  • Go
  • REST & OpenAPI
  • PostgreSQL

AI & ML

  • LLM Travel Agent

Build & tooling

  • Turborepo
  • Vite
  • Playwright & Vitest

Infrastructure & DevOps

  • Vercel
  • GitHub Actions
A traveller with a suitcase walking out of a dark archway toward a sunset horizon

The Challenge

YGO had to serve several travel brands at once: its own consumer brand alongside partner whitelabels like Condor Holidays, Kurzurlaub.de and Secret Escapes. Doing that the obvious way means a codebase per brand, and a codebase per brand means every fix gets made four more times.

The brands are not skins of each other either. Each one has its own domain, its own theming, its own allowed locales, its own blocked routes, and in some cases a different booking flow entirely: a classic trip package on one brand, a three step AI-driven hotel journey on the next. Whatever held them together had to be flexible enough for all of that without anybody reaching for a fork.

On top of that, the platform was moving from traditional filter-based search to an AI travel agent that interprets what somebody actually wishes for. Both systems had to coexist and stay honest with each other, because the agent can reinterpret a search and the interface still has to show what was really looked for. Internal teams needed a CMS, an operations dashboard and staff tooling alongside it, each with its own security requirements.

The Solution

One repository, one shared component layer, and a brand resolved at the edge of every request. Everything a visitor or a member of staff touches is drawn out of that, and the AI travel agent runs inside the booking flow rather than beside it. Five stretches of it carried most of the weight.

The Condor Holidays booking site with a Hotel-Suche panel powered by AI offering natural-language filters alongside the hotel results

Ten apps and one repository

The whole estate lives in a single Turborepo monorepo: the public booking sites, the CMS, the auth app, the admin console and the staff platform, more than ten SvelteKit apps in production, plus a Next.js app carrying the AI chat interface. They share five internal packages holding the types, the UI components, the utilities, the translations and the configs, so a component fixed once is fixed in every app and a change to the API's shape fails to compile everywhere it matters rather than in one place at runtime. That is the whole reason a frontend estate this wide can be moved by one engineer.

  • Turborepo
  • SvelteKit
  • Shared Packages
  • TypeScript
The YGO Holidays storefront: hotel results with an AI recommendation card surfacing a five-star London hotel including flights

Five brands out of one frontend

A whitelabel theming system resolves which brand a visitor is on from the domain, a cookie or a query parameter, and that one answer then drives everything downstream: which content is filtered in, how the site is styled, which locales are available and which routes are blocked. YGOTrips, YGO Holidays, Condor Holidays, Kurzurlaub.de and Secret Escapes all render from the same code with their own theming and their own rules, including different booking flows, and none of them is a fork. Launching a partner brand is a configuration and theming exercise rather than a rebuild.

  • Whitelabel Architecture
  • Brand Resolution
  • Theming
  • Locales & Route Rules
The AI search field with the query 'Plan a family weekend in London' typed into it

A search box instead of a filter panel

The traditional way into a travel platform is a wall of dropdowns: destination, dates, board type, room category, a dozen more. Athena replaces it with a sentence. Somebody types what they actually want, the agent reads the destination, the dates, the budget and the preferences out of it, and searches the live inventory against them. The interpretation is the hard part and it is also the honest part: the agent can adjust a user's filters, so the interface has to keep showing what was really searched rather than what was typed. An interpretation can also be wrong in ways a unit test cannot catch, so the agent's readings are scored by AI quality evaluations rather than assumed correct. Getting that feedback loop right is what makes the product feel like a travel agent instead of a chatbot bolted onto a form.

  • AI Travel Agent
  • Natural-Language Search
  • Filter Interpretation
  • AI Quality Evaluations
The AI agent turning 'Plan a family weekend in London' into a day-by-day itinerary of flight, transfer, hotel and river cruise, with an ask-any-hotel-question panel below it

From a wish to a booked trip

Athena does not stop at a result list. From the same query it packages a trip: the flight, the transfer, the hotel, the activities and the walking legs between them, laid out day by day with the offers already priced. Hotel and flight are combined into one offer rather than sold as two searches, and everything the agent assembles is bookable in place. Under EU AI Act rules, anything the model produced is labelled as such, so a traveller always knows which part of the page is a machine's suggestion and which part is inventory.

  • Trip Packaging
  • Hotel + Flight Offers
  • EU AI Act Labelling
A YGO Holidays hotel detail page with an ask-any-hotel-question panel offering suggested questions about breakfast, location and the pool

Ask the hotel anything

The question that actually decides a booking is rarely on the fact sheet. Is the pool clean, how is the breakfast, what are guests saying about the location. Per-hotel AI question answering reads the product data and the reviews for that specific property and answers in place, on the hotel page, while somebody is deciding. It is the same agent as the search, pointed at one property instead of the whole inventory, and it turns a support ticket that would have been written tomorrow into an answer given now.

  • Per-Hotel Q&A
  • Review Grounding
  • Content Enrichment

And everything holding the estate together

The parts a customer never sees, and the reason ten apps in one repository behave like one product instead of ten that happen to share a folder.

  • Booking and payments

    Complete booking flows with Stripe and PayPal behind them, and a sandbox and live mode that can be switched between, so a flow can be exercised safely against the real thing in production.

  • Two ways to be logged in

    Dual-session authentication with JWT sessions signed through jose, magic-link sign-in for the internal apps, and bot detection in front of the flows that cost money.

  • A multi-tenant CMS

    One CMS serving every brand, with a visual block editor, content scheduled to appear and disappear on its own, and magic-link auth for the editors who run it.

  • Operations and support

    An admin console and a staff platform for the internal teams, with a customer-support portal integrated into them rather than living as a separate tool.

  • A design system CI enforces

    The shared UI package is checked in the pipeline, so the internal tools stay visually and behaviourally consistent by default instead of by review. Playwright covers the journeys, Vitest the units.

  • Shipped and watched

    Every app deploys server-rendered to Vercel through GitHub Actions behind lint-staged and Husky gates, with BetterStack watching uptime and PostHog carrying analytics and A/B tests.

An aircraft wing over a turquoise coastline seen from altitude

Business Impact

The platform now runs multiple consumer brands and partner whitelabels out of one codebase, in German and English, with both the classic package journey and the AI-driven one live in production side by side. New partner storefronts reuse the entire search, packaging and checkout machinery, so launching a brand is configuration and theming rather than a rebuild.

The shared package layer is what pays for that day to day: a bugfix or a feature typically lands everywhere at once instead of five times. The CI-enforced design system keeps the internal tools consistent without anybody policing it in review, and the AI travel agent sits inside the booking flow rather than beside it, which is the difference between a product that plans a trip and a chatbot that talks about one.

View it from our angle.

Get In Touch
Jovan DmitrovićNortik logo
Jovan Dmitrović
Sr. Software Engineer, Nortik
Whitelabeling sounds like a theming problem until you realize every brand also wants its own locales, routes, booking flow and legal requirements. Layering an AI travel agent on top added another twist: the AI can reinterpret and modify a user's search filters, so the UI had to stay honest about what was actually searched.

Nortik’s Impact

The whole frontend estate behind YGO: ten-plus production apps in one monorepo, five branded storefronts off a single frontend, and an AI travel agent running search, packaging and booking end to end.

Your AI team is ready.Are you?

Let's shape the future of AI, together.