Living spec · version 2

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 2.
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.
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).
polls[] / questions[] / surveyPrepared polls & quizzes, seeded Q&A, and the post-event survey.
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, prepared Q&A that fits the talk, and a short survey.

Minimal example

{
  "pulseTemplate": 2,
  "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.