Releases: quizdock/quiz-dock
Release list
QuizDock v0.7.1
Full Changelog: v0.7.0...v0.7.1
QuizDock v0.7.0
🎧 Video & sound in questions — experimental
The headline of 0.7: questions you hear and watch, in the room and from home.
- Video (MP4) and sound (MP3) in any question, brought to the same loudness from one question to the next (EBU R128, per quiz), the sound drawn as a waveform with a playhead that follows the projection on every screen. A media longer than its question stretches it, plus a pause, so nothing is cut mid-play.
- Remote participants: someone joining from home says so and gets the whole question on their device, video and sound included. Who hears the sound is set per quiz, per question and, in the lobby, per session.
- Started together: every device reads the server's clock and starts the media on the same instant. Each one fetches the next question's media ahead, from the lobby, and the room waits a moment for a device still loading.
- Listen first, then answer: a question can keep its answers closed until the media has played, then give everyone the full time.
- Carried by the quiz bundle (version 3) and by templates.
Experimental: tested in Chromium browsers, not yet on iPhone (Safari). Read the audio & video guide before relying on it in front of a room.
Also in this release
- A calmer editor: what is set once and read rarely folds away (sound, a question's media, points, the answer explanation, a slide's display time), and each fold says what it is set to.
- Upgrading: migrations run on start as usual. Back up PostgreSQL first:
./quizdock upgrade 0.7.0.
What's Changed
- feat(media): video and sound in questions — phase 1 (in the room) by @fchaussin in #44
- feat(live): remote participants, per-device preloading and media readiness — media phase 4 by @fchaussin in #45
- feat(live): media phase 4 into main (remote participants, preloading, readiness) by @fchaussin in #46
- feat(live): media start together on every device, and listen-first questions — media phase 5 by @fchaussin in #47
- feat(editor): fold what is secondary, one group per domain; docs ready for v0.7.0 by @fchaussin in #48
Full Changelog: v0.6.0...v0.7.0
QuizDock v0.6.0
Who may host, who takes part, and what a session records about them — plus the question image finally reaching the people the question is for.
Highlights
Roles and participants (#38)
hostbecomes an assignable role:user:set-role <sub|email> hostgrants quiz management without handing outadmin, which was the only workaround so far. The grant is sticky — it survives an expired, taken-over or released host seat, which also fixes an operatoradminbeing silently dropped by those three paths.- Under
AUTH_MODE=oidc, participants authenticate too: the token opens the application, the PIN opens one session. Join pages redirect to sign-in and come back to the invitation, so a scanned QR code still lands on the right session. Their results are attached to their account. - Personalised tracking is a per-session switch. Off, no individual result is archived — only the per-question aggregates and the session summary. The live game is untouched: leaderboard and podium still run.
- The display name can come from the account rather than a typed nickname, at the host's choice, and
OIDC_NAME_CLAIMpoints at whichever claim carries it. - The notice shown to participants says which of these cases applies, in the wording that fits — including when there is no account at all.
Question media (#41, reported by @holjab)
The image attached to a question was rendered only in the host console: it was invisible to the participants and on the projected screen. It now shows on both, capped on the phone so the answer buttons stay where the thumb expects them.
Demo instances
A public demo now lists on its home page what it does not do — one host at a time, no media upload, the hourly wipe — and says that a self-hosted instance has none of those limits. The all-in-one image adds its own.
Upgrading
Two migrations, both additive — nothing is converted, nothing to do by hand. Back up PostgreSQL first and do not roll back once they have run.
| Migration | What it adds |
|---|---|
20260922160000_assignable_host_role |
user.assigned_role, the role an operator granted. Accounts that are admin today are carried over as an admin grant, since that role was already sticky. |
20260922180000_personal_tracking |
game_session_log.personal_tracking, default true — sessions archived so far kept individual results, so they read as they always did. |
Before you upgrade an OIDC instance: participants now need an account. If your identity provider only has accounts for hosts, create them, or keep AUTH_MODE=none for those sessions. AUTH_MODE=none is unchanged — the PIN stays the only barrier.
API: quiz.visibility is no longer part of the documented API or the generated client. The column is untouched and the field is still on the wire; anything reading it should stop — its meaning is being settled in #39 / #21.
Full Changelog: v0.5.1...v0.6.0
QuizDock v0.5.1
What's Changed
- README: link to the public demo instance by @fchaussin in #29
- docs(readme): restructure — hero GIF, main features first, local vs OIDC, fewer badges by @fchaussin in #30
- fix(docker): bake the schema engine matching the runtime so migrate works offline by @fchaussin in #32
- feat(i18n): zh-TW review by noeFly (#16) landed on current main by @fchaussin in #33
- fix(security): clear the 48 code-scanning alerts — :latest was the standalone image by @fchaussin in #36
Full Changelog: v0.5.0...v0.5.1
QuizDock v0.5.0
What's Changed
- feat: enforce roles, intentional local host seat, standards-only OIDC, admin CLI by @fchaussin in #17
- fix(i18n): zh-TW falls back to en, not zh; locale consistency check in CI by @fchaussin in #18
- UX batch: quiz import/export, live typography & reveal, participant screens, answer rules by @fchaussin in #22
- UX batch 2: live typography & reveal, host navigation, scoring variants, seat menu, routes by @fchaussin in #24
- Release version, invitation address, live/editor fixes by @fchaussin in #25
- Demo mode for a public instance by @fchaussin in #26
- feat(cli): quiz export / import + store fields in the bundle by @fchaussin in #27
- docs: pre-0.5.0 audit — Keycloak link, CLI quiz export / import mentions by @fchaussin in #28
Full Changelog: v0.4.2...v0.5.0
Upgrading
Four migrations, applied automatically on start (migrate service or the :standalone entrypoint). Back up PostgreSQL first, as always.
20260918120000_add_host_seat— new tablehost_seat(local mode: who holds the host seat, until when). Additive.20260919140000_text_outline_default_on—slide.text_outlineandquestion.text_outlinenow default totrue. Data touched: the built-in sample quizzes (Discover France, Discover Taiwan) are switched to the new default; every other row keeps its setting.20260920090000_question_scoring— new enum valuepoints_mode.fixed, new enumquestion_scoringand columnquestion.scoring(defaultstandard). Additive.20260920150000_quiz_store_fields— new columns onquiz:slug,namespace,revision,domain,tags,license(all nullable or defaulted). Additive.
Nothing to do by hand. The :standalone image and the compose stack upgrade the same way: ./quizdock upgrade 0.5.0, or pull the tag and up again (see Upgrading).
Operators: the in-image CLI gains qd quiz:list, qd quiz:export, qd quiz:import (relayed by ./quizdock quiz:export <id> <file.zip> / quiz:import <file> <sub|email>).
QuizDock v0.4.2
⬆️ Upgrading from 0.4.1
No database migration, no new configuration knob, live contract unchanged: pull the new tag and restart.
✨ Highlights
- Traditional Chinese (zh-TW) follow-up to the locale contributed by @noeFly in #1: the dashboard now loads the zh-TW dictionary (it was showing Simplified Chinese), nickname typo fixed, and the 143 keys added since (slides, backgrounds, drafts, feedback, navigation…) are translated — machine-assisted with Taiwan usage, native review welcome.
- Locale parity test — every language must carry exactly the keys of
en; the failure message lists what is missing or orphaned.
What's Changed
- fix(i18n): zh-TW follow-up — dashboard import, typo, 143 missing keys, parity test by @fchaussin in #15
Full Changelog: v0.4.1...v0.4.2
QuizDock v0.4.1
⬆️ Upgrading from 0.4.0
No database migration and no new configuration knob: pull the new tag and restart. Media on MEDIA_DIR is untouched.
The live contract is unchanged (game:outline and the active-games list simply gain a quizId field); a page reload of projected screens and participant phones is enough.
✨ Highlights
- Traditional Chinese (zh-TW) locale — first external contribution, thanks @noeFly (#1).
- Slide text size — S / M / L picker (20 / 30 / 40 px on the stage) next to the alignment control; body text no longer defaults to a tiny size.
- Drafts — question, slide and quiz-settings forms keep their in-progress state in the browser until saved or discarded; reload or close the tab without losing work.
- Participants — nickname remembered between games, feedback comment kept until sent, Leave action and "Join another game" after the podium.
- Host console — breadcrumb back to the editor, sticky action rows, same explanatory confirmation as the editor before recording all answers.
- Dashboard — badge showing how many sessions of a quiz are currently running.
- Editor — one-line description of the selected question type's behaviour; page titles per route.
What's Changed
- feat(i18n): add zh-TW translations by @noeFly in #1
- 0.4.1: slide text size, drafts, navigation, console polish by @fchaussin in #14
New Contributors
Full Changelog: v0.4.0...v0.4.1
QuizDock v0.4.0
⬆️ Upgrading from 0.3.x
This release adds 11 database migrations, applied automatically on start (migrate service of docker-compose.prod.yml, or the :standalone entrypoint). Before pulling the new tag:
- Back up PostgreSQL —
docker compose -f docker-compose.prod.yml exec postgres pg_dump -U live quizdock > backup.sql. One migration converts data: existing content slides become block compositions (title → heading, media → image block or background, body → text). - No rollback to 0.3.x once migrated (slide
title/body/layoutcolumns are dropped) — restore the backup instead. - Nothing manual otherwise. Media on
MEDIA_DIRis untouched.
New knobs (optional): GAME_AUTO_ADVANCE_MS (default 5000), GAME_READ_DELAY_MS (default 3000) — see configuration.
Live contract bumped to 0.3.0 (SLIDE_SHOW state, slide:show event, backgrounds on question:start): projected screens and participant phones must load the same version as the server — a page reload is enough.
✨ Highlights
- Quiz builder reworked — master/detail editor, drag-and-drop ordering, in-place title, unsaved-change guards, confirmation before deleting, status bar with live PIN and access screens.
- Rich text — Markdown with a visual editor (bold, lists, code, inline images) for prompts, options, descriptions.
- Answer explanations shown at the reveal, per-question reveal delay in automatic mode.
- Content slides between questions — block composer (headings, text, images, 2–3 columns with splits), per-block alignment, 16:9 preview, display time (default / manual / custom).
- Backgrounds (image or gradient generator) with text contrast, for slides and questions.
- Options — up to 8, distinct colour/shape pairs, drag-and-drop.
- Player feedback — per-quiz on/off, paginated reviews page with star distribution.
What's Changed
- fix(security): remediate transitive HIGH/CRITICAL CVEs, scan before audit gate by @fchaussin in #3
- feat(frontend): Markdown fields with WYSIWYG editor by @fchaussin in #9
- feat: answer explanation shown at reveal by @fchaussin in #10
- feat: per-question reveal delay in auto mode by @fchaussin in #11
- feat: content slides in the quiz sequence by @fchaussin in #12
- Builder rework: master/detail editor, slide composer, backgrounds, feedback by @fchaussin in #13
New Contributors
- @fchaussin made their first contribution in #3
Full Changelog: v0.3.2...v0.4.0
QuizDock v0.3.2
v0.3.2
Security remediation + continuous scanning.
- fix(security): bump vulnerable transitive deps via pnpm overrides (patch/minor, same major)
ws8.20.1 → 8.21.0 (GHSA-96hv-2xvq-fx4p, high)multer2.1.1 → 2.2.0 (GHSA-72gw-mp4g-v24j, high)js-yaml4.1.1 → 4.2.0 ·@hono/node-server→ 1.19.14pnpm audit --prodnow clean; tests green (137 backend + 54 frontend)
- ci:
Securityworkflow — pnpm audit gate + Trivy fs/image scans (SARIF → Security tab) - docs:
SECURITY.md+docs/security/point-in-time audit (2026-06-25)
Images
fchaussin/quizdock:0.3.2 · :latest · :standalone-0.3.2 · :standalone (multi-arch amd64/arm64)
QuizDock v0.3.1
v0.3.1
All-in-one image for beginners + documentation split.
- feat(deploy): all-in-one
:standaloneimage — Postgres + Redis bundled, onedocker run - docs: detailed configuration, branding & OIDC guide
- docs: split developer vs user/integrator docs (
docs/self-hosting/) - docs: 1024×768 screenshots gallery + full badge row + Docker Hub overview
Images
fchaussin/quizdock:0.3.1 · :standalone-0.3.1 (multi-arch amd64/arm64)
docker run -p 18080:3000 -v quizdock:/data fchaussin/quizdock:standalone-0.3.1