Appointlet logo

How to vibe codeAppointlet

Simple scheduling for client-obsessed professionals

appointlet.com

SaaS & Productivity

68/ 100
Solid side project

The verdict: can you vibe code Appointlet?

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.

Estimated effort: 2-3 weeks of focused development and debugging

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

Founded

2012

Raised

Team

Micro-team (~4 employees)

Cheapest paid tier

$0/mo

What Appointlet 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

Funding

Unknown / bootstrapped

Pay vs build, cumulative

Break-even at month 4 — after that, every month is money kept.

The hard parts of vibe coding Appointlet

  • 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 vibecode Appointlet

Prerequisites

  • Node.jsFree

    Runtime environment for building and running the full-stack Next.js web application

  • GitHubFree

    Version control and repository hosting for your codebase

  • Google Developer AccountFree

    Required to configure OAuth credentials and test Google Calendar API synchronization

AI coding tools

Recommended stack

FrontendNext.js (App Router) with Tailwind CSS and shadcn/ui
BackendNext.js Server Actions and API Routes in TypeScript
DatabaseNeon Serverless Postgres via Prisma ORM
Authbetter-auth
PaymentsStripe (Optional for personal use)
OtherResend for transactional confirmation emails, Luxon / date-fns-tz for robust timezone handling

Hosting & infrastructure

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

Build guide

  1. 01Project 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. 02Availability & 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. 03Public 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. 04Booking 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. 05Calendar 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. 06Host 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 for Appointlet

What will you build it with?

Est. 4.5M in / 1.2M out tokens· Includes access to introductory usage of the default model with dynamic rate limits.$0

Starting total with Claude Code$0 one-time

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 Appointlet

$10/mo (Premium Plan)

Your time to build

25-35 hours

AI tool credits

$20 (One month of Claude Pro / Cursor)

Break-even

Free forever (personal self-hosted build)

Vibe code Appointlet: FAQ

Can you vibe code Appointlet yourself?
Solid side project — 68/100 vibecodeable. Build a personal subset for a solid side project, but keep paying if you rely on bulletproof Google/Microsoft calendar webhook reconciliation.
How long does it take to vibe code Appointlet?
2-3 weeks of focused development and debugging — roughly 25-35 hours of hands-on time with an AI coding agent.
How do you build your own Appointlet?
Scoped to personal use: Next.js (App Router) with Tailwind CSS and shadcn/ui on the front, Next.js Server Actions and API Routes in TypeScript behind it, Neon Serverless Postgres via Prisma ORM for data. Follow the 6-step build guide on this page — each step has a paste-ready prompt for an AI coding agent.
How do you code your own Appointlet without being an expert?
Use an AI coding tool (Claude Code or Cursor) and work in small steps: scaffold, data model, core screens, then deploy. Realistic effort: 2-3 weeks of focused development and debugging. The prompts on this page are written so the AI does the heavy lifting.
How much does it cost to vibe code Appointlet instead of paying?
About ~$32.00 one-time to start and $0.00/mo to run, versus $10/mo (Premium Plan) for Appointlet. Break-even: Free forever (personal self-hosted build).
What stack should you use to vibe code Appointlet?
Next.js (App Router) with Tailwind CSS and shadcn/ui; Next.js Server Actions and API Routes in TypeScript; Neon Serverless Postgres via Prisma ORM; plus Resend for transactional confirmation emails, Luxon / date-fns-tz for robust timezone handling.

Sources

Alternatives & community builds

All alternatives →