Booking logic is well understood: read each person's busy times, offer the free slots, pick a host in turn and send everyone an invite. An agent can build that for a small team in a weekend, especially if it reads busy times from each member's secret iCal address and emails .ics invites, which avoids Google's OAuth review. Two-way calendar sync, a video link created per booking, reminders and routing forms are what the seat price pays for. And Cal.com's own open-source edition, now called Cal.diy, dropped team features in April 2026, so self-hosting it won't replace this plan.
Before you buildIf only one person takes bookings, Cal.com Free already does it with no usage limits.
Build me a team booking app to replace Cal.com Teams. Requirements: - Node.js 22 + TypeScript: Fastify with server-rendered pages and a little vanilla JS, `npm start` on http://localhost:4950. Public pages at /book/:eventSlug; /admin behind a single password from .env. - Storage: better-sqlite3 in ./data/booking.db. - Members: name, email, time zone, weekly working hours and the secret iCal address of their calendar. Fetch every feed each 5 minutes with node-ical, expand recurring events and cache the busy blocks. - Event types: duration, buffers before and after, minimum notice, daily cap, a fixed video URL, and a mode: round-robin (least recently booked free host, optional weights), collective (every chosen member free) or one host. - Booking page: slots in the guest's time zone (Luxon), then name, email and notes. Re-check availability on submit so two guests can't take one slot. - On booking: email the host(s) and guest an .ics invite (the `ics` package) via nodemailer with SMTP settings in .env, with cancel and reschedule links that free the slot again. - No guest accounts, no telemetry, local-first. - Out of scope: writing events into Google or Outlook through OAuth, SMS reminders, payments and routing forms. - README: where each member finds their secret iCal address, exposing the booking pages through a tunnel, and a warning that ICS feeds can lag behind recent calendar changes.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Cal.com Teams.
Add Google Calendar write-back to the booking app in this folder. Requirements: - Each member connects once through OAuth (googleapis, client id and secret in .env, scope calendar.events); store refresh tokens in SQLite, encrypted with a key from .env. - On booking, create the event on the host's calendar with the guest invited; on cancel or reschedule, update or delete it. - Use freebusy for availability when a member is connected, ICS otherwise. - README warning: while the Google Cloud app is in Testing, refresh tokens expire after 7 days, so publish the app or expect weekly reconnects.
Add routing forms to the booking app in this folder. Requirements:
- Build a form at /r/:formSlug with text, select and number questions.
- Rules map answers to an event type or a subset of hosts ("company size >
50 -> senior team"), with a default route.
- Pass the answers into the booking notes and the invite description.
- Log every submission, including people who never booked.
- Update the README.Add reminders to the booking app in this folder. Requirements: - Email the guest and host 24 hours and 1 hour before each meeting from the existing worker, with the video link and a reschedule link. - Optional SMS through Twilio when TWILIO_* keys are in .env and the guest gave a phone number. - Never send a reminder twice; record sends in SQLite. - Update the README.
For a sales or support team, one double-booked or lost meeting costs more than a seat, so they pay for calendar sync that just works, fair lead distribution and routing straight from a form. Recruiters lean on collective events to get several interviewers into one slot without an email thread.
Estimate · The app itself costs nothing to run. A small VPS for an always-on booking page and a transactional email service add a few dollars a month at most. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0/user | $0/user | 1 user; unlimited event types and calendars, email and SMS notifications, 100+ apps, Stripe and PayPal payments, mobile app. |
| Teams | $16/user | $12/user | 1 team with shared availability, round-robin, managed and collective event types, recurring events, routing forms, booking analytics, no Cal.com branding. |
| Organizations | $37/user | $28/user | Unlimited sub-teams, company subdomain, SAML SSO and SCIM, compliance reports, role-based permissions. |
| Enterprise | custom | — | Dedicated onboarding, SLA, HRIS and directory integrations, dedicated database. |
The Free plan is for one person, with unlimited event types and calendars but none of the team features.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: Two-way sync that writes bookings into Google and Outlook calendars, Video links created per booking for Zoom, Meet or Cal Video.
About $16 a month on the Teams plan per seat, $192 a year (checked 2026-10-13).
Two-way sync that writes bookings into Google and Outlook calendars; Video links created per booking for Zoom, Meet or Cal Video; Routing forms and CRM-based host assignment; Workflows with SMS and WhatsApp reminders; Booking analytics, the mobile app and 100+ integrations. If any of those matter to you, keep paying.
Yes: Cal.diy (open source), Easy!Appointments (open source), Rallly (open source).