Open source · MIT

OpenCalendarCalendly, replaced with something you own.

A self-hosted booking page wired to your Google Calendar, with Stripe checkout for the meetings you charge for. One Next.js app, one Postgres database, deployed in about twenty minutes.

Live booking pages

Real Google Calendar availability

Slots come from your actual freebusy, not a copy of it. Add a dentist appointment and that slot disappears.

Paid bookings via Stripe

Put a price on a meeting type and the slot is held while the booker checks out. Abandon it and the hold releases itself.

Meet links, automatically

Every booking creates a calendar event with a Google Meet link and invites the booker — Google's own invite email is the confirmation.

Popup or inline, one script

A button that opens the picker over your page, or the calendar rendered straight into it. Same widget.js, both modes.

No double bookings

Every booking is claimed under a database lock that re-checks your live calendar before it commits. Two people racing for one slot: one wins, one gets a clean error.

Never a silent drop

If someone pays and the calendar write fails, you get an alert email and a retry button — the booking is never lost quietly.

Run your own

Clone it, point it at a free Postgres database, connect your Google account and deploy. The README walks the whole path.

git clone https://github.com/nchemb/opencalendar.git
cd bookkit && npm install
cp .env.example .env   # fill in the blanks
npx prisma migrate deploy
npm run dev
Read the setup guide