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
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.

BeforeAfterThe 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
- Feb 2026New .NET core running next to Ruby on the same database
- Mar 2026Accounts and passwordless sign-in
- Apr–May 2026Finance: booking and payout overviews, invoicing
- Jun–Jul 2026Hotel availability processing
- Jul 2026Cancellations and refunds, after one rollback
- Aug 2026Content sync from the CMS, and redirects
- Aug 2026Checkout, pricing and price checks running in shadow mode
- Oct 2026Ruby switched off (scheduled)
Who worked on it
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


