A room full of phones, all answering the same question.
Attendees scan a code, type a name, and they are in — no account, no app, no password. The organiser runs polls, quiz rounds and a moderated Q&A from one screen, and the sponsor gets a panel that appears when it suits the run of show.
In the room
- Join by QR. The room and its key travel in the link, in the hash rather than the query, so they stay out of Referer headers and server logs.
- Polls, quiz rounds and Q&A. One segment at a time, with a timer and a live leaderboard when it is a quiz.
- Answers sized for a thumb. Nothing an attendee taps is smaller than 44px, because they are standing up holding a phone.
- English, Arabic and Hebrew, right-to-left included — chosen by the organiser and carried in the join link.
The console
- Moderation before anything is shown. Questions arrive in a queue; nothing reaches the room until it is approved. Pin one, hide one, mark one answered.
- Your branding and the sponsor's. Logo, colour and event name on every attendee's screen; the sponsor panel is shown when you switch it on, not before.
- An export you can hand over. A CSV of the attendees who ticked the consent box, and nobody else.
Consent
An attendee's name is shown to the room — that is what a leaderboard is. Contact details are a separate question, asked once, with the box unticked. The export contains only the people who ticked it, and the email field does not even appear until they do.
What it costs
Commercial — per-event licence
Commercial, licensed per event. One organiser console, as many attendees as the room holds, and the sponsor's branding on every screen.
The lead export contains only attendees who ticked the consent box — not people who typed an email and then unticked it. That promise is made on the join screen and enforced at the export, and it is worth saying out loud on the page that sells the thing.
The part that matters, in the open
The tally is computed from the votes the host holds, one per person. An attendee's page can ask; it cannot assert.
function tally(segment) {
var counts = {};
segment.options.forEach(function (o) { counts[o.id] = 0; });
Object.keys(segment.votes).forEach(function (name) {
var id = segment.votes[name];
if (counts[id] !== undefined) counts[id]++;
});
return counts;
}
Taken from this app's source, not written for the page. Built on the Messaging Platform SDK.