{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "dennisklappe--cloudmeet",
    "name": "CloudMeet",
    "tagline": "Single-owner Calendly alternative that deploys to Cloudflare's free tier from GitHub secrets.",
    "shortTagline": "Single-owner Calendly alternative",
    "description": "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.",
    "capabilities": [
      "adaptable"
    ],
    "vertical": "scheduling-staffing",
    "alternativeTo": [
      "Calendly"
    ],
    "shape": "business-app",
    "formFactor": "web-app",
    "executionModel": "deterministic",
    "provenance": "unknown",
    "codeStack": {
      "languages": [
        "TypeScript"
      ],
      "frameworks": [
        "SvelteKit",
        "Tailwind CSS",
        "Cloudflare Workers"
      ],
      "packageManager": "npm",
      "database": [
        "Cloudflare D1"
      ],
      "hostingTarget": [
        "cloudflare-pages",
        "cloudflare-workers"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/dennisklappe/CloudMeet",
        "owner": "dennisklappe",
        "name": "CloudMeet",
        "license": "MIT",
        "stars": 523,
        "lastCommit": "2026-07-02"
      }
    ],
    "interface": null,
    "operability": null,
    "recommendedWrapper": null,
    "reach": null,
    "editions": [
      {
        "name": "Free",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/dennisklappe/CloudMeet"
          },
          {
            "kind": "one-click",
            "url": "https://github.com/dennisklappe/CloudMeet#quick-start",
            "command": "GitHub Actions: Deploy to Cloudflare Pages"
          }
        ]
      }
    ],
    "skills": {
      "kind": "none",
      "paths": [],
      "install": null,
      "note": "No SKILL.md, Claude Code plugin, or skills install target in the repo."
    },
    "customization": {
      "summary": "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.",
      "envVars": [
        "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"
      ],
      "configFiles": [
        ".env.example",
        "wrangler.toml",
        "schema.sql"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 15
    },
    "useWhen": [
      "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"
    ],
    "accounts": [
      "Cloudflare",
      "Google Cloud (OAuth client)",
      "GitHub (Actions deploy)",
      "Emailit (optional)",
      "Microsoft Entra (optional)"
    ],
    "active": true,
    "lastActivity": "2026-07-02",
    "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"
    ],
    "fit": {
      "adaptable": 3,
      "operable": 0
    },
    "evidence": {
      "formFactor": "README: runs on Cloudflare Pages with a Worker cron; svelte.config.js and wrangler.toml in repo root",
      "executionModel": "no model SDK or AI feature in README",
      "operability": "no API, MCP or CLI documented; repo tree has functions/, workers/, src/ only",
      "effort": "README secrets table and .env.example name every variable; deployment is a GitHub Action",
      "editions": "README: MIT, runs entirely on Cloudflare's free tier",
      "active": "shortlist pushedAt 2026-07-02"
    },
    "confidence": {
      "formFactor": 0.9,
      "executionModel": 0.95,
      "operability": 0.85,
      "effort": 0.95,
      "reach": 0,
      "editions": 0.9
    },
    "openQuestions": [
      "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": [
      {
        "url": "https://github.com/dennisklappe/CloudMeet",
        "foundBy": "sourcing:scheduling-staffing:community"
      },
      {
        "url": "https://meet.klappe.dev/cloudmeet",
        "foundBy": "sourcing:scheduling-staffing:community"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "unverified",
      "reason": "Adaptable only: complete, owner-documented secret surface under MIT with a one-click deploy; no agent interface.",
      "disputed": []
    },
    "url": "apps/dennisklappe--cloudmeet.html",
    "coverage": null,
    "paid": false,
    "source": "research/verified/dennisklappe--cloudmeet.json"
  }
}
