A modern multi-property booking platform for 7 luxury apartments on Lake Geneva — real-time availability, Stripe checkout in CHF, and a bilingual French/English experience, built on Next.js 15 and deployed to Cloudflare Pages.
View Live SiteMontreux Apartment Rental is a short-term rental platform showcasing seven high-end properties in the Montreux-Clarens region of Switzerland — from lake-view studios to a private villa with pool and jacuzzi. The client needed a single platform where guests could browse all properties, check live availability, and book directly without relying on Airbnb or Booking.com as intermediaries.
The platform covers the full booking journey: browsing all seven properties with individual detail pages, checking live availability via synced iCal feeds from Airbnb and Booking.com, calculating pricing automatically including city tax and guest-count discounts, and completing payment securely through Stripe Checkout in CHF.
ApartmentPage component, making the platform easy to extend as the property portfolio grows.
Each property's availability is pulled in real time from its existing Airbnb and Booking.com iCal feeds via an edge-cached API route. Booked dates are parsed and blocked automatically in the calendar — no manual updates required and no double bookings possible. Cache revalidates every hour to stay current without hammering external APIs.
The booking widget calculates the total price dynamically as guests select dates and guest count — including nightly rate, city tax (CHF 6/night/adult), and a 20% discount for two-person bookings on larger apartments. Minimum stay rules are enforced per property. All of this logic lives in the frontend without a separate pricing service.
A Next.js edge API route creates the Stripe Checkout session server-side, keeping the secret key out of the browser. The session includes dynamic line items — nightly accommodation and city tax shown separately for transparency. Stripe handles PCI compliance entirely; no card data is ever processed by the application.
A bilingual contact form collects guest enquiries and routes them through the Resend API, sent from a verified custom domain address. The form includes validation, loading state feedback, and graceful error handling — all without a third-party form service or backend server.
Each property page includes JSON-LD structured data (LodgingBusiness + Apartment schemas), Open Graph and Twitter Card meta tags, canonical URLs, and bilingual hreflang alternates for French and English. A generated sitemap and robots.txt complete the technical SEO setup for local search in the Montreux region.
Guests browse all seven apartments from a single landing page, then select dates and guest count on the property detail page to see an instant price breakdown before proceeding to Stripe checkout.
The platform uses the Next.js 15 App Router with React 19 and TypeScript throughout. All backend logic runs on the Cloudflare edge via edge-runtime API routes — no Node.js server, no persistent infra. A configuration-driven data layer in /data/apartments.ts drives all seven property pages from a single typed schema.
Whether you manage one apartment or a portfolio of properties, I build fast, secure, and conversion-focused booking platforms — without the ongoing fees of third-party booking services.
Remote · Switzerland-based · Available for new projects · EN / FR / TR / RU