Cal.ai
AI-Powered Phone Calls for Automated Scheduling
Voice AI / Scheduling SaaS
The verdict
Build a personal subset using Vapi and Next.js, but beware of telephony latency and webhook reliability.
Cloning the core value loop of Cal.ai—triggering an AI phone call that talks to a lead and books a time on your calendar—is entirely doable for a solo developer by abstracting the hard telephony and voice streaming layers through a platform like Vapi or Retell AI. The single biggest trap is managing webhook state between the voice agent's real-time transcript output and your database's booking slots, especially when handling abrupt caller dropouts or voicemail greetings.
Estimated effort: 2-3 weeks of focused work
What you can't replicate
- The massive open-source ecosystem and native integrations of the parent Cal.com platform
- Proprietary enterprise security compliances and carrier direct-routing contracts
Founded
2021
Raised
$25M–$56M
Team
~44
Cheapest paid tier
$0/mo
What Cal.ai does
AI-powered conversational phone agent that automates appointment scheduling, reminders, confirmations, and lead follow-ups via natural phone calls.
Core features
- AI Voice Agent Telephony Integration (SIP/Twilio/Vapi)
- Real-time speech-to-text and text-to-speech websocket streaming
- Dynamic prompt configuration (tone, personality, style)
- Calendar event sync (Google Calendar / Outlook)
- Automated triggers for bookings, reminders, and no-shows
- Call transcript storage and sentiment analysis logs
- Credit usage tracking per minute of phone interaction
- Workflow trigger builder for scheduling events
The business
Pricing
- Individual$0/mo
- TeamCustom
Funding
$25M–$56M from Factorial Capital, Flex Capital
Pay vs build, cumulative
Break-even at month 18 — after that, every month is money kept.
The hard parts of vibe coding Cal.ai
- Achieving sub-second round-trip latency in realtime voice streaming to prevent awkward pauses
- Handling bidirectional conversational interruptions gracefully without breaking prompt state
- Managing robust phone number provisioning, webhooks, and voicemail detection via telecom APIs
- Two-way calendar delta sync with strict timezone and conflict management
How to vibecode Cal.ai
Prerequisites
Node.jsfree
Required runtime for modern full-stack web development
GitHubfree
Source control and deployment pipeline connection
Vapi AI AccountFree tier available
Voice agent orchestration infrastructure for handling STT, LLM, and TTS streaming
Twilio AccountPay-as-you-go (~$1/mo per number)
Phone number provisioning and SIP calling connectivity
AI coding tools
Recommended stack
| Frontend | Next.js (App Router, Tailwind CSS, shadcn/ui) |
|---|---|
| Backend | Next.js API Routes / Server Actions |
| Database | Supabase (PostgreSQL with pgvector and Row Level Security) |
| Auth | Supabase Auth |
| Payments | Skipped for personal use |
| Other | Vapi SDK for voice agent triggers, Google Calendar API for slot synchronization, Lucide React for iconography |
Build guide
01Project Scaffolding and Database Schema
Initialize the Next.js project with Tailwind CSS, shadcn/ui, and configure Supabase database tables for users, triggers, contacts, and call logs.
Create a new Next.js 16 application using the App Router, TypeScript, and Tailwind CSS. Initialize shadcn/ui components including buttons, dialogs, cards, inputs, and tables. Set up a Supabase client configuration file using environment variables for SUPABASE_URL and SUPABASE_ANON_KEY. Create SQL migration scripts for tables: 'profiles' (id, email, credits), 'contacts' (id, user_id, name, phone_number), 'workflows' (id, user_id, event_type, prompt_template), and 'call_logs' (id, user_id, contact_id, status, transcript, duration_seconds, created_at). Implement robust TypeScript types for all database models and verify clean compilation.02Authentication and Dashboard Shell
Implement Supabase authentication and build the main dashboard layout with navigation, credit counter, and active workflow views.
Build Supabase email/password authentication flows including login, signup, and auth middleware protected routes in Next.js. Create a polished main dashboard layout using Tailwind CSS featuring a sidebar navigation (Dashboard, Workflows, Call Logs, Settings), a top header displaying user credits remaining, and a responsive main content area. Add a dashboard home view summarizing total calls made, completed bookings, and recent call log snippets with placeholder data states.03Calendar Integration and Event Slots
Integrate Google Calendar API to allow users to connect their calendars, fetch available time slots, and insert booking events directly.
Implement Google Calendar OAuth connection flow in Next.js, securely storing encrypted tokens in Supabase. Build a backend service utility that fetches free/busy calendar time slots using the Google Calendar API based on a specified date range and user timezone. Create an API endpoint /api/calendar/slots that returns available scheduling slots, and another endpoint /api/calendar/book that inserts a confirmed meeting event directly into the user's connected calendar.04Workflow Triggers and Vapi AI Voice Agent Integration
Create a workflow trigger system and integrate the Vapi API to programmatically dispatch AI phone calls to leads.
Build a workflow configuration UI where users can define trigger events (e.g., 'New Lead Form Submitted', 'Meeting Reminder 24h prior') and customize the AI voice agent prompt, tone, and system instructions. Implement a backend service that makes an authenticated API request to Vapi AI (vapi.ai) to initiate an outbound phone call via Twilio. Ensure the payload includes the contact's phone number, customized prompt variables, and a webhook URL callback for call updates.05Webhook Receiver, Transcript Logging, and Call Analytics
Handle incoming webhooks from Vapi to record call transcripts, calculate duration, deduct credits, and trigger calendar bookings upon successful calls.
Create a secure API route /api/webhooks/vapi to receive real-time webhook events from Vapi AI, including call-started, call-ended, transcript-update, and function-call events. When a call completes successfully with intent to book, parse the extracted date/time from the transcript and invoke the calendar booking service. Store the complete call transcript, duration, sentiment score, and status in the 'call_logs' table, and deduct corresponding credits from the user's balance. Build a Call Logs page in the frontend to display transcript histories with audio playback links and status badges.06UI Polish, Credit Management, and End-to-End Testing
Add credit bundle purchasing simulation screens, polish UI states with loading spinners and toast notifications, and test the full voice trigger flow.
Build a credit management and settings page where users can view credit consumption history and simulate purchasing credit bundles. Add comprehensive error handling, toast notifications using Sonner, loading skeletons for asynchronous dashboard data, and empty states across all pages. Write integration tests for the workflow trigger and webhook handling pipeline using Jest to verify robust error recovery.
Cost vs paying for Cal.ai
What will you build it with?
Starting total with Claude Code~$1.15 one-time
Starting costs (one-time)
- Vapi AI AccountFree tier (pay-as-you-go usage)
- Twilio Phone Number$1.15 one-time/monthly
Total~$1.15 one-time
Ongoing costs (monthly)
- Vercel + Supabase$0/mo (Free tiers)
- Twilio/Vapi Voice UsagePay-as-you-go per call minute
TotalUsage-based (~$0.15-0.30/min)
Paying for Cal.ai
Usage-based ($0.29/min)
Your time to build
25-35 hours
AI tool credits
$20 (Claude Pro)
Break-even
N/A (Built for personal use / learning)
Sources
Vibecoded copycats
All copies →Loading…