01Context
Before this project the content lived in Django admin, stored as HTML. In 2023 I built the replacement: an internal platform with its own CMS and a proper editor, plus a way to carry everything already published across without losing any of it.
02What I built
Two pieces. A proprietary CMS on Quasar: one admin app built around Editor.js — a block editor, so a page is a list of typed blocks rather than a blob of markup. And a Node microservice that turned the existing HTML into Editor.js JSON, block by block, so what had been written in Django admin opened in the new editor as if it had been written there.
03Architecture
Three parts: the Quasar admin as the front end; Editor.js as the content format — structured JSON, one typed block per element; a Node service as a one-way converter from HTML into that format. What had to be true for “no content loss” to hold: every HTML construct had to map to a block, and anything the converter could not map had to surface rather than disappear. Keeping the conversion in its own service is what made that checkable, rather than leaving it a side effect of the editor.
04Outcome
The migration went through in full: everything that had lived in Django admin was carried into the new CMS with no content lost. Content moved from raw HTML to structured JSON.