04 / 06
StayFinder
A full booking lifecycle that keeps availability honest automatically.

Problem
A villa rental business needed real online bookings and payments, not just a listings page. The sharpest risk: a guest could start booking a villa, walk away without paying, and tie up those dates for everyone else unless the hold was reliably released.
Build
A website where guests browse villas, hold a date while they pay, and get instant confirmation once payment clears - with unpaid holds automatically released after 5 minutes. Payment confirmation can arrive two different ways at once (a bank notification or the guest's own browser checking status), so the system is built to never double-confirm the same booking. Coupons and per-guest limits stay accurate even when a hold expires or a payment fails. Behind it sits one admin dashboard, with different access levels for different staff roles, covering every property, booking, and payment.
Outcome
A full booking journey - browse, hold, pay, confirm - with abandoned holds cleaned up automatically so availability stays accurate, plus one admin dashboard covering properties, bookings, and payments.
What We Built
Key features
Public site
- 01Villa listings with filtering, galleries, and a live price breakdown
- 02Coupon codes, phone+OTP auth, and booking history with reviews
- 03Owner-onboarding and corporate-offsite inquiry forms
Admin dashboard
- 01Property management with drag-and-drop photo ordering
- 02Booking management, refunds, KYC checks, and owner payouts
- 03Occupancy and revenue reports plus a full activity log
- 04Role-based access across admin, operations, and sales
Gallery
More of the build


Tech Stack
What it's built with
- Next.js
- React
- PostgreSQL
- Prisma
- PhonePe
- Inngest
Worth knowing
Booking holds expire on their own after 5 minutes - a durable background job wakes at the exact moment to release it, with a backup sweep running every couple of minutes just in case.