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 devRead the setup guide