Direct booking that takes the commission back
This case study is anonymized. Client identity, interior screenshots and system internals are available on request under NDA.
- Commission on a direct booking
- 0%
- Pages built
- Villas, rates, amenities, gallery, booking, admin
- Current state
- Backend offline — booking not functional
The problem
This is a beautiful property with a marketing problem that looks like a technology problem.
Guests discover it on social media. They see the pool, they want the weekend, and then the path from wanting it to having it runs through a direct message: is it free that weekend, how much for eight people, how do we pay, is it confirmed. Every one of those exchanges is a person’s evening, and every hour of delay is a chance the group books somewhere else.
The alternative — listing on the big travel aggregators — solves the mechanics and creates a worse problem. The platform takes a percentage of every stay, forever, on guests who in many cases found the property on Instagram first. The business pays a recurring tax for a booking it had already earned.
There is also a quieter cost. On an aggregator, the property is one tile in a grid, described in the platform’s voice, competing on price against listings that are nothing like it. A private villa for a family reunion is not a commodity room-night, but that is the only thing the format can express.
What we built
A fast marketing site whose entire job is to carry an Instagram visitor to a confirmed, paid reservation without a conversation.
Availability that is real. The calendar reflects actual bookings and explicit date blocks the owners control, so a guest sees what is genuinely open. Nothing is provisional pending someone checking.
Rates and rules stated plainly. Pricing, capacity and policies are on the page rather than behind an enquiry. Hiding the rate is a conversion tax that properties pay in abandoned interest; this site treats clarity as hospitality.
Payment and automatic confirmation. The guest pays and the confirmation email goes out on its own. The reservation exists in the system the moment it is paid, not when a human next opens their messages.
An owner’s dashboard. Bookings, calendar availability and date blocks are managed from an internal surface built for speed and scannability rather than visual interest — it is a working tool, used quickly, often on a phone.
A site that sounds like the place. The property’s character — a family home that happens to have a beautiful pool, in a specific province with a specific warmth — is in the copy and the design. That is not decoration; it is the entire argument for why a group should choose this over a hotel, and it is precisely what an aggregator listing cannot say.
Why it was built this way
Static-first, on the edge. The site is built as static pages served from Cloudflare’s global network. A guest tapping a link from Instagram on mobile data is the make-or-break moment, and a page that takes three seconds has already lost some of them. There is no server to wake up.
Email through a dedicated transactional provider. Booking confirmations are not marketing mail; if one silently fails to arrive, the guest assumes the booking did too. Sending through a provider built for transactional delivery, with the domain properly authenticated, is what makes “you’ll get an email” a promise rather than a hope.
Astro rather than a heavyweight framework. The public site is content and images with a small amount of interactivity. Choosing a static-site generator that ships almost no JavaScript by default means the performance is structural rather than something to be optimised back in later.
Where it stands
The site is built and deployed: villas, rates, amenities, gallery, direct booking and an owner’s admin surface, with availability, payment and automatic confirmation wired through.
It is not currently functioning. The database behind it no longer resolves, so the booking flow errors. Until that is restored this is a completed build that is offline, not a system in production — and we would rather say so here than have you find it by clicking the link.
The live system is not linked publicly at the client's discretion. We can demonstrate it on a call.