comms-scheduling
Doodle logo

Should I self-host Doodle?

YESworth it

Rallly does the one Doodle job — find a time that works for everyone — with a clean UI, no ads around your poll, and no $10.95/mo for what is fundamentally a form with dates on it.

The math (nothing hidden, including your time)

Doodle (Pro, per seat)$10.95/mo
VPS share + storage−$0.30/mo
Your maintenance: 10 min/mo at $20/h−$3.33/mo
Net saving$7.32/mo
Setup: 12 min measured (one-time)$4.00
Break-even0.5 months
Markup Index (price ÷ real self-host cost)3.0×

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

What you lose

  • Doodle's booking-page features beyond group polls (Cal.com covers those, separately verified)

What you're paying Doodle for

  • group scheduling polls
  • availability collection
  • calendar integration
Rallly running from the boot-verified compose file
Rallly, running from the compose file on this page — screenshot from our verified instance, not marketing material.

Ranked alternatives

Send a group a link, let them tick the times that work, and pick the winner, with no cap on how many people answer.

lukevella/rallly · ★ 5,209 · last commit 0d ago · AGPL-3.0

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 Raspberry Pi.

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

# Rallly — meeting polls; node app + postgres. Sidecar probe (slim image, no curl).
services:
  rallly:
    image: lukevella/rallly:latest
    container_name: rallly
    restart: unless-stopped
    depends_on:
      rallly-db:
        condition: service_healthy
    environment:
      DATABASE_URL: postgres://rallly:rallly@rallly-db:5432/rallly
      SECRET_PASSWORD: change-me-please-0123456789abcdef
      NEXT_PUBLIC_BASE_URL: http://localhost:3004
    ports:
      - "3004:3000"

  probe:
    image: busybox:stable
    network_mode: "service:rallly"
    depends_on:
      - rallly
    command: sh -c 'while true; do sleep 30; done'
    healthcheck:
      test: ["CMD-SHELL", "nc -z localhost 3000 || exit 1"]
      interval: 5s
      timeout: 5s
      retries: 60
      start_period: 25s
  rallly-db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: rallly
      POSTGRES_PASSWORD: rallly
      POSTGRES_DB: rallly
    volumes:
      - rallly-db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U rallly"]
      interval: 5s
      timeout: 5s
      retries: 12
volumes:
  rallly-db:

Want a guided install instead? caniselfhostit.com/doodle 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 12 min · AI assistant: claude-code (allowed & stated)

What broke

  • Boot to healthy measured at 64s on the 2GB reference env
Full timed log
# Doodle — verdict log

- **Date:** 2026-08-10
- **Verdict:** YES — worth it
- **Protocol:** v1 (2GB reference env, Docker preinstalled, AI assistant: claude-code)

## Setup evidence

- Compose: `compose/doodle-rallly.yml`
- Boot to healthy: **64s** measured this session
- Setup time recorded: 12 min (boot + configuration to first working workflow)

## What broke / notes

- Boot to healthy measured at 64s on the 2GB reference env

## The call

Rallly does the one Doodle job — find a time that works for everyone — with a clean UI, no ads around your poll, and no $10.95/mo for what is fundamentally a form with dates on it.

Verdict history

  • 2026-08-10: unscored → YES — Initial verdict: Rallly does the one Doodle job — find a time that works for everyone — with a clean UI, no ads around your pol.