Slides
MDX files where the filename is the contract
Slides live in slides/*.mdx. Filenames define order — there is no id
or order frontmatter:
slides/
01-title.mdx
02-problem.mdx
03-solution.mdxFrom slides/03-solution.mdx Campfire derives:
{ id: "03-solution", number: 3, slug: "solution", path: "slides/03-solution.mdx" }Frontmatter
Exactly three fields are supported:
---
layout: title
title: Building Campfire
notes: |
Mention that Campfire is filesystem-first.
---
# Building Campfirelayout— optional. Without it the slide renders through the built-indefaultlayout (or your ownlayouts/default.tsxif it exists).title— passed to the layout as a prop.notes— speaker notes; shown in the overview, never on the slide.
Any other frontmatter key is an invalid-frontmatter diagnostic.
The body
The body is MDX: markdown plus any discovered component as JSX.
---
layout: split
title: Early Traction
---
<MetricCard value="42%" label="Activation lift" />
ARR grew 18% month over month.Slides never import. No import, no export, no module-level code. The
dev server rejects ESM in slides at compile time and camp validate reports
it as a slide-esm error. Components are available automatically — that is
the point.
Reordering
Renumbering by hand cascades across files, so let the CLI do it:
camp slide add agenda --title Agenda --at 2
camp slide move solution 2
camp slide remove agenda
camp slide rename problem painEvery mutation renumbers safely (two-phase renames, no clobbering) and
supports --dry-run and --json.