Hospitality Outsourcing

Direct-Booking Engine Modernization for a Boutique Hotel Group

A boutique hotel group was paying steep commissions on the majority of its bookings because its own website couldn't compete with the OTAs. Dillo built a modern direct-booking engine with real-time rate and availability sync — lifting direct bookings 38% and cutting commission spend 22%.

+38%

direct bookings

-22%

OTA commission spend

1.1s

median search response

6 months

from kickoff to launch

The Client

A boutique hotel group operating a portfolio of independent properties in leisure and city-break destinations. Each hotel had its own character and loyal guests — but bookings flowed overwhelmingly through online travel agencies, with commissions taking a mid-teens percentage of the group's room revenue.

The Challenge

The group's own booking experience was the problem. The website handed guests off to a dated white-label booking widget: slow searches, a clunky multi-step form that behaved badly on phones, and rates that periodically disagreed with what the OTAs showed — because availability sync with the channel managers was batch-based and fragile. Guests would browse the hotel's site for photos, then book on an OTA because it was simply easier.

Worse, the sync fragility occasionally produced double-bookings during peak weekends, which the front desks absorbed with upgrades and apologies. The group wanted to own its booking experience end to end, but had no software team — its IT function was one systems manager overseeing property-management systems and vendors.

What We Did

Dillo delivered the new booking platform as a managed outsourcing project: discovery with the group's revenue manager and hotel GMs, then milestone-based delivery with demos every two weeks. The guiding metric from day one was direct-booking conversion.

  • Built a direct-booking engine on Node.js and PostgreSQL: fast availability search across properties, room and rate-plan management, promotions and packages, and support for the flexible-date searches leisure guests actually perform.
  • Implemented two-way rate and availability sync with the group's channel managers — event-driven instead of batch — so the website, OTAs and property-management systems finally agreed in near real time.
  • Redesigned the booking flow in Next.js, mobile-first: from search to confirmed reservation in three steps, with real photography, transparent pricing and no handoff to a third-party widget.
  • Integrated Stripe for payments — cards and wallets, deposits and flexible cancellation handling — replacing the previous provider's clunky hosted page.
  • Tuned for speed on AWS: cached availability reads and pre-warmed searches brought median search response to 1.1 seconds, with performance budgets enforced in CI.

Launch was property by property, starting with the two highest-traffic hotels, with A/B comparison against the old widget before each cutover. Full launch landed six months after kickoff; Dillo continues to run the platform under a light support retainer.

The Results

  • Direct bookings rose 38% in the two quarters after full launch, driven by the faster, mobile-friendly flow.
  • OTA commission spend fell 22% as share shifted to the group's own channel — savings that flow straight to margin.
  • 1.1-second median search response, down from the 4–6 seconds guests endured with the old widget.
  • Event-driven sync eliminated the peak-weekend double-bookings that had been a recurring front-desk headache.
  • The group now owns its guest data end to end, feeding a nascent loyalty program that the old white-label setup made impossible.

Figures reflect outcomes reported for this engagement; they are project results, not audited benchmarks.

Tech Stack

Next.js Node.js PostgreSQL Stripe AWS

Services Used

Software Outsourcing — a managed delivery team owning the booking platform from discovery through launch and ongoing support, on transparent pricing.

Ready to build your team?

Tell us what you need and get your first highly relevant candidate CVs within 24–48 hours.