Create

Authoring slides

Use readable MDX for the story, precise Step state for pacing, and React only where the idea needs behavior.

Why MDX

Drever is AI-first, but its source is still designed for people. MDX keeps the outline, hierarchy, and prose visible without hiding behavior:

  • Markdown is the default for headings, lists, quotes, images, and code.
  • JSX appears only where an idea benefits from interaction or a reusable visual.
  • Git shows meaningful text changes instead of a generated scene graph.
  • An AI agent can revise the same file a person can review.

Pure HTML is more verbose for ordinary writing. Pure React is powerful, but makes every sentence look like implementation. MDX keeps those two modes in proportion.

Slide boundaries

Put a root-level thematic break between slides, with blank lines around it:

mdx
# Opening idea

The premise in one sentence.

---

## The next decision

Supporting evidence belongs here.

The boundary is protected Drever grammar, not an optional plugin. Remark and Rehype plugins cannot silently change pagination.

Progressive disclosure with Step

An omitted at is assigned in document order. Explicit values are positive static integers, and intentional gaps remain part of the route contract.

mdx
## Three deliberate moments

<Step>Shown at stop 1.</Step>
<Step at={3}>Shown at stop 3.</Step>

This slide navigates through 0 → 1 → 3; Drever never invents stop 2. A Step is presentation state, not a timer. It can be rehearsed, linked, restored, tested, and exported.

Author every Step directly in the slide body. Do not hide one inside a JavaScript expression, component implementation, or JSX-valued layout prop such as visual={<Step>...</Step>}; the compiler cannot turn those runtime branches into addressable routes.

A Step is also a real DOM wrapper. If it reveals absolutely positioned content, make the Step a stable positioned and explicitly sized or inset owner, or put those children in their own stable positioned wrapper. Do not let a pending-to-active transform or translate change which box owns their coordinates.

Persistent accessible labels are present from Step 0. Keep an ancestor aria-label limited to the premise already visible, and put outcome-specific names or descriptions inside the Step that reveals them. The visual and accessible story should advance together.

Speaker notes

mdx
<Note>Ask the room for its concern before advancing.</Note>

Notes appear in Speaker View. They are not mounted for the audience, included in Document View, or printed into the PDF. A public static build still contains the authored note source, so never put secrets or confidential information in <Note>.

React when the idea needs behavior

mdx
import { AudienceSignal } from "./AudienceSignal.tsx";

## Ask the room

What would help you decide?

<AudienceSignal />

Use normal React state, events, and composition. Inactive audience slides preserve local state through React Activity while leaving the accessibility tree. Components with media, global listeners, or network work must be reviewed in Audience, Speaker, Document, and PDF surfaces because the same authored component participates in each.

A useful default

Give each slide one dominant idea. Prefer prose until behavior improves understanding. Use Steps for meaningful pacing, not to make the slide look busy. Put the title and persistent context outside motion groups so navigation cannot make them drift.

Custom scene CSS inherits the active Theme. Normalize only conflicting Markdown margins, maximum widths, line height, text transform, and foreground inside the scene root, then inspect computed font, spacing, color, bounds, and the largest painted frame. Treat the first complete render as Draft 1 and refine from every exact slide and Step state; source review and a successful build are not visual evidence.

NextMotion

Add choreography only when it clarifies a real narrative change.