Skip to content

Work · Vialuxury

Moving a live booking platform from Ruby to .NET without stopping it

Client
Vialuxury, luxury travel, Netherlands
Service
Modernisation and migration
Period
February to August 2026
Team
4 engineers
Vialuxury

A hotel booking platform moved from Ruby to .NET one area at a time, with both systems running on the same database. Each piece took over only after it matched the old one on real data.

  • the problem

    A Ruby platform that worked, but had become expensive and fell behind on hotel availability at busy times.

  • what we did

    Built a .NET core next to it on the same database and moved one area at a time, each proven against Ruby first.

  • where it is now

    Accounts, finance, availability, cancellations and content run on .NET. Checkout runs in shadow mode. Ruby is switched off in October 2026.

Vialuxury home page before the redesignVialuxury home page after the redesignBeforeAfter
The home page before and after the redesign Ilhan built. The new version is live as an A/B test.

The problem

Vialuxury sells hotel stays with the extras included: dinners, wellness, experiences. Their platform was built in Ruby on Rails, and it worked. It was quick to change and the team knew it well.

Two things had become a problem. It had become expensive, and at busy times it fell behind on hotel availability updates, so the prices on the site could lag behind what hotels had released. Rewriting it in one go was not an option. Bookings come in every hour of the day, and years of business rules lived in the code, some of them in files rather than the database.

What we did

We built a new .NET core next to the Ruby one and moved the platform over one area at a time. Both systems run against the same Postgres database. Rails still owns the schema and .NET maps onto the existing tables, so switching an area over is a routing change that can be undone.

We started with accounts and passwordless sign-in, then finance reporting and invoicing, hotel availability, cancellations and refunds, and the sync of all content from the CMS. Checkout and payments go last.

Nothing took over until it matched Ruby on real data. A parity harness runs the Ruby and .NET versions side by side against the same CMS content and compares every row they write. Checkout runs in shadow mode: every live order is also calculated by .NET and compared with what Ruby charged.

What was hard

Rules outside the database. Email templates, discount rules and a partner list lived in Ruby files and constants. They had to be found by reading code, not data, and one list changed on the Ruby side after we had ported it.

A type system that let things slide. Hotels and packages both have a status, but 0 means draft for a hotel and published for a package. Ruby read some whole numbers as decimals and turned missing amounts into zero without complaint. The parity runs caught these one at a time, and a few differences turned out to be Ruby bugs that the .NET version now fixes.

Two systems, one database. Ruby's background jobs still run against the same tables. An old nightly job could overwrite a field the .NET side had just set, and removing a Ruby job could quietly stop something that depended on it. Every change started with finding who else writes to that table.

A rollback. The first switch of cancellations to .NET was undone the same day: under production load, background jobs on one server held locks the others were waiting for. It went live again four days later.

What changed

  • Hiring is easier. There are more .NET developers to choose from than Ruby ones.
  • When Ruby is switched off in October 2026, Vialuxury runs one stack instead of two. Until then it stays up as a fallback, which the business asked for.

Timeline

  1. Feb 2026New .NET core running next to Ruby on the same database
  2. Mar 2026Accounts and passwordless sign-in
  3. Apr–May 2026Finance: booking and payout overviews, invoicing
  4. Jun–Jul 2026Hotel availability processing
  5. Jul 2026Cancellations and refunds, after one rollback
  6. Aug 2026Content sync from the CMS, and redirects
  7. Aug 2026Checkout, pricing and price checks running in shadow mode
  8. Oct 2026Ruby switched off (scheduled)

Who worked on it

  • Aleksa Kuzman

    Aleksa Kuzman

    Architecture of the .NET core, content sync, search indexing, redirects

  • Boris Radevic

    Boris Radevic

    Accounts, finance, availability, cancellations, checkout and payments

  • Ilija Racic

    Ilija Racic

    Tracing, logging and alerting; content sync fixes

  • Ilhan Kalač

    Ilhan Kalač

    The redesigned front end: search, offer pages, checkout, account and home

Search, the product pages and the home page API were built by another team working on the same platform.

Next step

Have something like this? Tell us about it.

The first call is free, takes 30 minutes and commits you to nothing.

Book a call