Booking & Payments
Let customers book a time and pay online, without a phone call.
- Cal.com
- Stripe
- Deposits
Install
npx skills add webrenew/skills --skill launch-booking-payments1 file · 217 lines · any agent that reads SKILL.md
Use it when
- Customers must call to book an appointment
- No-shows cost the business money
- You sell a fixed-price service or package
What your agent delivers
- The right action for the business: book, quote or pay
- Verified Cal.com and Stripe webhooks that update the lead
- Deposits and reminders that cut no-shows
Source files
Read every line before you install. Copy or download one file.
SKILL.md
217 lines
---
name: launch-booking-payments
description: >
Let a small business's customers book a time and pay online without a phone call, and keep
every booking and payment in sync with the lead. Use this skill for appointment booking,
scheduling embeds, Cal.com, deposits, Stripe Checkout, Payment Links, no-show protection,
booking and payment webhooks, and when the user mentions "let customers book online",
"take a deposit", "sell a package", or booking conversion.
---
# Booking and Payments: Book and Pay Without a Phone Call
**RULE: The server decides what a customer pays, and a verified webhook decides that they
paid or booked. Never trust a price, amount or "success" that comes from the browser.**
## 1. Pick the right action for the business
| Business | Main action | Tool |
|---|---|---|
| Fixed-length appointments (salon, clinic, consultant, lessons) | Book a time | Cal.com (embed or link) |
| Appointments with no-show risk | Book a time + deposit | Cal.com with Stripe payment, or Stripe Checkout then booking |
| Jobs that need a look first (trades, renovations) | Request a quote | Form (`launch-lead-capture`), then book a visit |
| Fixed-price products or packages | Pay now | Stripe Checkout or Payment Links |
| Recurring service (cleaning, lawn care, memberships) | Subscribe | Stripe Checkout in `subscription` mode |
Do not force booking on a business that must quote first. A calendar that offers slots the
owner cannot keep creates angry customers.
## 2. Booking with Cal.com
- **Embed inline on the page** for the highest completion; a pop-up is fine on a busy page.
A plain link to the Cal.com page works when an embed is not possible.
- **Prefill** name and email when the visitor came from a lead form, so they do not type twice.
- **Pass attribution** in metadata (UTM source and campaign, the lead id) so the booking
links back to the lead and the channel.
- Ask only the questions the appointment needs. Add buffer times and a minimum notice period
so the owner is not surprised by a booking in 20 minutes.
- Send reminders 24 hours and 2 hours before. Reminders cut no-shows more than anything else.
### Verify the webhook, then update the lead
Cal.com signs the raw body with the webhook secret (HMAC SHA-256, hex) in the
`x-cal-signature-256` header.
```ts
// app/api/webhooks/cal/route.ts
import { createHmac, timingSafeEqual } from "node:crypto"
import { z } from "zod"
import { markBookingCancelled, markBookingRescheduled, markLeadBooked } from "@/lib/leads"
// Only the fields this route uses. Unknown fields are ignored.
const calEvent = z.object({
triggerEvent: z.string(),
payload: z.object({
uid: z.string().min(1),
rescheduleUid: z.string().min(1).optional(),
startTime: z.string().optional(),
attendees: z.array(z.object({ email: z.string() })).default([]),
metadata: z.object({ leadId: z.string().optional() }).optional(),
Related skills
All skills- 09
Lead Capture
Launch packlaunch-lead-capture
Short forms that convert, and a pipeline that never loses a lead.
Short forms that convert, and a pipeline that never loses a lead.
- 10
Speed to Lead
Launch packlaunch-speed-to-lead
Reply to every lead in minutes, and follow up until they book or say no.
Reply to every lead in minutes, and follow up until they book or say no.
- 01
Technical SEO
Growth & marketingseo-technical
Make each page clear to search engines. Give them a path to every link.
Make each page clear to search engines. Give them a path to every link.
- 02
Local SEO
Launch packGrowth & marketinglaunch-local-seo
Get found by customers nearby, in local search and on Google Maps.
Get found by customers nearby, in local search and on Google Maps.