comms-scheduling
Calendly logo

Should I self-host Calendly?

KINDAworth it if…

Cal.com self-hosted does the booking-page job, but it's the heaviest app in our index and the setup is configuration, not compose. Worth it if you're a team with a server habit; a solo calendar link is cheaper to rent.

The math (nothing hidden, including your time)

Calendly (Standard, per seat)$12.00/mo
VPS share + storage−$2.00/mo
Your maintenance: 20 min/mo at $20/h−$6.67/mo
Net saving$3.33/mo
Setup: 150 min measured (one-time)$50.00
Break-even15.0 months
Markup Index (price ÷ real self-host cost)1.4×

Price: source, checked 2026-08-05. Inputs are stored in git; every number above is derived, never hand-written.

What you lose

  • Managed Google/Microsoft OAuth — self-host means registering your own apps with both, which is most of the real setup time
  • Their deliverability for reminder emails

What you're paying Calendly for

  • booking pages
  • calendar conflict checking (Google/Outlook)
  • reminders/emails
  • team round-robin
Cal.com running from the boot-verified compose file
Cal.com, running from the compose file on this page — screenshot from our verified instance, not marketing material.

Ranked alternatives

Send someone a link, they pick a slot, the invite lands in both calendars, and none of it runs on a domain you are renting.

calcom/cal.diy · ★ 47,409 · last commit 2d ago · AGPL-3.0

Hardware

Runs comfortably on a real VPS (2 GB+).

The tested compose file (our evidence, CI-booted)

# Cal.com — scheduling infrastructure (replaces Calendly). The heaviest single app in our
# index: big image, wants real RAM, and most of the setup time is configuration, not boot.
# Secrets are throwaway test values: openssl rand -base64 32
services:
  calcom:
    image: calcom/cal.com:latest
    container_name: calcom
    restart: unless-stopped
    depends_on:
      calcom-db:
        condition: service_healthy
    environment:
      NEXT_PUBLIC_WEBAPP_URL: http://localhost:3003
      NEXTAUTH_SECRET: 8Yz1kR9nQ2wX5vB7mC4tL6pJ3sD0fG8hK1aN5uE9rT2Y=
      CALENDSO_ENCRYPTION_KEY: 2FduT8qM7xW3kV9zB5nC1sL4pR6jD0gH8fK2aQ5uE7rY=
      DATABASE_URL: postgresql://calcom:calcom@calcom-db:5432/calcom
      DATABASE_DIRECT_URL: postgresql://calcom:calcom@calcom-db:5432/calcom
    ports:
      - "3003:3000"
    healthcheck:
      test: ["CMD-SHELL", "node -e \"fetch('http://localhost:3000/auth/login').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\""]
      interval: 10s
      timeout: 10s
      retries: 60
      start_period: 120s

  calcom-db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: calcom
      POSTGRES_PASSWORD: calcom
      POSTGRES_DB: calcom
    volumes:
      - calcom-pg:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U calcom"]
      interval: 5s
      timeout: 5s
      retries: 12

volumes:
  calcom-pg:

Want a guided install instead? caniselfhostit.com/calendly has AI-agent prompts that assume a bare machine — that's their half of the stool, and it's good.

Verification

Protocol v1 · verified by zernonia on 2026-08-10 · setup measured at 150 min · AI assistant: claude-code (allowed & stated)

What broke

  • Image is enormous — the pull dominated boot time even on a fast link
  • Boots healthy without calendar OAuth configured, but the product doesn't do its job until you register apps with Google/Microsoft — budget the weekend for that, not the compose
Full timed log
# Timed setup log: Calendly → calcom

**Protocol:** v1 · **Verified by:** zernonia · **Date:** 2026-08-10
**Assistant:** claude-code · **Environment:** containerized runner, 2 vCPU class, Docker 29.3 / Compose v5.1

## Timeline

| Step | Time |
|---|---|
| Read upstream docs, draft compose with healthcheck | ~50 min |
| **Boot: all services healthy in 195 s (measured, `compose up --wait`)** | — |
| Endpoint-level workflow check (login/health/API serve) + re-run from clean volumes | ~50 min |
| **Total: ~150 min** | |

Boot and endpoint checks are machine-verified; `setup_min` is the wall-clock total for this
session including authoring, diagnosis and re-runs. Endpoint-level ≠ full human UI workflow —
dispute anything that doesn't reproduce (CONTRIBUTING.md).

## What broke

- Image is enormous — the pull dominated boot time even on a fast link
- Boots healthy without calendar OAuth configured, but the product doesn't do its job until you register apps with Google/Microsoft — budget the weekend for that, not the compose

## Verdict-relevant notes

- Setup ceiling is why this is KINDA, not YES: >2h to a genuinely working booking flow.

Verdict history

  • 2026-08-10: unscored → KINDA — Initial verdict: Cal.com self-hosted does the booking-page job, but it's the heaviest app in our index and the setup is configuration, not compose. Worth it if you're a team with a server habit; a solo calendar link is cheaper to rent.