A booking page for one person is a modest app: weekly hours, a slot calculator, a form and a confirmation email. The weekend goes on the parts around it: two-way calendar sync that never double-books, daylight-saving edge cases, cancel and reschedule links, and Google's OAuth rules, since a project in Testing status gets refresh tokens that die after 7 days. CalDAV with an app password avoids most of that for iCloud, Fastmail and Nextcloud users, but Outlook and team features stay out of reach.
Before you buildCalendly Free keeps one event type and one calendar. If you only share one kind of meeting, you may not need to pay.
Build me a personal booking page to replace Calendly. Requirements: - Node.js 22 + TypeScript: a Fastify server with server-rendered pages (Eta) and a little vanilla JS. `npm start` serves http://localhost:4850: booking pages at /<event-slug>, admin at /admin. - Storage: better-sqlite3 in ./data/booking.db: event types (slug, title, minutes, buffer before and after, minimum notice, days ahead, daily cap), weekly availability windows with date overrides, and bookings with a unique index on (event type, start) to stop double bookings. - Calendar: read busy times from and write events to one calendar over CalDAV (`tsdav`) with CALDAV_URL, CALDAV_USER and CALDAV_PASSWORD in .env (an iCloud, Fastmail or Nextcloud app password). Put it behind a CalendarProvider interface and add a Google Calendar provider (`googleapis`, OAuth with offline access) as a second implementation. - Slot engine with `luxon`: free slots are availability minus busy times minus existing bookings, computed in the owner's IANA timezone; the invitee sees times in their own timezone with a picker. Add tests that cross both daylight-saving changes of a year. - Booking: name, email and a note; re-check busy times right before saving; create the calendar event; send a confirmation with an .ics attachment (`ics`) through nodemailer SMTP from .env. - Cancel and reschedule links signed with an HMAC token; reminders 24 hours and 1 hour before. - Admin: one password in .env (signed cookie) to edit event types, hours and see bookings. - Single user. No accounts, no telemetry, local-first. Outbound calls: your calendar and SMTP only. - Out of scope: round-robin and team pages, payments, routing forms, SMS, video-call links (use a fixed meeting URL per event type). - README: exposing the page with a tunnel or VPS, and a warning that a Google Cloud project in Testing status issues refresh tokens that expire after 7 days.
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 Calendly.
Extend the booking page in this folder. Requirements: - Allow several read-only busy sources next to the writable calendar: extra CalDAV URLs and Google calendars, configured in .env. - Merge all busy intervals before computing slots, and cache each source for 60 seconds. - If a source fails, still serve slots but show "calendar X unreachable" in the admin page and refuse bookings until every source has answered. - Update the README.
Add video-call links to the booking page in this folder. Requirements: - Per event type, choose: fixed URL, Jitsi (generate https://meet.jit.si/<random-room> per booking), or phone with the number from .env. - Put the link in the calendar event location, the confirmation email and the reminders. - Rescheduling keeps the same link; cancelling drops it. - Update the README.
Add custom questions to the booking page in this folder. Requirements: - Per event type, up to five questions: short text, long text, dropdown or checkbox, each with a required flag. - Store answers with the booking, put them in the calendar event description and the confirmation, and show them in the admin bookings list. - Escape every answer wherever it is rendered. - Update the README.
A booking page is a promise to other people, and a double booking or a missing invite costs more than $12. Calendly's calendar connections and reminders are the part people trust it with, and teams add routing and CRM hooks on top.
Estimate · Runs on a free tunnel or a $5 VPS; SMTP at this volume fits free tiers. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0 | $0 | 1 event type, 1 connected calendar, unlimited one-on-one meetings, customizable booking page, browser extension. |
| Standard | $12 | $10 | Unlimited event types, up to 6 connected calendars, automations and reminders, Stripe and PayPal payments, HubSpot and Mailchimp connections. |
| Teams | $20 | $16 | Everything in Standard plus round-robin and team scheduling, lead routing, centrally managed event types, Marketo, Pardot and Salesforce connections. |
| Enterprise | — | $1,250 | SSO and SAML, domain control, audit log, data deletion API, Salesforce lookup routing, dedicated account support. |
Free gives one event type, one connected calendar and unlimited one-on-one meetings.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: Round-robin, collective and routing-form scheduling for teams, Integrations with CRMs such as HubSpot and Salesforce.
About $12 a month on the Standard plan per seat, $144 a year (checked 2026-10-14).
Round-robin, collective and routing-form scheduling for teams; Integrations with CRMs such as HubSpot and Salesforce; Payment collection at booking through Stripe or PayPal; The mobile app, browser extension and Outlook or Exchange sync; Meeting notes and the AI assistant add-ons. If any of those matter to you, keep paying.
Yes: Cal.diy (open source), Easy!Appointments (open source), Thunderbird Appointment (open source).