dotBEP Flavored Markdown

Documentation

dotBEP Flavored Markdown

dotBEP renders Markdown in two places: reports and standards. Both support standard Markdown (headings, lists, tables, blockquotes, bold, italic, inline code, code blocks) and both support the same extension on top of it: dotBEP Flavored Markdown, or DFM.

DFM adds visual block elements using a :::token syntax. Each block opens with :::token-name, contains one item per line with fields separated by |, and closes with :::. You do not need to write this syntax yourself: ask the AI for what you want (a chart, a table, a highlighted note) and it will produce the correct block. This page exists as a reference, in case you want to read or adjust a block directly.


Stats

Displays a row of stat cards. Each line: value | label | color (color is optional, accepts any CSS color value).

:::stats
47 | Open clashes | #ef4444
12 | Resolved this week
3  | Pending approval
:::

Progress

Displays labeled progress bars. Each line: label | value | total.

:::progress
Structural | 34 | 40
MEP | 18 | 40
Architecture | 40 | 40
:::

Pie chart

Displays a pie chart. Each line: label | value.

:::pie-chart
Completed | 58
In progress | 27
Not started | 15
:::

Area chart

Displays an area chart. Each line: label | value.

:::area-chart
Week 1 | 4
Week 2 | 11
Week 3 | 19
Week 4 | 31
:::

Timeline

Displays a milestone timeline. Each line: name | date | status. Status values: completed, active, upcoming (default).

:::timeline
Design freeze | 2025-03-15 | completed
Coordination | 2025-05-01 | active
Construction issue | 2025-07-30 | upcoming
:::

Matrix

Displays a data matrix. The first line defines column headers; each subsequent line is a row. Fields separated by |.

:::matrix
Discipline | Open | Resolved | Critical
Structural | 12 | 34 | 3
MEP | 8 | 21 | 1
Architecture | 5 | 18 | 0
:::

Callouts

Highlights a message with a colored border. Three variants: warning, danger, success. The title after the variant name is optional.

:::callout-warning Coordination deadline at risk
The MEP coordination workflow has 3 instances blocked for more than 5 days with no action taken.
:::
:::callout-success
All clash detection instances for the structural package have been resolved.
:::

Inline references

Unlike the blocks above, an inline reference does not describe its own content: it points at data that already lives elsewhere in the BEP and resolves it live, every time the content is read. The syntax is {{<JSONata expression>}}, evaluated against the whole BEP as its root context:

The lead architect is {{teams[id='ARC'].name}}.
The project code is {{project.code}}.

JSONata reads like ordinary property access, with a filter for picking a specific entry out of a collection by id: teams[id='ARC'].name finds the team whose id is ARC and reads its name. A singular field, like project.code, needs no filter at all. An expression that does not resolve, a bad id, a typo, a missing field, is shown as a visible ⚠ {error} marker instead of failing silently or being rejected when the content is written.

This is what powers referencing other BEP data from a standard’s prose. See Standards and Guides for the authoring side of it.


Entity tables

This block renders structured, collection-shaped BEP data as a table, rather than a single value. Not every entity supports it, only the ones listed below. The syntax is :::bep:{entity}[:{arg}]:::, where bep: is a fixed namespace (unrelated to the {{...}} JSONata grammar above, it just keeps this token from colliding with the others on this page):

:::bep:disciplines:::
:::bep:teams:::
:::bep:deliverableNamingConvention:::
:::bep:referenceData:{domainId}:::
EntityArgumentRenders
referenceDataRequired: {domainId}, optionally followed by a dotted path to a specific node, {domainId}.{key}The reference data domain, or a specific node’s children, as a table. If a node has children of its own, its row includes a toggle to expand them inline, indented one level further, in the same table
disciplinesNoneEvery discipline defined in the project
teamsNoneEvery team defined in the project
deliverableNamingConventionNoneThe project’s naming convention, one row per segment, in the order they are concatenated

The table is reconstructed fresh every time it is rendered, so it always reflects the current values, never a stale copy. This block is available in standards, so a standard’s prose can embed a live table of the data it describes instead of only linking to it or restating it as text. See Standards and Guides for how to embed one from a standard.