Back to Projects
Villa Cottages Logo

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

01

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.

Service account with per-calendar write access
Live availability read on page load
Calendar write on payment webhook
Manager block via admin portal
02

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.

Vercel cron polls Airbnb every 10 min
Per-hut iCal feed endpoints
1-day buffer in outbound feed
RFC 5545-compliant output
03

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.

Google OAuth login
Email whitelist access control
Date blocking UI
Reservation & hold overview

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

Next.jsTypeScriptGoogle Calendar APICashfreeNextAuth.jsResendiCalVercel Cron

Ready to Explore?

Check out the live application and see it in action