Live audience experiences

A .hedydeck can include polls, quizzes, ratings, and moderated word clouds. The presenter controls the flow; people join from their own phones without an account. The same AI tools used for ordinary slideshows can author an entire interactive experience. No model runs during playback, and no author JavaScript is executed.

Start from the complete interactive JSON example or download its editable .hedydeck package. Read the source specification and agent tools before editing. Use the existing create, read, edit, replace, validate, render, export, and temporary handoff workflow.

Design the experience

Start with the audience's decision or learning goal. Alternate short explanations with focused moments of participation. Put the question and a simple instruction visibly on each slide, then attach the matching interaction to that slide. Do not put the answer to a quiz in visible artwork, titles, or notes before you intend to reveal it. A poll can offer different paths through the story; the presenter remains in control of when to follow a result.

Author the complete experience as source. Include "audience-interaction" in requires, preserve stable IDs, and inspect the artwork after validation. Keep one activity per source slide. Named reveal steps still produce static images; the activity belongs to that slide, starting at its first compiled frame. Branches reference source slide IDs and land on their first frame.

Exact interaction shapes

Every interaction requires a stable id, type, and nonempty prompt of at most 300 characters. Interaction IDs are unique across the deck and use the same 1–96 character rules as slide IDs. Unknown fields and fields belonging to another interaction type fail validation.

TypeFieldsBounds
polloptions: [{id,label,nextSlideId?}]2–8 options; unique option IDs; nonempty labels up to 120 characters. A branch must name an existing slide.
quizoptions: [{id,label}], correctOptionIdSame option bounds; exactly one correct option ID, which must exist. Branches are supported on polls only.
ratingmin, max, optional lowLabel, highLabelInteger endpoints from 0 to 10 with min < max; endpoint labels up to 80 characters.
wordcloudOptional maxLengthInteger from 1 to 80; default 40. Ask for a short word or phrase.
{
  "id": "choose-focus",
  "type": "poll",
  "prompt": "Where should we focus first?",
  "options": [
    { "id": "clarity", "label": "Make the next step clearer", "nextSlideId": "clarity-path" },
    { "id": "confidence", "label": "Build confidence", "nextSlideId": "confidence-path" }
  ]
}

This is an interaction value, not a complete slide. Add it beside a slide's id, title, and nodes. Use hedy_edit_slideshow with putSlide to replace the complete slide while preserving its artwork. To remove an activity, replace the slide without interaction. Referenced branch slides cannot be removed until their branch references are changed in the same atomic edit batch.

const read = await window.hedyDecks.tools.call("hedy_read_slideshow", { id, slideId: "opening" });
if (!read.ok) throw new Error(read.error.message);
const result = await window.hedyDecks.tools.call("hedy_edit_slideshow", {
  id,
  expectedRevision: read.revision,
  operations: [{
    op: "putSlide",
    slide: {
      ...read.slide,
      interaction: {
        id: "confidence-before",
        type: "rating",
        prompt: "How confident do you feel about this topic?",
        min: 1,
        max: 5,
        lowLabel: "Just starting",
        highLabel: "Ready to apply it"
      }
    }
  }]
});
if (!result.ok) throw new Error(result.error.message);

For a newly generated project, declare the capability in its complete source document. The existing putSlide operation is sufficient to add or revise an activity in a saved project. There is no separate authoring tool catalogue to learn.

Present and participate

Open the rendered slideshow as presenter and use the audience controls. An activity opens automatically when its slide becomes current. Advancing through that slide’s reveal frames keeps the same activity; leaving and returning starts a fresh round. Reloading the original presenter resumes its saved local session. Close responses when needed, reveal results deliberately, and use Reset for a fresh round on the current slide. Reset retains the earlier round in the presenter’s local history.

Reveal closes the round before showing final results; participants cannot change answers after seeing the result. Hiding results does not reopen responses. Quizzes keep the correct answer out of audience state until reveal. For a word cloud, first Close responses, review the final phrases, hide anything that should not be shared, and then Reveal. No late phrases appear after reveal. Hidden phrases can be restored individually or with Restore all. Hiding a phrase removes it from the public display, not from the presenter’s saved answers. A poll branch offers a destination for the presenter to follow; voting does not take over slide navigation.

Joining and presenter control

Anyone with the room code, audience link, or QR code can join directly by default, without an account. The presenter can turn on Require approval to admit new participants individually; this applies equally to room codes and QR codes. People already admitted stay connected. Turning approval off also admits everyone currently waiting, within the room's audience limit. The presenter can lock new joins or ban a participant browser identity. A ban stops that identity from submitting; it is not verified identity or a guarantee of one vote per human.

The audience link contains the room code and does not grant presentation controls. The private phone-remote invitation is separate. Share the room code only with the intended audience, or enable approval before sharing it publicly. Only the presenter controls admissions; an ordinary audience member cannot approve others or publish accepted results.

Where responses live

The original presenter’s browser owns the live session. Each accepted latest answer, its receipt, and the round state are saved together in IndexedDB on that device before an accepted receipt is sent. Guests save their own pending answer locally and retry the same request until the host acknowledges it. A “sending” or “waiting for presenter” state does not mean the answer has been counted. Exact retries do not add another vote or change rounds.

Hedy relays bounded participation messages through its live connection service. It does not keep a server database of live answers. Its temporary room records contain access and abuse-control metadata; the host’s browser retains the actual results. The original host must be online, with a working live subscription, to accept new answers. If the host disconnects, guests keep pending work and wait to reconnect. There is no server-state polling substitute for an absent host.

Connected TV, Cast, and remote devices continue to receive presentation artwork through the existing deck transport. A copied deck on another device does not become the owner of the audience response history. The ordinary slideshow can continue displaying when live participation is unavailable.

Keep or save results

Open Results on the presenting device to review saved sessions, export JSON or CSV, or delete a local session. Results contain separate rounds and the latest accepted anonymous answer for each participant in those rounds, not every intermediate revision. The response archive is separate from the portable slideshow; resetting a question does not overwrite its prior round.

Local results remain on that browser until deleted or browser storage is cleared. Download an export for a durable copy. The presenter’s export can contain submitted answers hidden from the public word cloud and quiz answer keys, so review it before sharing. Exports omit connection credentials, request IDs, and receipt ledgers.

Saving to Hedy is optional and explicit. Sign in when you want to save an account copy, then choose Save to Hedy. Signing in does not upload existing results automatically. An account save is private to its owner and can be downloaded or deleted. Account storage has bounded quotas; a failed or oversized save leaves local results and exports available. Local authoring, presenting, and audience participation still work without an account.

Source, playback, and privacy

The editable .hedydeck retains every activity, branch, and quiz answer so it can be opened and presented again. Source exports and temporary handoff links therefore include answer keys. Give participants the live audience invitation when answers should remain hidden.

Rendering saves an image playback bundle plus a separate local presenter plan. The bundle contains only an audience-enabled marker and a plan fingerprint, never the interaction definitions or quiz answer keys. Each interactive build uses a fresh unpredictable fingerprint so public playback identity cannot be used to guess a quiz answer. Rebuilding an interactive source can therefore produce a new playback identity even when the artwork and activities are unchanged. Presenter plans are rebuilt when editable source is imported or rendered. An image bundle alone cannot reconstruct the activities; reopen the editable source on the presenting device.

Speaker notes travel in the playback bundle and are not secret. Keep sensitive answers out of notes as well as visible slide content. Exported .hedydeck files contain activity definitions and quiz answer keys, but no audience responses. Live results and optional account archives are separate from the editable project and from temporary source-handoff links.

Arbitrary mini-apps, executable plugins, deck-authored external data requests, AI inference during playback, and automatic personalized takeaways are outside this supported interaction model. Declared activities are bounded so an agent can produce a reliable experience from the published schema. The local session caps participation at 250 browser identities, with up to 30 accepted answers or changes per participant per round. Resource limits are safeguards, not a guarantee of tested large-crowd capacity.