Multi-vendor appointment marketplace
Slotly
A booking marketplace for salons, clinics and consultants where the database itself makes double-booking impossible.
- 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
- 1Browse vendor
- 2Slot generation
- 3GiST-locked insert
- 4Razorpay / pay at venue
- 5Inngest reminders
- 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