Skip to content
← All work

Multi-vendor appointment marketplace

Slotly

A booking marketplace for salons, clinics and consultants where the database itself makes double-booking impossible.

Discuss a similar project
  • SaaS
  • Next.js 15
  • Drizzle
  • Neon
  • Razorpay

Overview

Slotly (formerly BookEasy) solves high-friction local service booking. It bridges walk-ins, online payments and staff shifts with a hard guarantee against overbooking — enforced in PostgreSQL, not just in application code.

How it works

  1. 1Browse vendor
  2. 2Slot generation
  3. 3GiST-locked insert
  4. 4Razorpay / pay at venue
  5. 5Inngest reminders
  6. 6GST invoice

What I built

No double-bookings

PostgreSQL btree_gist exclusion constraints on overlapping tsranges physically prevent concurrent double-bookings.

Smart slot picker

Evaluates staff shifts, buffers, business holidays and existing reservations to offer only real slots.

Customer portal

Live appointment tracker, WhatsApp booking pass, .ics calendar sync, and self-service reschedule/cancel that respects each host's policy.

Host suite

Calendar, daily agenda, staff scheduling, and analytics including a 7-day peak-demand heatmap, utilisation and AOV.

Payments & GST

Razorpay checkout with signed webhooks, pay-at-venue fallback, and GST invoices with automatic CGST + SGST split.

Mobile API

Headless /api/v1 endpoints for categories, vendors, slot generation and booking — all behind the same database locks.

Engineering decisions

  • Put the no-overlap rule in the database so two simultaneous requests can never both succeed.
  • Store every time in UTC and project to the viewer's IANA timezone at the edge.

Stack

Monorepo
Turborepo (web, db, core, email, ui packages)
Frontend
Next.js 15 (App Router, Server Actions), React 19, TypeScript, Tailwind
Data
Neon PostgreSQL, Drizzle ORM, btree_gist
Payments
Razorpay Orders API, signed webhooks
Jobs & email
Inngest, Resend
Quality
Vitest

Need something like this?

I can build a version of this for your product, your data and your stack.

Start a project