Template details
Riviera Villa Lite
Free Astro theme for one holiday rental: calm, photo-first, direct booking requests. Lite edition of Riviera Villa.
About this template
Riviera Villa Lite is a free, MIT-licensed Astro theme for a single holiday rental's direct-booking website, delivering a photo-first site where guests read about the house and send a booking request straight to the owner with no platform fee.
What is Riviera Villa Lite?
Riviera Villa Lite is a static site template built with Astro 7, Tailwind CSS 4 and TypeScript for owners of one holiday rental. It takes a single configuration file (villa.config.ts) holding every text and setting — name, address, capacity, rates by season, reviews, FAQ, house rules, contact and colours — plus a folder of photos, and outputs a static site in dist/ that any static host can serve.
What makes Riviera Villa Lite stand out?
- Single config file — every text and setting lives in
villa.config.ts, with per-language one-line entries for each string. - Astro 7 + Tailwind CSS 4 + TypeScript — the stated stack, with no cookie, tracker or Google Fonts request on page load.
- Booking-request form — validates dates, guest count, the season's minimum stay and (when the calendar is on) already-booked nights, then sends the request by email through Web3Forms or Formspree.
- No-service fallback — setting
provider: 'none'or an empty key turns the button into a WhatsApp or email-app link with the request pre-written. - Build-time validation — the build stops with a clear message naming missing translations or photos, e.g. a missing
detranslation or a gallery image absent fromsrc/assets/photos/. - Section toggles — hide any section via
sections(for examplefaq: false) and reorder them insrc/views/home-page.astro. - Self-hosted fonts and images — Fontsource fonts; Astro resizes photos and serves WebP at several widths, with 1800 px landscape photos recommended and 2400 px for
hero.jpg. - SEO built in — per-language title and description, canonical link,
hreflanglinks,sitemap-index.xmlwith alternates,robots.txtand a 1200 × 630 Open Graph image. - Privacy and accessibility — no analytics, the map is a link to OpenStreetMap rather than an embed, keyboard navigation with visible focus, and
prefers-reduced-motionrespected.
Who is it for?
- Owners of a single holiday villa or rental who want a direct-booking site without platform fees.
- Astro developers building a client site who want a config-driven template with TypeScript type checking (
astro check) and Vitest unit tests. - Small hospitality businesses in France that need the tourist rental registration number shown in the footer via
property.registrationNumber.
What can you do with Riviera Villa Lite?
- Set up a rental site in five minutes: install with Node.js 22.23 or newer, run
npm run devat localhost:4321, fill invilla.config.ts, add photos matching the listed file names, then runnpm run build. - Collect booking requests by email: connect a free Web3Forms access key or a Formspree form ID; spam is handled by the services' hidden trap fields (
botcheckand_gotcha). - Customise branding: set background, surface, text and accent colours in
theme.colors, with shades computed from them.
How does Riviera Villa Lite work?
Edit villa.config.ts and drop photos into src/assets/photos/, then build; the build validates the config and warns while site.url is still example.com. Deploy settings are given for Cloudflare Pages, Netlify, Vercel or any static host.
Pricing
The Lite edition is free under the MIT licence. Riviera Villa Pro is a paid upgrade adding four languages, an availability calendar synced with Airbnb, Booking.com and Vrbo, and Google VacationRental data.
FAQ
Is Riviera Villa Lite free?
Yes. The Lite edition is free under the MIT licence. It supports one language and has no availability calendar; the paid Pro edition adds four languages and a calendar synced with Airbnb, Booking.com and Vrbo.
Does the booking form need a server?
The form posts to a free form service — Web3Forms or Formspree — so nothing runs on your server. Without JavaScript it posts straight to the service, and with no service configured it becomes WhatsApp and email buttons.












