Skip to content

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 Worker

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.

The Admin Worker talks to the API Worker over HTTPS from the browser. They are deployed and rolled back independently.

Website ──▶ @kenresoft-cms/astro ──▶ Public API ──▶ API Worker ──▶ D1 / R2
  • Updating the CMS does not update your website.
  • Updating @kenresoft-cms/astro does not update the CMS.
  • Your website never connects to D1 directly.
  • 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.
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