I built a Calendly alternative on Cloudflare Workers with no framework and no build step
Описание и применение
Calendo – это приложение для планирования, работающее полностью на Cloudflare Workers и D1 SQLite без фреймворков и сборки. Оно включает AI‑агента, использующего те же функции, что и UI, и ограничивает расходы на AI. Демонстрационная страница позволяет тестировать бронирование без реальных записей.
Задача
Build a free, low‑cost scheduling app that can run on a minimal stack and still support AI‑powered scheduling.
Результат
Calendo demonstrates that a scheduling platform can be built with minimal tooling, low cost, and maintainable code, while integrating an AI agent that respects user limits and safety constraints.
Рабочий процесс
- 1. Deploy a Cloudflare Worker with a single entry module that exports only functions. 2. Store data in D1 SQLite. 3. Serve plain HTML/CSS/JS for the frontend. 4. Implement AI agent that calls the same backend functions as UI buttons. 5. Enforce per‑user daily AI message limits via a D1 table. 6. Provide a demo page that runs booking logic but aborts before DB insert and network calls. 7. Write ~1,200 unit tests, including in‑memory SQLite schema tests, HTTP smoke tests, and browser tests. 8. Run CI tests with a 5‑second timeout to catch slow tests before deployment.
Доказательства
Everything runs on Cloudflare Workers. The database is D1, which is SQLite. The frontend is plain HTML, CSS and JavaScript. There is no React, no bundler and no build step.
The agent calls the same functions the dashboard buttons call. Each action (create event type, change availability, cancel a booking, and so on) is a tool the model can use.
Each user gets a daily allowance of AI messages, stored in a small D1 table keyed by user, day and kind.
The demo page at calendo.dev/demo runs the full booking code path, including slot checks, and stops just before the database insert. No emails, webhooks or calendar calls go out.
There are about 1,200 unit tests, plus an HTTP smoke test and browser tests.
- Дата записи: 2026-10-24T19:11:27.072Z