Skip to content

skinnyandbald/savvycal-booker

Repository files navigation

SavvyCal-Booker

A lightweight booking page that works with both SavvyCal and Cal.com. Click a time slot link → form opens with that time pre-filled → enter name/email → submit → booked.

Why this exists: Neither SavvyCal nor Cal.com support pre-selecting a specific time via URL. Without this app, clicking a time link takes the recipient to your calendar page where they have to find and click the slot again.

Part of the Propose Times system — the Raycast extension intelligently generates meeting times (batched around existing meetings, respecting your scheduling preferences), and this app handles the one-click booking.

Frame 5

What You'll Need

Vercel account — A hosting service that runs this small web app. Deploying is as simple as clicking a button.

  • 💰 Free — The free tier handles plenty of bookings
  • 🔗 Sign up for Vercel (you can use your GitHub account)

A scheduling account — Either one:


Deploy Your Own

Deploy with Vercel

Setup

  1. Click the "Deploy with Vercel" button above
  2. Add your environment variables:
  3. Deploy!

How It Works

This app provides a simple booking form at /book that accepts URL parameters. The provider parameter determines which calendar service to use.

SavvyCal Parameters

Parameter Required Description
provider No Set to savvycal (default)
slot Yes ISO timestamp of the meeting start time
link_id Yes SavvyCal scheduling link ID
duration No Meeting duration in minutes (default: 30)
tz No Timezone (default: America/New_York)

Cal.com Parameters

Parameter Required Description
provider Yes Set to calcom
slot Yes ISO timestamp of the meeting start time
username Yes Cal.com username
event_slug Yes Event type slug
duration No Meeting duration in minutes (default: 30)
tz No Timezone (default: America/New_York)

Example URLs

SavvyCal:

https://your-app.vercel.app/book?slot=2024-01-15T14:00:00Z&link_id=link_abc123&duration=25&tz=America/New_York

Cal.com:

https://your-app.vercel.app/book?provider=calcom&slot=2024-01-15T14:00:00Z&username=skinnyandbald&event_slug=pow-wow&duration=30&tz=America/New_York

Use with Propose Times (Raycast Extension)

This app is the backend for the Propose Times Raycast extension. The extension generates the meeting time messages; this app handles the one-click booking.

Full Setup

  1. Deploy this app using the button above

  2. Install the Raycast extension:

    git clone https://github.com/skinnyandbald/propose-times.git
    cd propose-times
    npm install
    npm run build

    Then in Raycast: Preferences → Extensions → + → Import Extension → select the folder

  3. Connect them: In Raycast extension preferences, set Booker URL to your Vercel deployment URL (e.g., https://your-app.vercel.app)

  4. Choose your provider: In extension preferences, select either SavvyCal or Cal.com and enter the appropriate credentials.

Now when you generate meeting times, each slot links directly to this booking form.

Local Development

# Install dependencies
npm install

# Copy environment file and add your tokens
cp .env.example .env.local

# Run development server
npm run dev

Tech Stack

  • Next.js 16 (App Router)
  • TypeScript
  • SavvyCal API / Cal.com API v2

License

MIT

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors