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

> Simple scheduling for client-obsessed professionals

- Site: https://appointlet.com
- Category: SaaS & Productivity
- Verdict: **Solid side project** (68/100 vibecodeable)
- Estimated effort: 2-3 weeks of focused development and debugging

## Verdict

Build a personal subset for a solid side project, but keep paying if you rely on bulletproof Google/Microsoft calendar webhook reconciliation.

Scheduling software looks deceptively simple as a static UI wrapper, but the engineering teeth sink in immediately when dealing with timezone offsets, daylight savings transitions, and calendar API race conditions. If two users attempt to book the exact same slot at the exact same millisecond, your database locking and webhook synchronization with Google Calendar will be severely tested. Furthermore, maintaining OAuth token refresh cycles across multiple upstream providers requires persistent background work. For personal use, building a simplified single-user booking clone is entirely achievable with AI assistance, but replacing the production reliability of a 14-year-old scheduling engine is a serious undertaking.

### What you can't replicate

- 14 years of edge-case bug fixes around calendar sync failures
- Native marketplace partnerships and verified OAuth credentials with Google and Microsoft
- Embedded ecosystem distribution across hundreds of thousands of active organizations

## What it does

Online appointment scheduling software that eliminates back-and-forth friction by connecting customizable booking pages to personal calendars, automated video conferencing, and payment collection.

### Core features

- Customizable booking page builder with branding and logo config
- Availability management with hardcoded breaks and notice windows
- OAuth calendar integration (Google Calendar, Microsoft Graph) for read/write conflict checking
- Slot calculation engine handling cross-timezone calculus and daylight savings
- Booking checkout flow with custom intake forms (text, multiple choice)
- Automated confirmation/reminder emails and calendar invites
- Web conference link auto-generation (Zoom, Google Meet)
- Team scheduling with round-robin distribution and joint availability
- Stripe payment integration for upfront booking fees

## The business

### Pricing

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

Founded 2012.
Team size: Micro-team (~4 employees).

## The hard parts

- Timezone math and DST boundary edge cases when computing available slots across distinct user locations
- Calendar API concurrency: preventing double-booking race conditions when two clients pick the same slot simultaneously
- Strict token management and background webhook reconciliation for upstream calendar providers (Google, Microsoft)
- Relational team routing logic for weighted round-robin and multi-attendee joint availability queries

## How to vibe code Appointlet

### Prerequisites

- Node.js (Free): Runtime environment for building and running the full-stack Next.js web application
- GitHub (Free): Version control and repository hosting for your codebase
- Google Developer Account (Free): Required to configure OAuth credentials and test Google Calendar API synchronization

### Recommended AI tools

- Claude Code: Best-in-class multi-file agentic coding tool for scaffolding full-stack applications and handling complex algorithmic logic like timezone math
- Cursor: Ideal AI code editor for inspecting UI components and refining the booking checkout flow in real time

### Stack

- Frontend: Next.js (App Router) with Tailwind CSS and shadcn/ui
- Backend: Next.js Server Actions and API Routes in TypeScript
- Database: Neon Serverless Postgres via Prisma ORM
- Auth: better-auth
- Payments: Stripe (Optional for personal use)
- Other: Resend for transactional confirmation emails, Luxon / date-fns-tz for robust timezone handling

### Hosting

- Vercel (Hosting the Next.js frontend and serverless API endpoints with zero-config preview deployments): $0/mo (Hobby Tier)
- Neon (Serverless Postgres database hosting supporting atomic transactions for slot locking): $0/mo (Free Tier)

### Build guide

1. **Project Scaffolding & Database Schema** — Initialize a Next.js project with Tailwind CSS, configure Prisma ORM with Neon Postgres, and set up better-auth for user authentication.

```
Create a new Next.js project using App Router, TypeScript, and Tailwind CSS. Initialize Prisma with a Neon PostgreSQL connection string. Design a robust database schema with models for User, EventType (representing meeting types with duration, buffer times, and availability rules), AvailabilitySchedule, Booking, and CustomField. Configure better-auth for email/password and Google OAuth authentication. Ensure all relational foreign keys and indices are properly established for efficient slot querying.
```

2. **Availability & Timezone Calculation Engine** — Build the core scheduling engine that computes available open slots by factoring in host working hours, existing calendar events, and timezone boundaries.

```
Build a robust timezone-aware availability calculation utility in TypeScript using date-fns-tz or Luxon. Create a server action that takes a target date, meeting duration, and host availability rules, then computes all unbooked time slots for that day. Ensure it correctly handles daylight savings time transitions, minimum/maximum notice periods, and hardcoded buffer times before and after meetings. Write unit test cases covering edge cases across UTC and local offsets.
```

3. **Public Booking Page & Intake Forms** — Develop a responsive public-facing booking page where clients can select a date, pick an available slot, and fill out customized intake forms.

```
Develop a dynamic public booking page route at app/[username]/[eventTypeSlug]/page.tsx. The page should fetch the host's configuration, render a calendar date picker, display available time slots computed from Step 2, and present a checkout form capturing custom fields (text inputs, multiple choice). Implement client-side validation using Zod and React Hook Form. Ensure the UI is fully mobile-responsive.
```

4. **Booking Concurrency & Database Locking** — Implement atomic transaction locking on the database to prevent race conditions when two clients attempt to book the exact same slot concurrently.

```
Implement the booking confirmation server action with strict database concurrency safeguards. When a client submits a booking, use Prisma interactive transactions with SERIALIZABLE or repeatable read isolation levels to verify that the target slot has not been locked or booked by another transaction. If a race condition occurs, catch the conflict and return a clear user-facing error prompting them to select a new time.
```

5. **Calendar API Sync & Email Confirmations** — Integrate Google Calendar OAuth and Microsoft Graph API to push confirmed bookings directly to the host's primary calendar and send email notifications.

```
Integrate Google Calendar API OAuth flow allowing hosts to connect their accounts. Upon successful booking creation from Step 4, trigger a server-side routine that calls the Google Calendar API to insert a new event into the host's calendar with meeting details and attendee info. Simultaneously, use Resend to dispatch formatted HTML confirmation emails to both the host and the client. Implement robust error handling and token refresh logic.
```

6. **Host Dashboard & Management UI** — Build a secure dashboard for hosts to view upcoming meetings, filter past bookings, export CSV data, and cancel or reschedule appointments.

```
Create a host dashboard at app/dashboard/page.tsx displaying a list of all upcoming and past bookings with filtering and search capabilities. Implement actions for hosts to cancel or reschedule appointments, which should automatically release the slot and notify attendees via Resend. Add a button to export all booking records as a CSV file. Secure the route behind better-auth session checks.
```

### Cost vs paying

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

- AI Coding Assistant (Claude Pro / Cursor): $20.00
- Custom Domain (Optional): $12.00/yr
- Total: ~$32.00 one-time

**Ongoing costs (monthly):**

- Vercel Hobby Hosting: $0.00
- Neon Serverless Postgres: $0.00
- Resend Email API (Free tier): $0.00
- Total: $0.00/mo

- Paying for the SaaS instead: $10/mo (Premium Plan)
- Build time: 25-35 hours
- AI tool credits: $20 (One month of Claude Pro / Cursor)
- Break-even: Free forever (personal self-hosted build)

## Sources

- [Appointlet Homepage Scraped Content](https://appointlet.com)
- [Appointlet FAQs Scraped Content](https://appointlet.com/faq)
- [PitchBook Appointlet Company Profile](https://pitchbook.com/profiles/company/78385-45)