Living spec · version 3

Pulse Event Blueprint

A single JSON object that describes a complete Pulse event — the agenda, speakers, polls, prepared questions, timed segments, links, survey, and appearance. Hand your slides and this spec to an AI assistant; it returns a blueprint you upload to create the event. Pulse embeds no AI — it just defines this format so an AI you already use can design a rich, thoughtful event for you.

This page evolves with the product — always fetch the current version rather than a saved copy. Machine schema: /spec/event-blueprint.schema.json (JSON Schema, CORS-enabled).

How it works

  1. Give an AI assistant your slides (or an outline) and point it at this spec.
  2. It produces a blueprint JSON conforming to the schema.
  3. In Pulse, Start from a blueprint (Events → Import) and upload it — a draft event appears, fully built.
  4. Review, tweak, and go live.

Cross-references use indices, not ids

A blueprint carries no ids. A segment points at its speaker with speakerIndex (into speakers[]); a link attaches to a speaker or segment with attachIndex. Pulse mints real ids on import and wires everything up. This keeps a blueprint portable and re-runnable.

Self-correcting imports

If a blueprint has problems, the import returns HTTP 400 with a machine-readable list — every issue at once — so you can paste it straight back to the AI to fix in one pass:

{
  "error": "The blueprint has 2 problem(s).",
  "code": "blueprintInvalid",
  "errors": [
    { "path": "agenda[1].speakerIndex", "error": "No speaker at index 3.", "hint": "speakerIndex must be 0..1, or omitted." },
    { "path": "polls[0].options", "error": "A poll needs at least 2 options.", "hint": "Add options[] with text values." }
  ]
}

Top-level fields

FieldMeaning
pulseTemplateRequired. The schema version — use 3.
titleRequired. The event name.
scheduledStart / scheduledEndISO 8601. The event auto-starts/ends at these times.
settingsFeature toggles (reactions, chat, polls, questions, slides, guestAccess, …).
reactionSetId / controlSizeReaction set (a preset or "custom") + one-tap size (XS/S/M/L).
customReactions3–8 emoji (from the curated reaction picker) used when reactionSetId is "custom".
attendeeLayoutOrder of the attendee tabs — any of engage, slides, chat, qa, info. Order only; an omitted tab still shows.
speakers[]Name, title, bio, and up to 6 links each. Set hidden: true to stand a speaker down (kept in the blueprint, hidden from every attendee surface).
agenda[]Ordered segments; each can tie to a speakerIndex, a slide range, planned minutes, and its own reactionSetId.
resources[]Links or text cards with attachKind (manual / event / speaker / segment / slide) so they surface at the right moment. A slide resource opens after slideIndex; add a body for a text-only note/definition (url optional); set topTab: true to also pin it as a top-of-screen attendee tab.
polls[] / questions[] / surveyPrepared polls, quizzes, icebreakers & word clouds (kind: poll / quiz / icebreaker / wordCloud), seeded Q&A, and the post-event survey. A wordCloud collects one free-text word per attendee (no options[]); every other kind needs at least two options. Any poll can set launchAtSlide (0-based) to auto-launch when the presenter reaches that slide, plus an optional timeLimitSeconds.
slidesOnHome, showAgendaPreStart, showAgendaDuringEvent, windDownMinutesSlide follower on attendee Home (default on); show the agenda in the lobby / during the live event; keep the room read-only for N minutes after it ends.
viewStyle, overlay, slideCaptionsAttendee view style (classic or overlay) and, for overlay, its glass options (idleFadeSeconds 0/2/4/8, showPoll/showTicker/showFloaters/showPacing). slideCaptions[] gives each slide a title ({index, text}, 0-based) so the run-of-show reads by name, not "Slide 1/2".
videoAttendee-device YouTube for the lobby, live, and ended phases (each a YouTube link or 11-char id; live plays on the moderator's cue). Each slot defaults to muted autoplay; set its *Autoplay flag to false to instead let the viewer press play with sound.
stageQr, themeId, qrFgColor, passcodeStage-QR placement, per-event theme, QR color, and room passcode.

Build it out to the maximum useful complexity: a real agenda with timed segments and speakers, a poll or quiz per major section — anchor each to the slide it belongs on with launchAtSlide (add launchOnAdvance to fire as the presenter leaves that slide) so it fires automatically — an icebreaker to open, prepared Q&A that fits the talk, and a short survey.

Engagements in slide notes

Engagements can also live in a PowerPoint deck itself: write a block in a slide's speaker notes and push the deck from the Pulse add-in to create or update the engagement, anchored to that slide (reorder-safe). See Engagements in slide notes (fetchable as .md) — the same fields as polls[] here.

Minimal example

{
  "pulseTemplate": 3,
  "title": "Q3 Product All-Hands",
  "scheduledStart": "2026-08-01T16:00:00Z",
  "reactionSetId": "professional",
  "settings": { "reactions": true, "questions": true, "polls": true, "slides": true },
  "speakers": [
    { "name": "Priya Sharma", "title": "VP Product", "bio": "Leads product.", "links": [{ "kind": "linkedin", "value": "https://linkedin.com/in/priya" }] },
    { "name": "Marcus Lee", "title": "Head of Eng" }
  ],
  "agenda": [
    { "type": "intro", "title": "Welcome", "plannedMinutes": 5 },
    { "type": "speaker", "title": "Roadmap", "speakerIndex": 0, "slideFrom": 1, "slideTo": 8, "plannedMinutes": 20, "reactionSetId": "celebration" },
    { "type": "speaker", "title": "Reliability", "speakerIndex": 1, "slideFrom": 9, "slideTo": 15, "plannedMinutes": 15 }
  ],
  "resources": [
    { "title": "Roadmap doc", "url": "https://example.com/roadmap", "attachKind": "segment", "attachIndex": 1 }
  ],
  "polls": [
    { "kind": "poll", "prompt": "Which area matters most to you?", "resultsVisibility": "live",
      "options": [{ "text": "Speed" }, { "text": "Reliability" }, { "text": "New features" }] }
  ],
  "questions": ["What's the timeline for the mobile app?"],
  "survey": { "enabled": true, "questions": [{ "prompt": "How useful was this?", "type": "Rating", "scale": 5 }] }
}

Pulse™. Spec version 2 — served live at nowpresenting.net/spec.