Content · 3 / 23
Writing
A rich-text editor with tables, callouts, columns and media, that flags accessibility problems while you write.
Four routes, one night
We boarded in Vienna at 21:40 and woke up somewhere past Cologne, to coffee in a paper cup.
What it costs
What it costs
| Route | Departs | Fare |
| Vienna — Brussels | 21:40 | €64 |
| Zurich — Amsterdam | 20:12 | €79 |
Timetables and fares are on each operator’s site — click herethe ÖBB Nightjet timetable.
3 accessibility issues 2 accessibility issues 1 accessibility issue
A heading skips a level. Someone navigating by heading hears a section that isn’t there — go one level at a time. Blocks saving · WCAG 1.3.1
A table has no header cells. Without them a screen reader reads the values but cannot say what any of them means. Blocks saving · WCAG 1.3.1
A link’s text doesn’t say where it goes. Links are often read out of their sentence, as a list — “click here” is then indistinguishable from every other one. Worth fixing · WCAG 2.4.4
How it works
- 01
Insert tables, callouts, columns, dividers and media from one menu.
- 02
Headings, table headers and link text are checked as you type.
- 03
A problem that blocks saving says so. The rest are marked worth fixing.
- Blocks
- Tables, callouts, columns, media
- Checks
- Heading levels, header cells, link text
- Count
- Words and characters, live
In depth · For writers and editors
An editor that stays out of the way
Rich text is stored as a document, so the editor can catch a broken heading order or a vague link while somebody is still typing.
Rich text is a document
A rich-text value is the editor’s node tree, stored as jsonb. That lets the platform check heading order, table header cells and link text — WCAG requirements — with the same rules in the editor and on the server.
Under the hood
Minimum and maximum length count the text, not the markup, so bolding a word costs nothing.
A legacy HTML body still reads and validates, and is rewritten as a document the next time somebody saves.
An editor surface: a toolbar, a heading, a paragraph, a callout, and a two-column table with header cells.
The screen itself
- Edit in place, or expand
- Rich text is edited where it sits in the form; Expand opens it full width.
- A form shaped to the content
- Each content type gets its own fields, in the order and sections it declares.
- Tabs you can link to
- Switching tabs changes the address, so Back and language switches keep your place.
- Media from the library
- A library asset brings its alt text with it; the editor loads previews, not originals.
- Read-only means read-only
- Without edit permission, editing is removed rather than greyed out, and text stays selectable.
Included
- Headings, lists, quotes and dividers
- Tables, with real header cells
- Callouts for warnings and asides
- Column layouts
- Images, resizable in place
- Video embeds
- Links
- Alt text on every image, with a “decorative” option
- A language marker on a quoted passage
Questions
Do I need to know anything technical?
No. Writing happens in an ordinary browser form. Only defining content types involves code, which an engineer does once.
Can two people edit the same page?
Yes, and the second save wins — but the first save is still a version in the timeline, so nothing is lost.
Can I search inside a body?
Free-text search reaches the body as a plain text match. Filters do not offer rich text.