How to write a briefing

This deck is one Markdown file. Every slide shows the Markdown that produced it.

1file
0dependencies
33components
1The document
2How the layout is chosen
3Asking for a component by name
4Where this fits
psi-briefing · tutorial
1

Part one

The document

#, ## and --- are what decide where a slide begins. Everything else in the file is ordinary Markdown.

psi-briefing · tutorial

The whole workflow

One file in, one deck out

Nothing to install and no project to set up. Below is what the two commands printed when this deck was built from examples/tutorial.md.

$ node tools/md-to-deck.mjs examples/tutorial.md -o examples/tutorial.html
md-to-deck: 17 slides -> examples/tutorial.html
   12   98 %          directive:cols--2                   Old against new, do against avoid
    9~  66 % gap 21 %  directive:cols--2                   A two-column table becomes a timeline
  typography: 9 marks normalised

$ tools/build-deck.sh examples/tutorial.html
        0.02 MB linked  ->  0.13 MB self-contained
        no external references: opens with no server and no network
The .md stays the source of truth. Re-running the converter overwrites the HTML, so hand-tune only once you have stopped converting.
psi-briefing · tutorial

Structure

Where slides begin

This file has four # headings after the title. Each one becomes a numbered divider slide, and the four of them together are the contents list on the title slide – hover the link and count them.

# How to write a briefing   ← title slide

# The document             ← divider, numbered 1

## Where slides begin      ← a content slide
{eyebrow="Structure"}      ← optional attributes

---                        ← a break, for a slide
                             with no heading

The attribute line

A heading may take one {…} line under it. {#anchor} gives the slide an id so another slide can link to it, {eyebrow="…"} puts a small line above the title, {.center} centres the content, {keep} leaves this slide’s layout untouched.

psi-briefing · tutorial
2

Part two

How the layout is chosen

The converter reads the structure of your Markdown and picks a component for each slide. It also adjusts what you wrote: more columns or fewer, or an overfull prose slide split into two. It never invents text to fill a gap, and every slide it could not fix is named in the report it prints.

psi-briefing · tutorial

Four equal blocks become a grid

Four ### blocks at the same level become a bordered 2×2 grid. Two become two columns, three become three, and five to eight become two columns of stacked cards.

### Candidates
They sit the exam.

### Examiner
Owns the paper.

### Invigilators
They set up and watch.

### Technical lead
Knows the system.

Candidates

They sit the exam.

Examiner

Owns the paper.

Invigilators

They set up and watch.

Technical lead

Knows the system.

psi-briefing · tutorial

A quotation becomes the closing band

A > blockquote becomes the highlighted band across the bottom of the slide. It can sit anywhere in the slide’s source, first block or last, and still ends up down there.

> Who leads is settled **before**
> the exam day.

Three roles, one rule: whoever
leads is settled before the day.

Three roles, one rule: whoever leads is settled before the day.

The quotation went to the band at the foot of the slide, although it was written above this column.

Who leads is settled before the exam day. This blockquote is the first block in the slide’s source, written above the two columns beside it.
psi-briefing · tutorial

Three numbers become a row of figures

A short list in which every item reads **value** – label, and the value contains a digit, comes out as a row of figures. The first item is set largest, so lead with the number you most want read.

- **1280** – commits across the project
- **11** – weeks from kickoff to launch
- **3** – people, none of them full time
1280commits across the project
11weeks from kickoff to launch
3people, none of them full time
psi-briefing · tutorial

A two-column table becomes a timeline

A table of two columns becomes this label-and-text list. You set no widths anywhere: the label column on the left comes out as wide as its longest label, and no wider. A table of three or more columns stays an ordinary table instead.

| When | What happens |
| --- | --- |
| The evening before | Laptops imaged |
| −45 min | Room open, laptops out |
| −10 min | Doors closed, IDs checked |
| 0 | Exam starts |
| +90 min | Working time ends |
  • Laptops imaged
  • Room open, laptops out
  • Doors closed, IDs checked
  • Exam starts
  • Working time ends
psi-briefing · tutorial
3

Part three

Asking for a component by name

Some layouts cannot be read off Markdown, so you name them with a directive: ::: name on its own line, the blocks that belong to it below, then ::: to close. Five directives appear in this part; the rest of the catalog works the same way.

psi-briefing · tutorial

::: editorial

One block outranks the rest

::: editorial gives the first ### block a large panel of its own and stacks the others beside it as smaller cards. Use it when one point carries the slide. Markdown has no way to show that one of five blocks outranks the others, which is why this layout has to be asked for by name.

::: editorial
### The one thing that mattered
Everything else followed from it.

### A smaller lesson
Worth a line.

### Another
Also worth a line.
:::

The one thing that mattered

Everything else followed from it.

A smaller lesson

Worth a line.

Another

Also worth a line.

psi-briefing · tutorial

::: delta · ::: principles

Old against new, do against avoid

::: delta puts an arrow between the two halves of each item. ::: principles sets two bullet lists side by side, each under its own heading. Both bodies are plain Markdown lists.

::: delta
- Seven pages -> **One guided flow**
- A PDF by e-mail -> **A link**
:::

::: principles
### Do
- Cite the source
- Say what changed

### Avoid
- One line per slide
:::
Seven pages
One guided flow
A PDF by e-mail
A link
Do
  • Cite the source
  • Say what changed
Avoid
  • One line per slide
  • Unlabelled numbers
psi-briefing · tutorial

::: chart

A list of numbers becomes a chart

The six bullet lines on the left produced the chart on the right. max=220 sets the top of the scale the bars are measured against, values prints each number above its bar, and the bars take the theme’s accent colour, the same one as the heading above them.

::: chart max=220 values label="Commits per week"
- W1: 40
- W2: 95
- W3: 120
- W4: 60
- W5: 150
- W6: 205
:::
psi-briefing · tutorial

No directive needed

Numbered steps need no directive

A numbered list whose items start with a bold phrase becomes numbered steps, in two columns once there are four. Nothing to name here: the numbering already says what these are.

1. **Absprache** Agree room and
   laptop count.
2. **Aufbau** Lay out machines,
   check network.
3. **Einlass** Doors close, IDs
   checked.
4. **Abbau** Pack down, count
   papers twice.
1

Absprache

Agree room and laptop count.

2

Aufbau

Lay out machines, check network.

3

Einlass

Doors close, IDs checked.

4

Abbau

Pack down, count papers twice.

A finished 23-slide briefing on exam invigilation names a component three times in all.
psi-briefing · tutorial

::: detail

Extra detail behind a click

::: detail adds a clickable strip along the bottom of a slide, and clicking it covers the slide with a full panel. Put a derivation or the numbers behind a claim in there. The reader who wants that much can open it, and the reader who does not is never held up by it.

::: detail line="**How this panel was made.**" more="Show the method"
## What a reveal is made of

### The strip
What `line` and `more` write on it.

### The panel
Laid out exactly like a slide.
:::

The strip below is real

The Markdown beside this paragraph is what produced it, with the two panel texts shortened and the closing quotation left out. Click the strip and read what opens.

How this panel was made.Show the method →

What a reveal is made of

The strip

line="…" is the text on the strip itself: say what is behind it rather than “click here”. more="…" labels the button on its right, and eyebrow="…" works as it does on a slide.

The panel

Everything after the leading ## is laid out exactly like a slide. The two panels you are reading are two ### blocks, and the band below them is a > blockquote. This panel has no page number and no navigation dot, so paging from slide to slide never lands on it.

Press Escape, or use the close button. While the panel is open, the arrow keys belong to it, so the deck cannot scroll away underneath.
psi-briefing · tutorial
4

Part four

Where this fits

psi-briefing · tutorial

Limits

When not to use this

What it fits

Material already written as a document: a retrospective, project documentation, a research summary, lecture notes, a report with numbers in it. Such a source arrives with its own sections and comparisons, and the job is getting all of them onto slides without dropping any of it on the way.

What it does not

A spoken keynote of one line per slide, where the timing and the order of question and answer carry the talk. That was tried on a real one. Filling the slides worked against the timing, and keeping them sparse gave a deck of near-empty frames. For that kind of talk the pacing is the design, and no converter can supply it.

What is missing

No animation beyond the click-to-open panels. No speaker view, no presenter notes on a second screen, no .pptx export. Charts are bars and nothing else, and the only image effects are a lightbox and a fanned stack.

For a talk you will actually deliver, use psi-slides – the sibling project. The line between the two is whether anyone will be in the room speaking.
psi-briefing · tutorial
↓ scroll · → next
📱

Turn your phone

This deck is designed for landscape. Rotate your device, or tap to dismiss.