Client project · Booking website · 2026 · launch in progress
Villa Léopold
The direct booking website of a villa with a pool in Bordeaux: guests book and pay online, with no Airbnb fees, and the calendar stays in sync with Airbnb.


- Accessibility (Google PageSpeed, mobile)
- 100/100
- SEO (Google PageSpeed, mobile)
- 100/100
- languages: English and French
- 2
Context
Lucas Delcros rents out his villa with a pool in the Primerose district of Bordeaux on Airbnb, where he is a Superhost rated 4.96/5. Almost all of his guests are British. Airbnb takes around 15% of every stay: he wanted a website in his own name so that his guests, especially returning ones, book directly.
Challenges
- Inspire as much trust as Airbnb in a guest who pays several thousand euros to a private owner.
- Never let the same nights twice, while the villa also stays on Airbnb.
- Let the owner manage everything himself (rates, calendar, photos, bookings) without touching the code.
What was built
Online booking and payment
Availability calendar and itemised price (nights, cleaning, tourist tax). The guest sends a request; once accepted, they receive a Stripe payment link valid for 48 hours. Deposit on payment, balance charged automatically before arrival, card saved for the security deposit.
Airbnb sync
The website and Airbnb calendars exchange their dates both ways (iCal). The Airbnb calendar is read again just before every payment, to rule out any double booking.
Owner area
Bookings (balance, cancellation, refund, security deposit), blocked dates, seasonal rates, photos, reviews and FAQ are managed from a single-account admin area, in French.
English and French
English website for the British guests, French version under /fr, currency switcher. Emails and the payment page are shown in the guest’s language.
Under the hood
- Price calculation, dates, availability and iCal parsing isolated in pure functions, covered by automated tests (Vitest).
- Stripe Checkout with a webhook, deferred balance charge and a security deposit with no upfront charge.
- Bot protection (Vercel BotID) on booking and contact, rate limiting on the admin login.
- Neon PostgreSQL database with Drizzle ORM, photos on Vercel Blob, hosted in the London region, close to the guests.