Skip to content

Presenter mode

Presenter mode gives you a dedicated speaker view: the current slide, a preview of what’s coming next, your speaker notes, and a timer — all while your audience sees only the clean deck on the projector. The two windows stay in lockstep: advancing in one advances the other.

Every deck has a parallel presenter route:

/presenter/<deck>/<slide>

If your audience window is showing /mydeck/4, open the presenter view for the same spot at:

/presenter/mydeck/4

A typical setup:

  1. Open the deck normally (/mydeck/1) and drag that window onto the projector / shared screen, then make it fullscreen.
  2. Open /presenter/mydeck/1 in a second window on your laptop screen.
  3. Drive the talk from the presenter window. The audience window follows every move.

The presenter view is a set of resizable panes (drag the dividers; your layout is remembered per deck):

  • Current — an iframe of the slide the audience is seeing right now, at its current click step. This is the exact deck renderer, so layouts, code, math, and transitions look identical to the projector.
  • Next — a preview iframe showing the result of your next click (the next step, or the first step of the next slide). It runs on a separate preview channel, so it can sit one click ahead of the audience without disturbing them.
  • Notes — your speaker notes for the current slide, plus the control bar: previous / next, the timer (start / pause / reset), and a blackout toggle.

The presenter window binds its own shortcuts:

KeyAction
/ Space / PageDownNext slide or step
/ PageUpPrevious slide or step
BBlackout the audience
FToggle fullscreen
K or /Open the command palette
EscClose the command palette

Notes are authored in the slide itself, as the trailing HTML comment at the bottom of the slide. Everything inside the comment is rendered as Markdown into the notes pane.

# Our Q3 numbers
<Chart data={revenue} />
<!--
Revenue is up 40% year over year lead with that.
Pause here and let the chart land before you talk to the breakdown.
-->

If a slide reveals content across several clicks, you can mark the exact point in your narration where you advance, using [click] markers. The presenter pane renders each marker as a small diamond (◆1, ◆2, …) and highlights the one matching your current step, so your notes scroll in time with the slide.

# Architecture
<Click>The gateway relays messages…</Click>
<Click>…and every client reduces them locally.</Click>
<!--
Start with the problem. [click] Now introduce the gateway as a dumb relay.
[click] Emphasize that the reducer stays on the client.
-->
  • [click] — the next step in order (1, 2, 3, …).
  • [click:3] — an explicit step number; bare markers after it continue from there.

The control bar shows a running clock:

  • With no configuration it’s a stopwatch (counts up from Start).
  • Add a duration: to the deck headmatter and it becomes a countdown from that length:
---
title: My talk
duration: 30min
---

duration: accepts values like 30min, 1:05, 2:30:00, or a bare number of minutes. The timer syncs across windows using the wall-clock start time, so the presenter and any other synced window can never drift apart.

Press B (or the Black button) to drop a full-screen black overlay on the audience window — handy for pulling attention back to you. Press B again to restore the slide. The presenter view keeps showing the slide the whole time.

Press K or / to open a jump-to-slide palette (built on cmdk). Start typing a slide number or title, and Enter jumps both windows straight to that slide. Press Esc to dismiss it.

If the deck opts in with record: headmatter (dev, prod, or false), a recording panel appears in the notes pane. See Drawing, recording & remote for the details.

  • packages/core/src/routes/presenter.astro — the /presenter/<deck>/<slide> route.
  • packages/client/components/presenter/PresenterApp.tsx — the speaker UI (panes, timer, palette, shortcuts).
  • packages/client/src/sync/ — the shared state, reducer, and BroadcastChannel transport.
  • packages/core/src/notes.ts — notes rendering and [click] marker handling.
  • packages/types/src/frontmatter.ts — the duration: and record: headmatter fields.
  • docs/architecture/sync-state.md — the sync state and protocol spec.