Add Editor.js as an opt-in block-based editing mode for QSD, with content stored as typed blocks instead of HTML. Existing Jodit/HTML mode stays as-is. Goal: drag-and-drop structured blocks (callout, image+caption, two-column, embed) rendered through ESP templates.
Why
QSD's editing UX is in a good place after recent work (Jodit, history viewer with restore, inline image upload, media library in flight). The remaining gap is structured content: anything beyond prose+image currently has to be hand-authored HTML, which causes design drift, makes content opaque to programmatic changes, and raises the floor for chapter admins.
Migration
format defaults to "html". Existing QSDs untouched.
- Admins opt in per entry. HTML mode is supported indefinitely as a peer mode, not deprecated.
- "Convert to blocks" action wraps existing HTML in a single
raw_html block as a starting point.
Alternatives considered
Wagtail (too heavy, routing conflicts), GrapesJS (outputs HTML not structured data, commercial pivot), BlockNote/Plate (React dependency), Tiptap (text- not block-oriented). Editor.js is the lightest option that actually delivers structured content.
(Claude helped draft this and I edited it way down)
Add Editor.js as an opt-in block-based editing mode for QSD, with content stored as typed blocks instead of HTML. Existing Jodit/HTML mode stays as-is. Goal: drag-and-drop structured blocks (callout, image+caption, two-column, embed) rendered through ESP templates.
Why
QSD's editing UX is in a good place after recent work (Jodit, history viewer with restore, inline image upload, media library in flight). The remaining gap is structured content: anything beyond prose+image currently has to be hand-authored HTML, which causes design drift, makes content opaque to programmatic changes, and raises the floor for chapter admins.
Migration
formatdefaults to"html". Existing QSDs untouched.raw_htmlblock as a starting point.Alternatives considered
Wagtail (too heavy, routing conflicts), GrapesJS (outputs HTML not structured data, commercial pivot), BlockNote/Plate (React dependency), Tiptap (text- not block-oriented). Editor.js is the lightest option that actually delivers structured content.
(Claude helped draft this and I edited it way down)