Kairo Booking — Next.js 16 Appointment Scheduling App with Stripe Deposits
Give your business a booking page and run the day from one calendar. Kairo Booking is a complete appointment scheduling application built with Next.js 16, React 19, Tailwind CSS 4 and shadcn/ui. Authentication, database, a timezone-aware slot engine, Stripe deposits, emails and a scheduled job are wired together and tested.
LIVE DEMO: https://kairo-booking-demo.vercel.app — create an account, click “Load sample data” and open the booking page from the sidebar.
What it does
- Public booking page at /book/your-name: service → team member (or “anyone available”) → day → time → details. Mobile first
- Slot engine: weekly hours per team member or business hours, time off, buffer between appointments, minimum notice, booking horizon, conflict checks on every path
- Deposits with Stripe Checkout: none, fixed amount, percentage or full price; a signed, idempotent webhook confirms the slot and emails the client
- Client manage page: reschedule or cancel online within the policy window
- Week calendar for the whole team or one member, closed hours shaded, time off blocked, click an empty hour to book by hand
- Appointments: confirm, reschedule, cancel with email, complete, no-show, record payments, internal notes, send a reminder now
- Services (duration, price, color), team (schedule editor, services, time off), customers with visit history, spend and no-shows
- Reports: revenue and bookings by month, by service and by team member, no-show rate
- Settings: booking link, opening hours, slot interval, buffer, notice, horizon, cancellation window, auto-confirm or approval, deposit policy, reminders
Tech stack
Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS 4, shadcn/ui, Better Auth (email + password, Google, GitHub), Drizzle ORM with SQLite locally and Turso in production, Stripe Checkout + webhooks, date-fns-tz, React Email + Resend, Vercel Cron.
Developer experience
- Demo mode: runs right after npm install with no API keys. Deposits are simulated and emails are printed to the console
- Sample salon loader: 5 services, 3 team members with different schedules, customers, past and upcoming appointments, time off
- Every instant stored in UTC and rendered in the business timezone
- 100% TypeScript, zero lint errors, detailed README (setup, Stripe, slot engine, cron, deployment, customization)
- Standard shadcn/ui setup: add any component with npx shadcn add
What you get
Full source code (.zip), README, LICENSE.md, CHANGELOG.md. Free updates: re-download the latest version from your Payhip library.
License
Personal: one end product (personal or commercial). Commercial: unlimited end products. You can't resell or redistribute the template itself.
Support
Questions or a bug? Reply to your purchase email with your order number.