Skip to main content

Conf Quiz

PyPI Python Tests Documentation License: MIT

Conf Quiz turns a PDF slide deck and a YAML file into an interactive conference presentation. Attendees join from their phones, answer anonymously, and see results as the speaker moves through the deck. There are no points or leaderboards.

The presenter runs locally. The attendee app is a static site that can be published with GitHub Pages, and Firebase provides the shared live state.

Features

  • Insert questions after specific PDF pages.
  • Run single choice, multiple choice, yes/no, slider, rating, number, ranking, free-text, and word-cloud questions.
  • Show live results, close voting, and reveal an optional correct answer.
  • Moderate text before it appears on screen.
  • Share the active slide with attendee devices when useful.
  • Rehearse the complete flow without connecting to Firebase.
  • Export a base-path-safe attendee site for GitHub Pages or any static host.
  • Reset a room, generate a new join code, and clean up old sessions from the local presenter tools.

Installation

Conf Quiz supports Python 3.10 and newer.

pip install conf-quiz

With uv:

uv tool install conf-quiz

Quick start

Create a presentation directory:

confquiz init my-talk

This creates quiz.yml, a safe Firebase web-config example, and a blank sample PDF. Copy the example to the local filename used by quiz.yml:

cp my-talk/firebase.web.example.json my-talk/firebase.web.json

firebase.web.json is ignored by Git. Replace its placeholders with the web configuration from your own Firebase project, then replace the PDF and edit quiz.yml:

schema_version: 1

presentation:
  id: my-talk
  title: "Reliable Python services"
  speaker: "Your name"
  public_url: "https://your-account.github.io/my-talk/"
  slides:
    source: "slides.pdf"

firebase:
  web_config: "firebase.web.json"

questions:
  - id: first-poll
    after_slide: 3
    type: single_choice
    prompt: "Which constraint matters most to your team?"
    options:
      - { id: reliability, label: "Reliability" }
      - { id: speed, label: "Delivery speed" }
      - { id: cost, label: "Cost" }

Rehearse locally without Firebase:

confquiz preview my-talk/quiz.yml

The command prints a presenter URL and an attendee URL. The preview room uses the code DEMO26 and keeps all data in memory.

When Firebase is configured, validate and export the attendee site:

confquiz validate my-talk/quiz.yml
confquiz export my-talk/quiz.yml --output my-talk/site

Then start the live presenter:

confquiz present my-talk/quiz.yml --credentials /safe/path/firebase-admin.json

The Admin credential stays on the presenter laptop. It is never included in the exported site.

Firebase

A live room needs:

  • a Cloud Firestore database;
  • Anonymous Authentication;
  • a Firebase web app configuration;
  • a Firebase Admin service-account credential for the presenter; and
  • the included Firestore rules and indexes.

Generate the deployment files in your presentation directory:

confquiz firebase scaffold my-talk

Deploy them before sharing the attendee site:

npx firebase-tools use YOUR_PROJECT_ID
npx firebase-tools deploy --only firestore:rules,firestore:indexes

Every speaker supplies their own firebase.web.json; the package does not ship the maintainer's Firebase project. Its browser identifiers are necessarily included in that speaker's exported attendee site, but the local source file is ignored to prevent accidental reuse or publication. The Admin JSON is a private credential: keep it outside the repository and pass its path to confquiz present.

For a GitHub Actions deployment, store the JSON object in a per-presentation FIREBASE_WEB_CONFIG repository secret and create the ignored file during the build; the deployment guide includes a complete workflow. See the Firebase setup guide for the complete project and App Check setup.

Presenter and attendee sites

confquiz present serves the presenter UI from the speaker's computer. The attendee site is the static output of confquiz export, so it can use a different host and URL. Set presentation.public_url to that address; Conf Quiz uses it in the join link and QR code.

The exported homepage shows the first PDF page even when no room is running. When the presenter starts a room, the join form appears above the presentation.

Documentation

The full documentation covers:

Development

uv sync --extra dev
npm install
npm run build
uv run pytest
npm test

The Firestore rules test uses the Firebase Emulator Suite and requires Java:

npm run test:rules

Documentation contributors need Python 3.11 or newer and Quarto:

uv sync --group docs
uv run --group docs great-docs build

More detail is in the development guide.

Security

Conf Quiz is intended for anonymous conference participation, not elections, assessments, or prize-bearing competitions. Anonymous Authentication limits a browser profile to one response document; it does not prove that one browser equals one person.

Please report security issues privately to the maintainer instead of opening a public issue.

License

Conf Quiz is released under the MIT License. Third-party browser assets and their licenses are listed in THIRD_PARTY_NOTICES.md.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

conf_quiz-1.0.0.tar.gz (982.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

conf_quiz-1.0.0-py3-none-any.whl (980.6 kB view details)

Uploaded Python 3

File details

Details for the file conf_quiz-1.0.0.tar.gz.

File metadata

  • Download URL: conf_quiz-1.0.0.tar.gz
  • Upload date:
  • Size: 982.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for conf_quiz-1.0.0.tar.gz
Algorithm Hash digest
SHA256 7bc18d125b6cb497c372b0951c98e0facfc78d55c7ee74e290fd12d3c581512b
MD5 e37b53939568f02e7f138f21263ecaea
BLAKE2b-256 fbcbf42a5e869c4a724876f0539eeaec8e110092037cc65a380c4666bd5594b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for conf_quiz-1.0.0.tar.gz:

Publisher: publish.yml on adarshdigievo/conf-quiz

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file conf_quiz-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: conf_quiz-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 980.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for conf_quiz-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 88168710b0d61f0878bd769c06081ffbeb1948d414b72ca76eecd96e95fa72ad
MD5 d5d1d5d9ae66c038528c7477299ae228
BLAKE2b-256 6aad7d4b84c74079952d77eeab7bb3c7b8298a4bb3a9acd43b495fd1a75a0467

See more details on using hashes here.

Provenance

The following attestation bundles were made for conf_quiz-1.0.0-py3-none-any.whl:

Publisher: publish.yml on adarshdigievo/conf-quiz

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.2.0

2 files

1.1.0

2 files

This release

1.0.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page