dennisklappe/CloudMeet: Open-Source Scheduler on Cloudflare's Free Tier
Developers and small teams need meeting scheduling without recurring SaaS costs or vendor lock-in. Commercial tools like Calendly charge monthly fees, store data on proprietary infrastructure, and offer limited customization. For teams already using Cloudflare's edge network, the gap between "free infrastructure" and "paid scheduling software" feels increasingly artificial.
dennisklappe/CloudMeet closes that gap. It's an open-source meeting scheduler that runs entirely on Cloudflare's free tier — Workers, Pages, and D1 — with native Google Calendar and Outlook Calendar integration. The project has accumulated 507 GitHub stars and 57 forks since its release, with active development continuing through July 2026. Built in TypeScript under the MIT License, it targets developers who want infrastructure they control and costs they can predict.
This article breaks down what dennisklappe/CloudMeet actually delivers, how to deploy it, and where it fits against established alternatives.
What is dennisklappe/CloudMeet?
dennisklappe/CloudMeet is an open-source meeting scheduling application designed as a direct alternative to Calendly. It is maintained by Dennis Klappe and hosted at https://github.com/dennisklappe/CloudMeet. The project sits at the intersection of three active technical trends: edge-computing deployment models, open-source SaaS alternatives, and calendar API integration.
The core architecture is Cloudflare-native. The application runs on Cloudflare Workers for serverless compute, Cloudflare Pages for static hosting, and Cloudflare D1 for SQLite-compatible relational storage. This matters because Cloudflare's free tier includes generous allocations for all three services — Workers at 100,000 requests/day, Pages with unlimited static requests, and D1 with 5 million rows read per day. For individual professionals, consultancies, and small agencies, this translates to zero ongoing infrastructure costs.
The project is written in TypeScript, which provides type safety across the Cloudflare Workers runtime and frontend components. The MIT License permits commercial use, modification, and redistribution without restriction.
Relevance is tied to timing. Calendar scheduling remains a universal pain point, and the proliferation of remote work has intensified demand for automated booking systems. Simultaneously, developer skepticism toward subscription SaaS has grown, driven by pricing changes, API deprecations, and data sovereignty concerns. dennisklappe/CloudMeet addresses both trends: it solves the scheduling problem while keeping data and infrastructure under user control.
The 507-star count (as of the last commit on July 2, 2026) indicates modest but genuine community interest — enough to suggest active maintenance and real-world usage, without the hype inflation of viral repositories.
Key Features
dennisklappe/CloudMeet's feature set focuses on practical scheduling workflows rather than breadth for its own sake:
Dual Calendar Integration: The application connects to both Google Calendar and Outlook Calendar. Users can operate with Google alone, Outlook alone, or both simultaneously. When both are connected, availability checking spans calendars across providers — critical for professionals who maintain separate work and personal calendars or transition between organizations.
Automatic Meeting Link Generation: Upon booking confirmation, CloudMeet creates video conference links through Google Meet or Microsoft Teams automatically. This removes the manual step of generating and pasting meeting URLs, a common friction point in self-hosted scheduling tools.
Configurable Availability and Event Types: Administrators define working hours and create multiple event durations — the README explicitly mentions 30-minute and 1-hour options as examples. This covers standard consultation formats without overwhelming users with configuration complexity.
Email Notification System: The platform sends confirmation, cancellation, and reminder emails. A dedicated dashboard enables or disables specific email types and customizes their content. This granular control matters for users who prefer minimal notification noise or need to comply with organizational communication policies.
Optional Email Reminders via Cron Worker: A Cloudflare Worker runs every five minutes to dispatch 24-hour and 1-hour pre-meeting reminders. The CRON_SECRET parameter secures this endpoint against unauthorized triggering.
One-Click Deploy and Update: GitHub Actions workflows handle both initial deployment and subsequent updates. The "Sync and Deploy" workflow pulls upstream changes and redeploys automatically, reducing maintenance overhead for non-specialist users.
Admin Authentication via Google OAuth: Access is restricted to a single admin email specified at deployment time. This simplifies authentication without requiring a full user management system.
Use Cases
Independent Consultants and Freelancers: Solo professionals billing hourly benefit from eliminating Calendly's monthly fee while retaining professional booking functionality. The custom domain support allows branded scheduling pages (book.yourname.com) without additional platform costs.
Small Agencies with Mixed Calendar Environments: Teams where some members use Google Workspace and others use Microsoft 365 can centralize scheduling without forcing calendar migration. The dual-provider availability checking prevents double-booking across organizational boundaries.
Privacy-Conscious Organizations: European users subject to GDPR or healthcare entities with HIPAA considerations gain data residency control. All data lives in Cloudflare's infrastructure under the user's account, not a third-party SaaS vendor's database.
Developer Portfolio and Side Projects: The repository serves as a reference implementation for Cloudflare Workers patterns — OAuth flows, D1 database operations, cron triggers, and Pages deployment. Developers studying edge-native application architecture can inspect production-grade TypeScript code.
Cost-Sensitive Nonprofits and Education: Organizations with unpredictable funding benefit from zero marginal cost per user. The MIT License permits modification for specific accessibility or localization requirements without licensing negotiations.
Installation & Setup
Deployment requires five sequential steps. The README provides exact commands and URLs; reproduce them precisely:
Step 1: Create Cloudflare API Token
Navigate to Cloudflare API Tokens. Click Create Token, select the Edit Cloudflare Workers template. Under Account Resources, select your account. Click + Add more and add Account → D1 → Edit. Continue to summary, create the token, and copy it for Step 4.
Step 2: Setup Google OAuth
Visit Google Cloud Console. Create a new project, then enable the Google Calendar API at APIs & Services > Library. At APIs & Services > Credentials, create an OAuth 2.0 Client ID with application type Web application. Add the authorized redirect URI:
https://YOUR-PROJECT.pages.dev/auth/callback
Replace YOUR-PROJECT with your Cloudflare Pages project name. Multiple redirect URIs are permitted — add both default and custom domains if applicable. Save the Client ID and Client Secret.
Step 3: Create Your Repository
Click Use this template > Create a new repository on the GitHub repository page.
Step 4: Add Repository Secrets
Go to Settings > Secrets and variables > Actions > New repository secret. Add each secret individually:
| Secret | Required | Description |
|---|---|---|
CLOUDFLARE_API_TOKEN |
Yes | From Step 1 |
CLOUDFLARE_ACCOUNT_ID |
Yes | From Cloudflare dashboard right sidebar |
ADMIN_EMAIL |
Yes | Your Google email (sole authorized login) |
JWT_SECRET |
Yes | Random string from generate-secret.vercel.app/32 |
APP_URL |
Yes | Your app URL (https://YOUR-PROJECT.pages.dev or custom domain) |
GOOGLE_CLIENT_ID |
Yes | From Step 2 (ends with .apps.googleusercontent.com) |
GOOGLE_CLIENT_SECRET |
Yes | From Step 2 |
EMAILIT_API_KEY |
No | Emailit API key for booking emails |
EMAIL_FROM |
No | From address (e.g., noreply@yourdomain.com) |
CRON_SECRET |
No | Secures reminder endpoint (generate) |
MICROSOFT_CLIENT_ID |
No | For Outlook Calendar integration |
MICROSOFT_CLIENT_SECRET |
No | For Outlook Calendar integration |
Step 5: Deploy
Navigate to Actions > Deploy to Cloudflare Pages > Run workflow > Run workflow. The application deploys to https://YOUR-PROJECT.pages.dev.
Custom Domain (Optional)
After initial deployment, add your domain at Cloudflare Dashboard > Pages > cloudmeet > Custom domains. Update the APP_URL secret, modify the Google Cloud Console redirect URI to https://yourdomain.com/auth/callback, and re-run the deploy workflow.
Real Code Examples
The README contains one explicit code block for local development. Reproduce it exactly:
cp .env.example .dev.vars # Add your credentials
npm install
npm run db:init
npm run dev
Explanation: The .dev.vars file stores local environment variables for Cloudflare Wrangler's development server. npm run db:init initializes the D1 database schema locally. npm run dev starts the Wrangler dev server with hot reloading. This workflow mirrors production behavior without requiring live Cloudflare credentials during development.
The README does not contain additional code examples for API usage, configuration files, or deployment scripts. The GitHub Actions workflows referenced in the documentation (.github/workflows/deploy.yml and .github/workflows/sync.yml) are implied to exist but their contents are not excerpted in the README. Users needing to customize CI/CD behavior should inspect these files directly in the repository.
For the Outlook Calendar integration, the README specifies required Microsoft Graph permissions without providing implementation code:
Calendars.ReadWrite
User.Read
OnlineMeetings.ReadWrite # for Teams meeting links
These permissions are added through the Azure Portal at API permissions > Add a permission > Microsoft Graph > Delegated permissions. The OnlineMeetings.ReadWrite permission specifically enables automatic Microsoft Teams link generation, paralleling the Google Meet integration.
Advanced Usage & Best Practices
Cron Security: The CRON_SECRET is documented as optional but recommended. Without it, the reminder endpoint accepts any request, creating a minor denial-of-service vector (malicious actors could spam reminder emails). Generate a random string and add it before production use.
Email Deliverability: The optional Emailit integration handles transactional email. For production reliability, verify your sending domain with Emailit and configure SPF/DKIM records. The EMAIL_FROM parameter should use a domain you control — noreply@yourdomain.com rather than a personal Gmail address — to avoid spam folder placement.
Database Limits: Cloudflare D1's free tier allows 5 million rows read per day. For a scheduling application with moderate usage, this is generous. Monitor read patterns if you implement custom analytics or frequent availability polling; excessive reads could trigger limits during high-traffic periods.
Update Strategy: The "Sync and Deploy" workflow simplifies updates but carries risk. Review upstream changes before automatic deployment, particularly if you've modified local code. The README notes that sync failures may require a personal access token with Contents and Workflows permissions — create this token at github.com/settings/tokens/new if needed.
OAuth Redirect URI Management: When adding custom domains retroactively, remember to update redirect URIs in both Google Cloud Console and Azure Portal. Mismatched URIs produce opaque authentication failures that are tedious to debug.
Comparison with Alternatives
| Feature | dennisklappe/CloudMeet | Calendly | Cal.com (self-hosted) |
|---|---|---|---|
| Hosting Cost | Free (Cloudflare tier) | $10-16/month/user | Free (self-managed) |
| Infrastructure Control | Full (your Cloudflare account) | None | Full (your servers) |
| Calendar Providers | Google, Outlook | Google, Outlook, iCloud, others | Extensive via plugins |
| Deployment Complexity | Low (GitHub Actions) | None | Medium-Docker↗ Bright Coding Blog required |
| Customization | Code-level (MIT License) | Limited UI theming | Code-level (AGPL) |
| Meeting Links | Google Meet, Teams | Native + integrations | Extensive |
| License | MIT | Proprietary | AGPL-3.0 |
Calendly remains the zero-effort choice for non-technical users who prioritize convenience over cost and control. Its broader calendar support (iCloud, Exchange) and established reliability are genuine advantages.
Cal.com offers deeper feature breadth and a larger ecosystem, but self-hosting requires Docker infrastructure and the AGPL license imposes distribution obligations that MIT does not. Teams with dedicated DevOps↗ Bright Coding Blog resources may prefer Cal.com's maturity; those wanting minimal maintenance overhead may prefer dennisklappe/CloudMeet's Cloudflare-native simplicity.
dennisklappe/CloudMeet occupies a specific niche: developers comfortable with Cloudflare who want scheduling without infrastructure bills or license complexity. It trades ecosystem breadth for deployment simplicity and predictable costs.
FAQ
What does dennisklappe/CloudMeet cost to run? Zero on Cloudflare's free tier. The README explicitly states it "runs entirely on Cloudflare's free tier."
Can multiple administrators log in?
No. The ADMIN_EMAIL secret restricts access to a single Google account.
Does it work without Google Calendar? Partially. Outlook Calendar alone is supported, but admin authentication still requires Google OAuth.
How do I update to the latest version? Run the "Sync and Deploy" GitHub Action workflow, or execute "Upstream Sync" and "Deploy to Cloudflare Pages" separately.
Is the MIT License compatible with commercial use? Yes. The MIT License permits commercial use, modification, and redistribution with minimal requirements.
What happens if I exceed Cloudflare's free tier limits? Cloudflare will throttle or reject requests. Monitor usage in the Cloudflare dashboard and upgrade to paid plans if needed.
Can I use a custom domain?
Yes. Add it in Cloudflare Pages settings, update APP_URL, and adjust OAuth redirect URIs.
Conclusion
dennisklappe/CloudMeet delivers precisely what its README promises: a functional, open-source meeting scheduler deployed on Cloudflare's free infrastructure with Google and Outlook calendar integration. It will not displace Calendly for non-technical users or match Cal.com's feature depth. It will, however, eliminate scheduling SaaS costs for developers already invested in Cloudflare's ecosystem, provide code-level customization freedom under the MIT License, and keep calendar data under user control.
The project suits individual professionals, small technical teams, privacy-focused organizations, and developers seeking reference implementations for edge-native TypeScript applications. The 507-star count and active maintenance through mid-2026 suggest sustainable viability without inflated expectations.
If you fit this profile — comfortable with GitHub Actions, familiar with Cloudflare's dashboard, and seeking to replace a monthly scheduling subscription — examine the repository directly at https://github.com/dennisklappe/CloudMeet. The live demo at https://meet.klappe.dev/cloudmeet demonstrates the end-user experience before you commit to deployment.