# CloudMeet

Single-owner Calendly alternative that deploys to Cloudflare's free tier from GitHub secrets.

CloudMeet is a meeting scheduler with a public booking page, Google and Outlook calendar checks, Meet or Teams links, event types, working hours and email reminders. It runs on Cloudflare Pages, Workers and D1; the Adopter forks the template, adds a dozen repository secrets, and a GitHub Action deploys it. There is no API or agent interface.

Alternative to: Calendly

- Capabilities: adaptable
- Vertical: scheduling-staffing
- Shape: business-app
- Form factor: web-app
- Execution model: deterministic
- Provenance: unknown (recorded, never ranked)
- Repo: https://github.com/dennisklappe/CloudMeet (MIT), 523 stars, last commit 2026-07-02
- Last activity: 2026-07-02
- Page: apps/dennisklappe--cloudmeet.html
- JSON: apps/dennisklappe--cloudmeet.json

## Use it when

- I'm a consultant who wants a booking link on my own domain without paying for Calendly or running a server
- I already live in Cloudflare and Google Workspace and want the scheduler to sit there too

## Gotchas

- One admin only: ADMIN_EMAIL is the sole login, so this is a personal scheduler, not a multi-provider booking system
- Without CRON_SECRET the reminder endpoint is publicly callable
- Google OAuth app in testing mode needs the redirect URI updated after the first deploy and again for a custom domain
- No API: an agent can only book through the public page or read the resulting Google Calendar events elsewhere

## Editions

- Free: Free, open source
  - source: https://github.com/dennisklappe/CloudMeet
  - one-click: GitHub Actions: Deploy to Cloudflare Pages

## Adaptable: make it yours

Effort: config-only (15 things to edit)

Use the repo as a template, then set GitHub Actions secrets: CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, ADMIN_EMAIL (the only account that can log in), JWT_SECRET, APP_URL, GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET; optionally EMAILIT_API_KEY and EMAIL_FROM for booking emails, CRON_SECRET to lock the reminder endpoint, and MICROSOFT_CLIENT_ID and MICROSOFT_CLIENT_SECRET for Outlook. wrangler.toml holds the Cloudflare bindings; schema.sql the D1 schema. Availability, event types and email templates are set in the dashboard. Local dev copies .env.example to .dev.vars.

- Env vars: CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, ADMIN_EMAIL, JWT_SECRET, APP_URL, GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, EMAILIT_API_KEY, EMAIL_FROM, CRON_SECRET, MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET
- Config files: .env.example, wrangler.toml, schema.sql
- Prompt files: none
- Accounts you'll need: Cloudflare; Google Cloud (OAuth client); GitHub (Actions deploy); Emailit (optional); Microsoft Entra (optional)

## Code stack

- Languages: TypeScript
- Frameworks: SvelteKit, Tailwind CSS, Cloudflare Workers
- Package manager: npm
- Database: Cloudflare D1
- Hosting target: cloudflare-pages, cloudflare-workers

## Evidence and confidence

- formFactor: README: runs on Cloudflare Pages with a Worker cron; svelte.config.js and wrangler.toml in repo root (confidence 0.9)
- executionModel: no model SDK or AI feature in README (confidence 0.95)
- operability: no API, MCP or CLI documented; repo tree has functions/, workers/, src/ only (confidence 0.85)
- effort: README secrets table and .env.example name every variable; deployment is a GitHub Action (confidence 0.95)
- editions: README: MIT, runs entirely on Cloudflare's free tier (confidence 0.9)
- active: shortlist pushedAt 2026-07-02
- reach:  (confidence 0)

## Open questions

- Does the booking page expose any JSON endpoint under functions/ that an agent could call to list slots?
- Community source: the HN thread reference in the shortlist was not located; treat the GitHub search hit as the origin

## Sources

- https://github.com/dennisklappe/CloudMeet (sourcing:scheduling-staffing:community)
- https://meet.klappe.dev/cloudmeet (sourcing:scheduling-staffing:community)
