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

> Online calendar coordination and scheduling platform

- Site: https://doodle.com
- Category: Productivity & Scheduling
- Platforms: Web app, iOS app, Android app
- Verdict: **Solid side project** (68/100 vibecodeable)
- Estimated effort: 2-3 weeks of focused development

## Verdict

You can build a fully functional personal clone of Doodle's core polling and booking loops, but navigating external calendar OAuth sync and multi-timezone consensus logic will require disciplined debugging.

Replicating the core value of Doodle—unauthenticated group polls and 1:1 booking pages tied to personal calendars—is entirely feasible for a solo developer using modern AI agents. However, you will inevitably hit friction dealing with the Google and Microsoft Graph calendar APIs, token refreshing, and timezone edge cases where external voters span multiple regions. For personal use or a lightweight utility, building it is a great learning project; if you need production-grade enterprise calendar reliability and SOC 2 compliance, paying for the real product remains the rational choice.

### What you can't replicate

- The 30M active user network effect and brand recognition
- Enterprise SOC 2 Type II and GDPR compliance moats
- Deep native integrations across legacy corporate IT stacks

## What it does

Doodle simplifies scheduling through asynchronous group polls, 1:1 booking links, sign-up sheets, and time intelligence features that coordinate across multiple external calendars.

### Core features

- Multi-calendar bi-directional sync (Google Calendar, Outlook, iCloud)
- Asynchronous group voting state machines with timezone handling
- 1:1 booking pages with custom rules, buffers, and limits
- Sign-up sheets for workshop and event registration with attendee caps
- Automated calendar conflict detection and dead-slot removal
- Automated email notifications, reminders, and deadline enforcement
- Video conferencing link auto-generation (Zoom/Teams/Webex)
- Stripe-powered payment collection for time booking

## The business

### Pricing

- Free: $0 — Basic individual scheduling
- Pro: $11/mo — For solo professionals billed annually
- Team: $8.95/user/mo — For teams billed annually

Founded 2007.
Team size: 115-130+.

## The hard parts

- Bi-directional calendar synchronization without hitting aggressive OAuth rate limits or breaking on recurring events
- Distributed consensus calculation across unauthenticated external participants in conflicting time zones
- Enterprise compliance (SOC 2 Type II, GDPR, SAML/OIDC SSO)

## How to vibe code Doodle

### Prerequisites

- Node.js (free): Required runtime for Next.js development and package management
- GitHub (free): Source code repository and deployment pipeline integration
- Google Developer Account (free): Required to set up OAuth credentials for Google Calendar integration

### Recommended AI tools

- Claude Code: Best-in-class agentic coding tool for scaffolding full-stack applications, handling multi-file database schemas, and iterating through complex business logic.
- Cursor: Ideal AI-native code editor for reviewing visual diffs and fine-tuning frontend UI components and Tailwind layouts.

### Stack

- Frontend: Next.js (React) with Tailwind CSS and shadcn/ui
- Backend: Next.js Server Actions / API Routes
- Database: Turso (SQLite at the edge) via Drizzle ORM
- Auth: better-auth
- Payments: Stripe
- Other: Resend for email notifications, Google Calendar & Microsoft Graph APIs for calendar sync

### Hosting

- Vercel (Hosting the Next.js frontend and serverless API endpoints with zero-config GitHub deployments): $0-20/mo
- Turso (Hosting the relational SQLite database for polls, bookings, votes, and user calendar tokens at the edge): $0/mo

### Build guide

1. **Project Scaffolding & Database Schema Setup** — Initialize the Next.js application with Tailwind CSS and Drizzle ORM connected to Turso, defining tables for users, polls, poll_slots, poll_votes, booking_pages, and bookings.

```
Scramble a new Next.js project using App Router, TypeScript, and Tailwind CSS. Install Drizzle ORM and configure it for Turso (SQLite). Create the database schema with tables: users (id, email, name, password_hash, created_at), polls (id, title, description, organizer_id, duration, deadline, status, created_at), poll_slots (id, poll_id, start_time, end_time), poll_votes (id, poll_slot_id, participant_name, participant_email, vote_status ['yes', 'if_need_be', 'no']), booking_pages (id, user_id, slug, title, duration, buffer_time, hourly_rules), and bookings (id, booking_page_id, guest_name, guest_email, start_time, end_time, status). Set up environment variable handling and include migration scripts.
```

2. **Authentication & Calendar OAuth Integration** — Implement better-auth for user accounts and set up OAuth connectors for Google Calendar and Microsoft Graph to read busy blocks.

```
Implement better-auth in the Next.js application supporting email/password and secure session management. Next, build OAuth integration routes for Google Calendar and Microsoft Outlook (Microsoft Graph API). Store encrypted OAuth access and refresh tokens in a dedicated calendar_connections table linked to the user. Write server utility functions to fetch free/busy calendar intervals for a given date range using the Google Calendar freeBusy endpoint and Microsoft Graph calendar view endpoint, handling token refresh edge cases gracefully.
```

3. **Group Poll Creation & Unauthenticated Voting UI** — Build the organizer flow for creating group polls and the unauthenticated voting interface where participants cast availability votes across time zones.

```
Build the Group Poll creation wizard (/polls/new) where an organizer sets a title, duration, and selects multiple date/time slots, optionally syncing with their calendar availability. Generate a unique shareable link. Build the public unauthenticated voting page (/poll/[id]) where external participants enter their name and email, view proposed time slots converted to their local browser time zone, and click to vote 'Yes', 'If need be', or 'No'. Store votes securely and update aggregate availability grids in real time.
```

4. **Poll Finalization & Calendar Event Booking** — Implement the organizer dashboard view for reviewing poll results, picking the optimal winning time slot, and automatically dispatching calendar invites.

```
Create the organizer poll management dashboard (/polls/[id]) that visualizes a matrix of participants against all proposed time slots, highlighting the slots with the highest consensus. Add a 'Book Event' action button that allows the organizer to select the winning slot, automatically write the meeting event to the organizer's connected Google/Outlook calendar via API, and trigger confirmation emails to all participating voters via Resend.
```

5. **1:1 Booking Pages & Rule Enforcement** — Build personal booking pages with configurable working hours, buffer times, and live conflict checking against the user's primary calendar.

```
Build the 1:1 booking page setup module and public booking interface (/book/[username]/[slug]). The public page must fetch available slots by combining the user's weekly working hours rules, applying buffer times, and subtracting busy blocks fetched live from their connected Google/Outlook calendars. Implement the booking submission form that creates a calendar event on the host's primary calendar, prevents double-booking race conditions, and sends instant email confirmations with meeting details.
```

6. **Notifications, Reminders, and Polish** — Add background jobs or cron endpoints for automated meeting reminders, deadline enforcement, and UI polish with shadcn/ui components.

```
Implement automated email notification workflows using Resend. Build a cron endpoint secured with a secret token that checks for polls nearing their deadlines and sends reminder emails to non-responders, as well as 24-hour reminder emails before confirmed bookings. Refine the UI across all views using shadcn/ui components, ensuring responsive layouts for mobile and desktop browsers, error boundaries, and clear loading states.
```

### 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 / Turso / Resend free tiers: $0.00/mo
- Total: $0.00/mo

- Paying for the SaaS instead: $15/mo (Pro)
- Build time: 35-50 hours
- AI tool credits: $20 (1 month Claude Pro / Cursor)
- Break-even: 0 months (free hosting tier vs $15/mo Pro plan)

## Sources

- [Doodle Official Website](https://doodle.com)
- [Doodle Security & Infrastructure Documentation](https://doodle.com/en/features/security)
- [Wikipedia - Doodle Website History](https://en.wikipedia.org/wiki/Doodle_(website))