# How to Vibe Code Your Own Calendbook (and Stop Paying for It)

> Simple online appointment scheduling

- Site: https://calendbook.com
- Category: SaaS / Scheduling
- Verdict: **Solid side project** (75/100 vibecodeable)
- Estimated effort: 2-3 weekends

## Verdict

You can build a personal scheduling clone in a couple of weekends, but calendar API synchronization and timezone edge cases will test your patience.

Calendbook is a classic CRUD-plus-API-integration SaaS product. Building the UI, database models, and booking pages is straightforward with modern AI tooling. However, you will inevitably hit friction when wrestling with Google Calendar OAuth token refreshes, handling recurring slot calculations across disparate timezones, and debugging webhook retries for payment confirmations. Since the real product costs roughly $2/month, you are building this entirely for control or learning, not financial arbitrage.

### What you can't replicate

- Their exact SEO footprint and AppSumo marketplace distribution channel
- Existing user reviews and trust signals

## What it does

An online appointment scheduling SaaS product that serves as a low-cost, lightweight alternative to market leaders like Calendly.

### Core features

- User profile and custom booking link slug management
- Event type creation (duration, pricing, custom questions)
- Google Calendar bidirectional sync and conflict detection
- Google Meet automated video link generation
- Availability matrix calculation engine (buffer times, working hours)
- Public booking flow for clients to select slots
- Email notifications and reminders
- Stripe payment integration for paid appointments

## The business

### Pricing

- Free Plan: $0/mo
- Premium Plan: $2/mo

### Funding

$406K raised.
- July 2021: Accelerator/Incubator
- April 2026: Public grant funding
Investors: Sistema Puglia, NAStartUp

Founded 2019.
Team size: ~6 employees.

## The hard parts

- Bidirectional calendar sync ensuring zero double-bookings across multiple connected provider accounts
- Complex availability matrix math factoring in timezone conversions, custom date overrides, and buffer intervals
- Webhook reliability and retry queues for video link creation and payment confirmations

## How to vibe code Calendbook

### Prerequisites

- Node.js (free): Runtime environment for Next.js and TypeScript development
- GitHub (free): Source control and deployment pipeline integration
- Google Cloud Console Account (free): Required to set up OAuth credentials for Google Calendar and Google Meet integrations

### Recommended AI tools

- Claude Code: Best-in-class multi-file agentic coding tool for scaffolding full-stack features and fixing complex API integration logic in the terminal
- Cursor: Ideal for fine-tuning frontend Tailwind layouts and reviewing code diffs interactively

### Stack

- Frontend: Next.js (React) with Tailwind CSS and shadcn/ui
- Backend: Next.js Server Actions & API Routes
- Database: Turso (SQLite at the edge)
- Auth: better-auth
- Payments: Stripe
- Other: Resend for transactional emails, Google Calendar API for availability sync

### Hosting

- Cloudflare (Hosting the Next.js application frontend and API routes via edge deployment): $0-5/mo

### Build guide

1. **Project Scaffolding & Database Schema** — Initialize a Next.js project with Tailwind CSS, configure Turso SQLite with Drizzle ORM, and set up the core data models for Users, EventTypes, Bookings, and ConnectedCalendars.

```
Create a new Next.js TypeScript project using App Router and Tailwind CSS. Initialize Drizzle ORM configured for Turso SQLite. Write the database schema for: users (id, email, slug, timezone), event_types (id, userId, title, description, duration, price, isVisible), bookings (id, eventTypeId, clientName, clientEmail, startTime, endTime, status, paymentId), and connected_accounts (id, userId, provider, accessToken, refreshToken, expiresAt). Implement the database migration files and connection helper.
```

2. **Authentication with better-auth** — Integrate better-auth for secure user registration and login, linking user sessions to the database schema.

```
Configure better-auth in the Next.js application to support email/password authentication and Google OAuth login. Create sign-in and sign-up pages using Tailwind CSS and shadcn/ui components. Ensure that upon user registration, a default user record with a unique scheduling slug is generated in the Turso database.
```

3. **Google Calendar OAuth & Sync Setup** — Build the OAuth flow to link external Google accounts and fetch calendar free/busy availability data.

```
Implement API routes to handle Google Calendar OAuth connection flow. Store encrypted access and refresh tokens in the connected_accounts table. Write a service function that calls the Google Calendar Freebusy API given a time range and a user's calendar ID, correctly handling token expiration and automatic token refresh logic.
```

4. **Availability Calculation & Public Booking Page** — Create the public scheduling UI where clients can view open slots and book appointments.

```
Build a dynamic public booking page at /[username]/[eventSlug] that renders a calendar date picker and available time slots. Write an availability calculation utility that merges user working hours, buffer times between meetings, existing bookings in the database, and busy intervals fetched live from the user's connected Google Calendar. Ensure all slot computations correctly account for client and host timezones.
```

5. **Booking Creation & Google Meet Integration** — Handle appointment form submissions, write bookings to the database, and auto-generate Google Meet video conference links.

```
Implement the booking submission server action that validates selected slot availability to prevent double-booking. When a booking is confirmed, use the Google Calendar API to insert an event into the host's calendar with conferenceDataVersion set to create an integrated Google Meet video link. Handle error cases gracefully if the API call fails.
```

6. **Email Notifications & Reminders** — Integrate Resend to send confirmation emails and meeting reminders to both hosts and clients.

```
Integrate the Resend API to send automated transactional emails. Create email templates using React Email for booking confirmations containing appointment details, calendar invite files (.ics), and Google Meet links. Trigger confirmation emails immediately upon successful booking creation.
```

7. **Stripe Payments for Paid Events** — Add Stripe Checkout integration so hosts can charge for specific event types before confirming bookings.

```
Implement Stripe Checkout integration for event types that have a non-zero price. Update the public booking flow so that selecting a slot redirects the client to a Stripe Checkout session. Create a Stripe webhook handler endpoint to listen for checkout.session.completed events, securely verify the signature, and finalize booking creation in the database only after successful payment.
```

### Cost vs paying

**Starting costs (one-time):**

- Custom Domain (optional): $12/yr
- AI Coding Assistant (Claude Pro / Cursor): $20
- Total: ~$32 one-time

**Ongoing costs (monthly):**

- Cloudflare / Turso / Resend Free Tiers: $0/mo
- Total: $0/mo

- Paying for the SaaS instead: $2/mo
- Build time: 16-24 hours
- AI tool credits: $20
- Break-even: Never (built for personal control and learning)

## Sources

- [Calendbook Official Website](https://calendbook.com)
- [PitchBook Profile - Calendbook](https://pitchbook.com)
- [AppSumo - Calendbook Listing](https://appsumo.com)