Blog article markdown cheatsheet
This page lists the markdown and MDX syntax you can use in the blog article body editor (apps/portal/src/pages/superAdmin/blog/articles/editor/). Click the ? button in the editor toolbar to open this page in a new tab.
How it works
The editor is a Tiptap surface with a markdown mode. The article title is a separate field and becomes the page H1 on the marketing site. Body headings start at H2. The backend builds the table of contents automatically from headings H1–H4 found in the saved MDX body (apps/backend/src/utilities/blog/mdxParse.ts). You do not configure TOC in the CMS.
Supported syntax
Article title (H1)
Set the title above the editor. Do not add# Heading in the body for the main title.
Headings
Text emphasis
Underline is available from the bubble menu in rich-text mode; it serializes to HTML underline in markdown export.
Links
Lists
Blockquote
Code blocks
Fenced blocks with optional language tag:Horizontal rule
Tables (markdown mode only)
Paste or edit GFM pipe tables in Markdown mode. The public blog compiles them to HTML tables.MDX components (in body)
These blocks can appear in saved MDX when inserted or pasted:FAQ (optional, below editor)
Use Add FAQ under the body editor. Questions and answers are saved in frontmatter:Not supported in the editor
These appear in general markdown references (e.g. Markdown Cheatsheet) but are not available in the blog body editor today:- H1 (
#) in body — use the title field - H4–H6 in the WYSIWYG toolbar (H4 may still appear in raw markdown paste; TOC includes levels 1–4 when present in saved MDX)
- Task lists, footnotes, images in body (use cover / SEO image fields instead)
- WYSIWYG table editing (use Markdown mode for pipe tables)
- HTML blocks beyond what Tiptap markdown export allows
Extending this system
- Add or configure a Tiptap extension in
apps/portal/src/pages/superAdmin/blog/articles/editor/ArticleBodyEditor.tsx. - If the syntax is new to the pipeline, teach
apps/backend/src/utilities/blog/mdxParse.tsto extract any derived data you need. - Update the marketing MDX renderer if the block must display on the public site.
- Add a row to this cheatsheet page and register it in
apps/documentation/docs.jsonunder Frontend. - Run
make build module=portalandmake test module=backend.
What not to do
❌ Never tell authors to manage the table of contents manually — it is generated on save.
❌ Never put FAQ content only in the body; use the FAQ section so frontmatter stays canonical.
❌ Never document syntax here without matching Tiptap / parseMdxContent behavior.
File conventions
What’s next?
📖 See also: Blog system architecture for scheduling, publishing, and discovery.
📖 See also: Frontend overview for how the portal fits together.
📖 See also: Marketing site for how published articles render on the public blog.
