Skip to content
Leads & bookings
Launch pack

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-payments
GitHub

1 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(),
All skills
  1. 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.

  2. 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.

  3. 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.

  4. 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.