What you’ll build
A consulting booking app where clients browse available consultants, book time slots through an embedded calendar, pay for premium sessions, and receive email confirmations and reminders. The finished product includes user authentication, consultant profiles, calendar-based scheduling, Stripe payments for paid sessions, transactional email notifications, and one-click deployment to Netlify. By the end of this recipe you will have a production-ready booking platform that you can customize, rebrand, and launch as your own service.Tech stack
| Service | Role |
|---|---|
| Next.js + TypeScript | Frontend framework and API routes |
| Cal.com or Calendly | Calendar scheduling, availability management, and booking widgets |
| Supabase | User authentication, consultant profiles, booking records, and reviews |
| Stripe | Payment processing for paid consultation sessions |
| Resend | Booking confirmation emails, reminders, and cancellation notices |
| Netlify | Production deployment and hosting |
Architecture overview
Here is how the pieces connect:- A visitor signs up using Supabase Auth (email/password or social login) and creates a client profile.
- The client browses consultant profiles stored in Supabase, filtering by specialty, availability, and price.
- The client selects a consultant and picks a time slot using an embedded Cal.com or Calendly scheduling widget.
- If the session is a paid consultation, the client is redirected to a Stripe Checkout page to complete payment before the booking is confirmed.
- Once the booking is confirmed, Resend sends a confirmation email to both the client and the consultant with meeting details and calendar invite.
- Before the session, Resend sends a reminder email 24 hours in advance.
- The entire app is deployed to Netlify with environment variables configured for each service.
How long does it take?
| Phase | What you’re building | Estimated time |
|---|---|---|
| Setup | Project, Supabase, profiles | 5-10 minutes |
| Scheduling | Calendar, booking management | 10-15 minutes |
| Payments | Stripe for paid sessions | 5 minutes |
| Notifications | Email confirmations | 5 minutes |
| Launch | Deploy, go live | 5 minutes |
| Total | Complete booking app | 30-40 minutes |
Step-by-step build
Start a new project
Open rocket.new and create a new project. Give Rocket a detailed description of the app so it scaffolds the right pages, layout, and navigation from the start.
Connect Supabase
Go to Integrations in your Rocket project and connect your Supabase account via OAuth. Create a new Supabase project (or select an existing one), then ask Rocket to set up the database schema.
Rocket handles the Supabase connection through OAuth, so you never need to copy API keys manually. Your credentials are encrypted and stored securely.
Add user profiles and authentication
Wire up authentication so users can create accounts and sign in, then build profile management for both clients and consultants.
Integrate calendar scheduling
Connect a scheduling service so clients can see availability and book time slots directly from the consultant’s profile.
Cal.com offers a free self-hosted option, while Calendly provides a managed service with a generous free tier. Both work well for embedding scheduling widgets.
Add booking management
Build dashboards for both clients and consultants to view and manage their bookings.
Connect Stripe for paid sessions
Go to Integrations and connect Stripe using your test mode API keys. Then set up payment processing for paid consultation sessions.
Add email notifications with Resend
Go to Integrations and connect Resend by pasting your API key. Then set up transactional emails for key booking events.
Resend provides a free tier of 100 emails per day, which is plenty for development and early launch. You can upgrade later as your booking volume grows.
Customization ideas
Once the base booking platform is running, here are ways to extend it.Add video call integration
Add video call integration
Generate unique video meeting links automatically when a booking is confirmed so clients and consultants can meet virtually without any extra setup.
Add team scheduling
Add team scheduling
Let consulting firms create a team page where clients can book with any available consultant in the group, or pick a specific team member.
Add recurring appointments
Add recurring appointments
Let clients book a recurring series of sessions (weekly, biweekly, or monthly) with their preferred consultant.
Add a waitlist
Add a waitlist
When a consultant’s slots are fully booked, let clients join a waitlist and get notified automatically when a slot opens up.
Add reviews and ratings
Add reviews and ratings
Let clients rate and review consultants after completed sessions to build trust and help other clients make informed decisions.
Troubleshooting
Calendar widget not syncing or showing availability
Calendar widget not syncing or showing availability
Symptoms: The scheduling widget shows no available slots, or bookings made through the widget do not appear in your database.Fix:
- Verify that the consultant’s
calendar_linkin the database is correct and points to a valid Cal.com or Calendly event type. - Check that the consultant has configured their availability in Cal.com or Calendly. If no availability windows are set, the widget will show no slots.
- Confirm that the Cal.com webhook is registered and pointing to your app’s API endpoint. Go to Cal.com > Settings > Developer > Webhooks and verify the URL.
- Test the webhook by creating a booking manually and checking whether the
bookingstable in Supabase updates.
Timezone mismatches between client and consultant
Timezone mismatches between client and consultant
Symptoms: Bookings appear at the wrong time for one party, or clients see availability in a timezone that does not match their location.Fix:
- Make sure all timestamps in the
bookingstable use thetimestamp with time zonetype, not plaintimestamp. - Cal.com and Calendly automatically detect the client’s timezone and convert availability. Verify that the consultant’s timezone is set correctly in their scheduling tool settings.
- On the booking confirmation page and in emails, always display the time in both the client’s and consultant’s timezones to avoid confusion.
- Store the client’s timezone in their profile and use it when displaying booking times in the dashboard.
Double bookings or overlapping sessions
Double bookings or overlapping sessions
Symptoms: Two clients book the same consultant at the same time, causing a scheduling conflict.Fix:
- If you are using Cal.com or Calendly, the scheduling tool handles conflict prevention automatically. Make sure the consultant has only one event type active with the correct duration and buffer time.
- Add a server-side check in your booking API route that queries the
bookingstable for any existing confirmed booking with the same consultant at the overlapping time before creating a new one. - Add a unique constraint or database check in Supabase to prevent duplicate
(consultant_id, scheduled_at)pairs. - If using webhook-based sync, ensure your webhook handler is idempotent and does not create duplicate booking records.
What’s next?
Build a SaaS app
Follow the SaaS recipe to add subscription billing, team workspaces, and admin dashboards.
Build a content site
Create a modern blog with a headless CMS, categories, author pages, and SEO optimization.
Build a lead generation site
Build a landing page with lead capture forms, email nurture sequences, and CRM tracking.

