ByteStudioBack to home
Portfolio

04 / 06

StayFinder

A full booking lifecycle that keeps availability honest automatically.

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

  • 01
    Villa listings with filtering, galleries, and a live price breakdown
  • 02
    Coupon codes, phone+OTP auth, and booking history with reviews
  • 03
    Owner-onboarding and corporate-offsite inquiry forms

Admin dashboard

  • 01
    Property management with drag-and-drop photo ordering
  • 02
    Booking management, refunds, KYC checks, and owner payouts
  • 03
    Occupancy and revenue reports plus a full activity log
  • 04
    Role-based access across admin, operations, and sales

Gallery

More of the build

StayFinder — screenshot 1
StayFinder — screenshot 2

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.

Want something built like this?

Tell us what you're trying to run, and we'll tell you what it takes to build it.