A presentation compiler

Enriched Markdown → PowerPoint and standalone HTML

Why a compiler?
  • 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.

The pipeline

Front end

  • Enriched Markdown
  • markdown-it
  • AST → IR

Back end

  • Layout engine
  • PowerPoint scene
  • PptxGenJS
Architecture
  • The front end produces the IR
  • The layout engine places each block in a slot
  • Pagination splits whatever overflows
  • The renderer applies the brand
MarkdownIRLayoutScene.pptx
One thing at a time

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
Key point

The same steps work in PowerPoint (native animations) and in the HTML preview (click on the slide).

Notes

Demonstration of the appearance animations.

Comparing the approaches
CriterionClassic converterCompiler
Page layoutApproximate CSSDeclarative layouts
OverflowTruncated textAutomatic pagination
DiagramsFrozen imageAST → SVG → shapes
ThemeStyle sheetDeclarative tokens
OutputsA single onePPTX, HTML, PDF…
Indicators
19
Layouts planned
↑ +5 this release
100%
Output parity
→ stable
0
Broken slides
↓ -100%
Caution

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".

Before / after

Classic converter

  • Approximate CSS, truncated text
  • A single output
  • Theme by style sheet

Compiler

  • Declarative layouts, automatic pagination
  • PPTX, HTML, PDF…
  • Validated design tokens
Roadmap
1

Q3 2026

Structured layouts and metric trends.

2

Q4 2026

Interchangeable declarative themes.

3

Q1 2027

Open-source release and example gallery.

A layered architecture

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.

The project at a glance

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
Weighing the decision

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
Filing a request, step by step

Request

Online form, five minutes.

Review

Eligibility check within 10 days.

Answer

Reasoned decision, sent by email.

Project portfolio

New product

Launch planned for the spring.

Training program

Three cohorts this year.

Energy efficiency

A third less consumption.

Request triage

2,400 received

All channels combined.

1,100 eligible

After checking the criteria.

320 selected

Funded this year.

Detailed roadmap
1

Q3 2026

Parameterized layouts and official catalog.

2

Q4 2026

Interchangeable declarative themes.

3

Q1 2027

Open-source release and example gallery.

One figure to remember

87% satisfaction

2026 survey of 2,400 respondents.

Budget by quarter

The chart is rendered by the engine, in the brand's colors, with a palette validated for color blindness and contrast.

0 50 100 150 200 250 Q1 Q2 Q3 Q4 PlannedActual
Breakdown of spending
45 % 25 % 20 % 10 % Salaries — 45 Infrastructure — 25 Services — 20 Other — 10
The allocation formula

The budget allocated to each team is computed as follows:

where p is the workload, c the priority coefficient and τ the annual indexation rate.

Three pillars

Speed

A compile in a few seconds.

Reliability

Two outputs, a single geometry.

Openness

One source file, under version control.

Everest, north face
  • 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 in assets/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).

Panorama from the Fronalpstock

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).

A word from users
"
You write a presentation the way you write code: a source language, an intermediate representation, optimization passes.
— A convinced author
The code stays readable
function compile(source: string): Deck {
  const ast = parse(source); // markdown-it
  const ir = lower(ast);
  return layout(ir); // placement + pagination
}
A kit fits in a manifest

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"
}
Next steps
  • 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