Brainstorming CMS
A custom editorial CMS: an API in Hono on Cloudflare Workers and an Angular admin, with block editing, autosave, history and preview.

The problem
The editorial team needed to publish guides and articles across several sites without asking for code changes, and with control over who can edit what.
What I built
I built two independent repositories: an API in Hono on Cloudflare Workers (Drizzle, PostgreSQL and an OpenAPI contract) and an Angular admin with a rich-text and block editor.
Outcome
A custom CMS with history, a file library and per-site publishing status.
Decisions that mattered
- 01
The contract rules
Routes are defined with Zod schemas that validate input and generate OpenAPI 3.1. Angular imports a versioned copy of the contract and generates its types from it.
- 02
Autosave without losing changes
It saves after a 1.2-second pause. On a conflict or an error it stops retrying and keeps the local changes.
- 03
Restore without publishing
History restores a version as a draft; what is published doesn’t change until you publish again.
- 04
Access by invitation
A single administrator and editors with permissions. Only the Supabase publishable key reaches the browser.
Technologies
- Angular
- Hono
- Cloudflare Workers
- PostgreSQL
- Drizzle
- OpenAPI
- Supabase
C4 model. The pulsing line is the main path of a request.
Level 1 · who uses the system and what it connects to
Level 2 · the applications and data stores it is made of
Level 3 · the components inside the API
- Person
- System
- Container
- Database
- External
- Main path
- 01Editor
- 02Angular admin
- 03Hono API
- 04PostgreSQL
- 05Per-site publishing