
Villa Cottages
Villa Cottages is a full-stack property booking system built for a 3-hut boutique stay on a private apple orchard in Srinagar, Kashmir (4.9 on Google, 4.8 on Airbnb). The backend is designed around Google Calendar as the single source of truth for availability — every booking, hold, and block writes directly to per-hut Google Calendars via a service account. Airbnb sync is bidirectional: a Vercel cron job polls Airbnb iCal feeds every 10 minutes to mirror Airbnb bookings into Google Calendar, while the site serves its own iCal endpoints that Airbnb imports to block its calendar when guests book directly. A Cashfree payment webhook triggers the calendar write on successful payment, and expired checkout holds are swept automatically every 5 minutes. The manager admin portal is gated behind Google OAuth and lets the property owner block dates, view upcoming reservations, and manage availability without touching the calendar directly.
01 — Features
Built by Architects, for Architects
Google Calendar Sync
Three Google Calendars — one per hut — serve as the live availability store. Every booking, block, and hold writes directly via the Calendar API. The site reads availability live on every request.
Airbnb iCal Bridge
Bidirectional iCal sync keeps the site and Airbnb in step. Airbnb bookings flow in via a 10-minute cron poll. Site bookings flow out via per-hut iCal feeds with a 1-day buffer to cover Airbnb's polling lag.
Manager Admin Portal
A Google OAuth-gated portal lets the property owner block dates, release holds, and view upcoming reservations — without touching Google Calendar directly.
Everything You Need
Comprehensive tools to make confident decisions
Google Calendar API integration — three service-account-managed calendars as the live availability source of truth
Real-time availability calendar on the booking page reads directly from Google Calendar on every request
Cashfree payment gateway integration with webhook-triggered calendar writes on PAYMENT_SUCCESS
Checkout hold system — dates soft-blocked at checkout start, swept automatically every 5 minutes if unpaid
Bidirectional Airbnb iCal sync: Vercel cron polls Airbnb export URLs every 10 minutes, mirroring bookings into Google Calendar
Site-served iCal endpoints per hut (/api/ical/a-frame, /api/ical/luxury-1, /api/ical/luxury-2) for Airbnb to import
1-day buffer injected into outbound iCal feed to protect against the 2–4 hour Airbnb polling lag
Manager admin portal — Google OAuth with email whitelist, direct date blocking, reservation view
Google OAuth-gated admin — only whitelisted email addresses can access the portal
Email confirmations via Resend on booking success and cancellation
Vercel cron jobs: Airbnb poll every 10 minutes, hold sweeper every 5 minutes
Dev stub mode — full app runs without any credentials (in-memory calendar, stub checkout)
Support for 3 independent hut calendars with per-hut iCal feeds and booking rules
Technology Stack
Ready to Explore?
Check out the live application and see it in action