A presentation compiler
Enriched Markdown → PowerPoint and standalone HTML
Lutrin · July 2026
- Markdown is not the final format: it is a description DSL
- Content is kept separate from page layout
- One canonical intermediate representation (IR)
- Analysis passes: layout selection, pagination, validation
- Several possible rendering engines (PPTX, HTML, PDF…)
Notes
Stress the analogy with a classic compiler.
Front end
- Enriched Markdown
- markdown-it
- AST → IR
Back end
- Layout engine
- PowerPoint scene
- PptxGenJS
- The front end produces the IR
- The layout engine places each block in a slot
- Pagination splits whatever overflows
- The renderer applies the brand
The content of this slide appears on click, one step after another.
- Lists reveal themselves point by point
- Each block is a distinct step
- Columns and sections appear as a whole
The same steps work in PowerPoint (native animations) and in the HTML preview (click on the slide).
Notes
Demonstration of the appearance animations.
| Criterion | Classic converter | Compiler |
|---|---|---|
| Page layout | Approximate CSS | Declarative layouts |
| Overflow | Truncated text | Automatic pagination |
| Diagrams | Frozen image | AST → SVG → shapes |
| Theme | Style sheet | Declarative tokens |
| Outputs | A single one | PPTX, HTML, PDF… |
The trend on a :::metric card is colored according to its direction: ↑ turns green, ↓ turns red. The (+) suffix inverts that reflex and forces green — to say that here a fall is good news, as in "zero broken".
Classic converter
- Approximate CSS, truncated text
- A single output
- Theme by style sheet
Compiler
- Declarative layouts, automatic pagination
- PPTX, HTML, PDF…
- Validated design tokens
Q3 2026
Structured layouts and metric trends.
Q4 2026
Interchangeable declarative themes.
Q1 2027
Open-source release and example gallery.
Outputs
.pptx PowerPoint, standalone HTML, VS Code preview.
Renderers
PptxGenJS and HTML — same scene, same geometry.
Engine
Layout inference, slot placement, pagination.
IR
deck → slides → sections → blocks, source positions.
Strengths
- Brand applied by construction
- Two outputs, a single geometry
Weaknesses
- Embedded font ignored by Keynote
Opportunities
- Themes for other organizations
Threats
- Evolution of the OOXML format
Pros
- A single source file, under version control
- The brand applied by construction
Cons
- A DSL to learn
- Less freedom than a free-form PowerPoint
Request
Online form, five minutes.
Review
Eligibility check within 10 days.
Answer
Reasoned decision, sent by email.
New product
Launch planned for the spring.
Training program
Three cohorts this year.
Energy efficiency
A third less consumption.
2,400 received
All channels combined.
1,100 eligible
After checking the criteria.
320 selected
Funded this year.
Q3 2026
Parameterized layouts and official catalog.
Q4 2026
Interchangeable declarative themes.
Q1 2027
Open-source release and example gallery.
87% satisfaction
2026 survey of 2,400 respondents.
The chart is rendered by the engine, in the brand's colors, with a palette validated for color blindness and contrast.
The budget allocated to each team is computed as follows:
where p is the workload, c the priority coefficient and τ the annual indexation rate.
Speed
A compile in a few seconds.
Reliability
Two outputs, a single geometry.
Openness
One source file, under version control.
- A remote image: URL pasted as is into the Markdown
- Downloaded into the user cache, embedded in the .pptx
- Here
assets: vendor: a copy kept inassets/remote/, a self-contained directory - Photo © Luca Galuzzi — www.galuzzi.it, CC BY-SA 2.5
Notes
Photo: "Everest North Face toward Base Camp", © Luca Galuzzi - www.galuzzi.it, Wikimedia Commons, CC BY-SA 2.5. The credit must stay close to the image (the author's requirement).
Photo © Hannes Röst — Wikimedia Commons, CC BY-SA 3.0
Notes
Photo: "Fronalpstock, Switzerland", Hannes Röst, Wikimedia Commons, CC BY-SA 3.0. hero layout: full-page image. The credit stays visible on the slide (a CC BY-SA requirement).
You write a presentation the way you write code: a source language, an intermediate representation, optimization passes.
function compile(source: string): Deck { const ast = parse(source); // markdown-it const ir = lower(ast); return layout(ir); // placement + pagination }
Installing an organization's brand means copying a directory. Its heart is a kit.json — data only, never code.
{
"name": "slate-plus",
"version": "1.0.0",
"theme": "./theme.json",
"layouts": "./layouts"
}
- Mermaid diagrams rendered as native shapes
- HTML engine (reveal.js) and PDF engine (Typst)
- Dynamic components (github-stats, chart, sql)
- Fragments and animations
- Interchangeable declarative themes
- Accessibility checker (contrast, reading order)
- Hot preview while editing
- Example gallery
- Visual regression tests
- Incremental compilation cache