Skip to content

About

Anonymous, multilingual audience Q&A for community meetings: Google Apps Script and Gemini. Built to support the Autism Society of Los Angeles.

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

134 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Question Desk

Anonymous audience Q&A for community meetings, built as a Google Apps Script web app with Gemini grouping and translating questions. It runs entirely inside an organization's own Google Workspace. There is no server to host and nothing for the audience to install.

Built to support the Autism Society of Los Angeles.

test License: Apache 2.0

How it works

  1. The room screen shows a QR code. For in-room sessions the code changes every 150 seconds, so only people in the room can ask.
  2. People scan it and ask anonymously in English, Korean, Spanish, or any language.
  3. Gemini groups questions by topic and translates them in one call, so a Korean and a Spanish question about the same thing land in the same group.
  4. The facilitator's queue shows topics instead of a long list. They merge a topic into one question to read aloud, and mark it Now answering on the room screen and everyone's phone.
  5. The app itself reads in English, Spanish or Korean, chosen per person — the queue, the admin page, the room screen's status lines and the emails, not only the questions.
  6. Participants can tap Me too on topic labels, never on other people's questions, so the room's priorities surface without repeat questions.
  7. When the session ends, QA Facilitators get a summary email with a CSV.

Screenshots

All screenshots use made-up demo data from scripts/preview.js.

Room screen: QR code, instructions in three languages, the topic being answered, and a clock showing the code is live.

Room screen with a topic being answered

Participant's phone
Ask anonymously; tap Me too on approved topics.

Participant page on a phone
The same page in Korean
Picked from the phone's language, with a switcher.

Participant page in Korean

QA Facilitator queue: questions grouped by topic across languages, a merged question to read aloud, Answer now, Me too counts, show-on-phones approval, prepared questions, answered topics sinking to the bottom, and dismissed questions kept for restoring.

QA Facilitator queue

PowerPoint: the Question Desk QR add-in shows the live code on a slide.

QR-only view shown on a PowerPoint slide

Admin: events and their sessions, people and session summary recipients, branding, and health checks.

Admin sessions

Admin branding tab Admin health check
Admin people tab with summary recipients Landing page
Room screen

Regenerate with node scripts/screenshots.js (needs Google Chrome).

Features

  • Events that group sessions, with event branding between the site's and each session's
  • Day-of checklist, printable QR sheets, whole-event summary, and duplicate events and sessions
  • Optional removal of old question wording, a weekly health report, and a queue that stays useful when Gemini is down
  • CSV export and import of sessions, with a preview before anything is saved
  • Activity log of every administrator, QA Facilitator and scheduled action
  • Panelist view for the panel table, and keyboard shortcuts in the QA Facilitator queue
  • Multiple sessions at once, each joined by in-room rotating QR or a shareable link
  • Administrators and per-session QA Facilitators, restricted to the organization's domain
  • Scheduled start and end, and end-of-session summaries
  • Branding: logo, colors, welcome and footer text, per-session overrides for partner events
  • Landing page, health check with failure alerts, and a load-test tool
  • Prepared questions, per-session wait between questions, and drag-to-reorder sessions
  • Guest page that avoids Google's multi-account error for Safari and Firefox
  • PowerPoint add-in that shows the live, rotating QR code on a slide (Windows, Mac, web)
  • Participant page, room screen and topic labels in English, Korean, Spanish, Chinese, Vietnamese, Tagalog and Armenian, chosen per event; translations never soften criticism
  • Larger-text option for participants, a high-contrast room screen, and "Answered" shown on the asker's own phone

Why it's built this way

The audience is anonymous and outside the Google domain, so the app cannot identify individuals. Instead of pretending to rate-limit people, it relies on:

  • Presence: the rotating room code.
  • A per-session question cap.
  • Topic grouping: twenty questions from one person collapse into one card the facilitator dismisses once.

CLAUDE.md explains the constraints and design decisions.

Known issue: "Sorry, unable to open the file at this time"

Google shows this error, before Question Desk runs, to browsers signed into more than one Google account. Turn on the guest page to avoid it for Safari and Firefox: step-by-step fix.

Getting started

See SETUP.md for installation, the Admin page, running an event and load testing. You need a Google Workspace account that can publish web apps to "Anyone", and a Gemini API key.

Development

node --test tests/*.test.js     # functional tests against fake Apps Script services
npm install && npx playwright install webkit chromium
npm run test:browsers           # real-browser layout, behavior and visual comparison tests (WebKit, Chromium)
npm run test:visual:update      # accept an intended visual change as the new baseline
node scripts/check-secrets.js   # blocks keys, IDs and real email addresses
git config core.hooksPath .githooks
  • No dependencies: the web app has no build step or npm packages, and the tests need only Node 18+.
  • Real code under test: the tests run the actual server code, covering roles, sessions, tokens, limits, grouping, email, branding, schedules, health alerts and the load-test endpoint.
  • Releases: scripts/ship.sh handles them; see CHANGELOG.md.

Security

Please report vulnerabilities privately; see SECURITY.md.

License

Copyright 2026 Dwayne Sinclair. Licensed under the Apache License 2.0.

About

Anonymous, multilingual audience Q&A for community meetings: Google Apps Script and Gemini. Built to support the Autism Society of Los Angeles.

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages