PromptHub
Back to Blog
Developer Tools Open Source

dennisklappe/CloudMeet: Open-Source Scheduler on Cloudflare's Free Tier

B

Bright Coding

Author

11 min read 137 views
dennisklappe/CloudMeet: Open-Source Scheduler on Cloudflare's Free Tier

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.

Comments (0)

Comments are moderated before appearing.

No comments yet. Be the first to share your thoughts!

All tools