Skip to main content
Docs

15. Deploy system

Cloudflare Pages as hosting backend.

DBCloudflare Pages APIhtml-generatorAPIWeb SPAUserDBCloudflare Pages APIhtml-generatorAPIWeb SPAUserloop[until terminal]Click DeployPOST /api/projects/:id/deployCooldown-Check (60s)ownership + project-configgenerateStaticSite(db, projectId)SELECT pages, translationsper Page+Language: pipeline + renderBLAKE3-Hash per FileSiteFile[]POST /accounts/:id/pages/projects/:cfName/deployment{ status: building }{ status: success, url }INSERT deployments{ deploymentId, url }
DBCloudflare Pages APIhtml-generatorAPIWeb SPAUserDBCloudflare Pages APIhtml-generatorAPIWeb SPAUserloop[until terminal]Click DeployPOST /api/projects/:id/deployCooldown-Check (60s)ownership + project-configgenerateStaticSite(db, projectId)SELECT pages, translationsper Page+Language: pipeline + renderBLAKE3-Hash per FileSiteFile[]POST /accounts/:id/pages/projects/:cfName/deployment{ status: building }{ status: success, url }INSERT deployments{ deploymentId, url }

Cloudflare Project Name is deterministically generated: cms-{first6UserId}-{first6ProjectId}.

Custom Domain: POST .../domain { domain: "example.com" } → API creates CF Zone, returns CNAME record. User sets DNS, calls POST .../domain/verify. Status sync: pendingactive when DNS propagates.

Rollback: Cloudflare Pages keeps the last N Deployments. POST .../deployments/:id/rollback sets an old one as active.#