Architecture
Cloudflare account├── API Worker Hono: public API, admin API, Better Auth, forms, cache, rate limits, cron├── Admin Worker React/Vite dashboard (Workers Static Assets, no server code)├── D1 structured data└── R2 media files
Your website (separate project) ──HTTP──▶ API WorkerSingle site per deployment
Section titled “Single site per deployment”Each deployment backs exactly one website and has its own Cloudflare resources. Kenresoft does not operate a shared multi-tenant backend. Another client gets another deployment of the same code.
Two Workers
Section titled “Two Workers”The Admin Worker talks to the API Worker over HTTPS from the browser. They are deployed and rolled back independently.
CMS and website are separate
Section titled “CMS and website are separate”Website ──▶ @kenresoft-cms/astro ──▶ Public API ──▶ API Worker ──▶ D1 / R2- Updating the CMS does not update your website.
- Updating
@kenresoft-cms/astrodoes not update the CMS. - Your website never connects to D1 directly.
Cloudflare features used
Section titled “Cloudflare features used”- Rate limiting bindings for auth, recovery, forms and public content.
- Cache API for public API responses, invalidated when content changes.
- Cron Triggers every 5 minutes for scheduled publishing and webhook retries.
Packages
Section titled “Packages”| Package | Role |
|---|---|
@kenresoft-cms/create |
CLI: scaffold a CMS, scaffold an Astro site, connect an existing Astro site |
@kenresoft-cms/astro |
Runtime client for your Astro site (framework-agnostic fetch wrapper at its core) |
@kenresoft-cms/contracts |
Shared Zod schemas for the API contract |