Repository navigation
Releases: virtUOS/abstimmbar
Release list
Abstimmbar 1.0.0
Abstimmbar ist ein quelloffenes Live-Abstimmungssystem für Hochschulen: Lehrende stellen Fragen am Beamer, Teilnehmende antworten anonym per QR-Code mit dem eigenen Smartphone, ohne Konto und ohne App. Es entsteht bei virtUOS an der Universität Osnabrück, lässt sich per LTI 1.3 in Lernplattformen einbinden und bietet optionale, selbst hostbare KI-Funktionen.
Website und Anleitung für Lehrende: https://virtuos.github.io/abstimmbar/ · Installation: https://virtuos.github.io/abstimmbar/installation/
Die erste stabile Version. Abstimmbar ist damit für den regulären Einsatz in
der Lehre freigegeben.
Hinweise für den Betrieb
Bitte lesen Sie diese Punkte vor dem Update einer bestehenden Installation.
Die Anleitung „Bestehende Installation aktualisieren“ im
Installationskapitel beschreibt den Ablauf Schritt für Schritt.
- OIDC-Abgleich per Benutzername ist jetzt standardmäßig aus.
OIDC_MATCH_BY_USERNAME_FALLBACKwar bisher an. Wenn Ihre Installation
darauf angewiesen ist (etwa weil der Identity Provider Subjects neu
vergibt), setzen SieOIDC_MATCH_BY_USERNAME_FALLBACK=1. Auch dann
übernimmt der Abgleich nie Konten ohne OIDC-Subject, also weder lokale
Notfall-Administratorkonten noch LTI-Konten (basicbar-auth ≥ 0.2.2)
(#212, #213).- Kein Start mit Platzhalter-Schlüssel. Bei
DJANGO_DEBUG=0verweigert
Abstimmbar den Start, wennDJANGO_SECRET_KEYnoch den Entwicklungs-
bzw. Beispielwert aus.env.prod.exampleträgt (fehlt der Schlüssel
ganz, bricht bereits Docker Compose ab). Erzeugen Sie vor dem Update
einen eigenen Schlüssel, z. B. mitopenssl rand -base64 48(#212, #223).- Caddyfile ohne lokale Anpassungen. Domain, ACME-Kontakt und erlaubte
LMS-Origins für die Einbettung kommen jetzt ausPUBLIC_BASE_URL,
ACME_EMAILundABSTIMMBAR_FRAME_ANCESTORS(leer = nur die eigene
Seite; mehrere Origins durch Leerzeichen getrennt). Haben Sie die
Caddyfile bisher selbst angepasst, übertragen Sie die Werte in die.env
und setzen Sie die Datei mitgit checkout -- Caddyfilezurück. Eigene
Zertifikate und die IP-Einschränkung für/metricsbleiben
dokumentierte Ausnahmen (#223).- Caddy leitet
/c/*an Django weiter. Links und QR-Codes der
Lernkontrolle sowie die LTI-Weiterleitung für Lernende funktionieren
damit in der Standardkonfiguration. Wer einen eigenen Reverse-Proxy
betreibt, findet die Liste der weiterzuleitenden Pfade in der
Installationsanleitung (#212).- Das Image startet uvicorn. Der Standardbefehl des Images ist jetzt
uvicorn (ASGI) statt des Django-Entwicklungsservers; eigene
Compose-Dateien ohne ausdrücklichescommanderhalten damit die
Live-Übertragung zuverlässig (#212).- Größere Uploads im JSON-Format.
DATA_UPLOAD_MAX_MEMORY_SIZEliegt
jetzt bei 10 MiB, damit auch große Fragenset-Importe angenommen werden;
größere Anfragen werden sauber abgelehnt (#214).- Alte API-Teile entfernt: der Endpunkt
reorder-sectionsund der
Parameterresetbeim Start einer Durchführung (siehe „Entfernt“)
(#216).- Neue bzw. jetzt durchgereichte Variablen in der Produktions-Compose:
OIDC_MATCH_BY_USERNAME_FALLBACK,ACME_EMAIL,
ABSTIMMBAR_FRAME_ANCESTORS(Caddy),VITE_GUIDE_URLund
VITE_GUIDE_URL_EN(Ziel des Menüpunkts „Anleitung“, wirken beim
Bauen des Images) (#210, #211, #212, #223).- Plattform-Updates: Django 5.2 LTS, Node 24, Pillow 12, pypdf 6,
react-router 7. Die Datenbank-Migrationen laufen beim Start
automatisch (#214, #220).
Fragetypen
- Mindmap: Beim Ziehen eines Begriffs zeigen alle Begriffe ihre Lasche
„Hier einhängen“; so lässt sich ein Begriff gezielt als Unterbegriff
einhängen statt mit einem anderen zusammengeführt zu werden (#218). - Mindmap: Zusammenführen, Verschieben, Umbenennen und übernommene
KI-Vorschläge werden protokolliert und lassen sich einzeln zurücksetzen,
auch nach einem Neuladen des Beamers (#209). - Mindmap: Die Zahl der Stimmen berücksichtigt jetzt auch Teilnehmende, die
nur bewertet haben (#215). - Mindmap: Der Bewertungsmodus lässt sich nach Beginn der Bewertungsphase
nicht mehr umstellen, wie bei der Vier-Felder-Matrix (#215). - Frageneditor: Eingaben im Textfeld gehen bei langsamer Verbindung nicht
mehr verloren, der Editor springt beim Laden nicht mehr, und beim
schnellen Weiterklicken überschreiben veraltete Daten keine Änderungen
mehr (#205, #206). - Frageneditor: Zahlenfelder bei Mindmap und Wortwolke springen beim Leeren
nicht mehr auf 1 (#215).
Präsentation
- Mindmap und Vier-Felder-Matrix bleiben nach dem Ende der Abstimmung am
Beamer sichtbar, auch wenn der Timer abgelaufen ist oder Sie die
Präsentation verlassen und wieder betreten haben (#217). - Der Zähler unten links ist jetzt eine Füllpille: Er zeigt Verbundene und
Antwortende und bei Wortwolke, Mindmap und Matrix zusätzlich, wie viele
Beiträge bzw. Punkte von der möglichen Gesamtzahl schon vergeben sind
(#219).
Oberfläche und Anleitung
- Neue Projekt-Website mit Anleitung für Lehrende und Installationsanleitung,
auf Deutsch und Englisch: https://virtuos.github.io/abstimmbar/ (#210,
#211). - Der Menüpunkt „Anleitung“ im Hilfemenü öffnet die Anleitung in der
Sprache der Oberfläche (#210, #211). - Beim Umschalten zwischen einfachem und Experten-Modus erscheint ein
kurzer Hinweis, und neu eingeblendete Bedienelemente werden kurz
hervorgehoben (#222). - Die Versionsnummer steht dezent in der Fußzeile und im Admin-Bereich
(#224). - App und Teilnahmeseite haben ein Favicon und ein Icon für den
Startbildschirm von Smartphones (#221). - Fehlermeldungen des Servers erscheinen durchgängig in der gewählten
Sprache (#215).
KI
- Vier-Felder-Matrix: Die KI schlägt vor, ähnliche Karten zu Sammelkarten
zusammenzufassen (wählbar: nur Schreibweise, inhaltlich gleich,
konzeptionell ähnlich). Sie prüfen jeden Vorschlag, können Titel und
Kategorie anpassen und das Übernehmen rückgängig machen. An die KI gehen
nur Karteninhalte, keine Daten über Teilnehmende (#207, #208). - Fragen aus Dokumenten: Ist das Material ungeeignet, nennt die KI jetzt
den Grund, statt einfach keine Fragen zu liefern (#216). - Antworten in Aufzeichnungen werden jetzt ebenfalls von der KI bewertet
und bleiben nicht mehr auf „wird bewertet“ stehen (#215). - Auf der Ergebnisseite erscheinen KI-Funktionen nur, wenn die KI für die
jeweilige Frage eingeschaltet ist (#215).
Teilnahme
- Wortwolken- und Freitextantworten mit unsichtbaren Steuerzeichen führen
nicht mehr zu einem Fehler; zusammengesetzte Emoji bleiben erhalten
(#215). - Links und QR-Codes der Lernkontrolle funktionieren in der
Standardinstallation (#212).
Ergebnisse und Export
- Im CSV-Export stehen Matrix-Koordinaten als echte Zahlen, und
Kategorienamen der Matrix fallen bei fehlender Übersetzung auf die
Hauptsprache zurück (#212, #215).
Sicherheit
- Für den Betrieb relevant: Der OIDC-Abgleich per Benutzername ist
standardmäßig aus und übernimmt nie lokale oder LTI-Konten; eine
Namenskollision führt zu einer sauberen Ablehnung statt zu einem
Serverfehler. Setzen Sie bei BedarfOIDC_MATCH_BY_USERNAME_FALLBACK=1
(#212, #213). - Für den Betrieb relevant: Ohne eigenen
DJANGO_SECRET_KEYstartet
eine Produktionsinstallation nicht mehr (#212). - CSV-Export: Alle Textzellen sind gegen Formel-Injektion in
Tabellenkalkulationen geschützt, auch Frage- und Antworttexte aus
importierten oder geteilten Sets (#212). - LTI: „Nutzende per E-Mail verknüpfen“ ist für neu angelegte Plattformen
standardmäßig aus (#212). - Abhängigkeiten mit bekannten Sicherheitslücken aktualisiert, u. a.
Django 5.2 LTS, Pillow 12, pypdf 6 und react-router 7 (#214, #220).
Deployment und Betrieb
- Die Caddyfile wird vollständig über Variablen in der
.envkonfiguriert;
eingit pullbleibt nicht mehr an lokalen Änderungen hängen (#223). - Installationsanleitung: neuer Pflichtschritt „Secret Key erzeugen“ und
neues Kapitel „Bestehende Installation aktualisieren“ (#223). - Die Installationsanleitung nennt die Pfade, die ein eigener
Reverse-Proxy an Django weitergeben muss (#212). - Das Image startet standardmäßig uvicorn; Caddy leitet
/c/*an Django
weiter (#212). - Fragenset-Importe bis 10 MiB werden angenommen (#214).
- Laufzeit auf Node 24 LTS und Django 5.2 LTS angehoben; ungenutzte
Abhängigkeiten entfernt (#214). - Release-Images tragen die Versionsnummer aus dem Git-Tag und werden
sowohl als1.0.0als auch alsv1.0.0(undlatest) veröffentlicht;
fürABSTIMMBAR_VERSIONeignet sich damit der Name des Git-Tags (#224).
Barrierefreiheit
- Die Schaltflächen „Wieder einblenden“ bzw. „Wieder anzeigen“ in Mindmap,
Wortwolke und Matrix haben Namen, die mit dem sichtbaren Text
übereinstimmen (#218). - Die Lasche „Hier einhängen“ der Mindmap hat einen zugänglichen Namen
(#218). - Die Füllpille am Beamer hat Screenreader-Beschriftungen je Zahl und
verzichtet bei reduzierter Bewegung auf Animationen (#219). - Die Rangliste der Mindmap wird als nummerierte Liste ausgegeben; Kontraste
in Rangliste und Hinweisbannern verbessert (#215). - Deaktivierte Bewertungsknöpfe der Matrix auf der Teilnahmeseite nennen
den Grund, wie bei der Mindmap (#215). - Nach einer Moderationsaktion springt der Fokus nicht mehr auf deaktivierte
Knöpfe (#215). - Selbst verfasste Tabellen, etwa in der Datenschutzerklärung, scrollen auf
dem Smartphone in einem eigenen, per Tastatur erreichbaren Rahmen (#222).
Entfernt
- API-Endpunkt
POST question-sets/<id>/reorder-sections/; verwenden Sie
reorder-outline(#216). - Parameter
resetbeim Start einer Durchführung (start-run): Er wird
ignoriert, maßgeblich ist alleinexisting. Ältere Skripte mit
reset: truesetzen eine Durchführung damit fort, statt sie zu löschen
(#216). - Interne Aufräumarbeiten: unge...
v0.1.2
What's Changed
- Add Playwright e2e testing setup by @mheyen in #5
- Deep-link to a specific question (play button + copy link) — Closes #7 by @rrolf in #8
- Skip start dialog + lobby during a recent ongoing session by @rrolf in #9
- Deep-link polish: play opens a new tab, close-window button, hide in easy mode by @rrolf in #10
- Presenter: toggle results and answer reveal (GitLab #82, #83) by @rrolf in #11
- Restore segmented reveal pill onto main (PR #24 mis-merged into stacked base) by @rrolf in #33
- Clearer ordering & priorities results: braces, pair-% and whiskers by @rrolf in #34
- Reject empty questions/choices + friendly page for invalid room codes by @rrolf in #35
- Restore defer-question-creation onto main (PR #36 mis-merged into stacked base) by @rrolf in #37
- Editor blockers: image overflow, preview 404, settings/new-set conflict by @rrolf in #38
- Dev: proxy /media to the backend so editor images load by @rrolf in #39
- Mobile layout cluster: overflow, toggle, info popover, toolbar, delete dialog by @rrolf in #40
- Question sets as cards with a sort dropdown (like the rooms list) by @rrolf in #41
- Consistent settings-form design across the room & set editors (#22) by @rrolf in #42
- Header/user-menu IA + rooms active/archived/all filter (#25/#26/#27) by @rrolf in #43
- feat(ui): draggable, equal-width SegmentedControl across the app (#13) by @rrolf in #44
- feat(present): move the reveal pill next to the question indicator by @rrolf in #45
- fix(rooms): consistent card action icons + a delete tooltip (#28, #29) by @rrolf in #46
- fix(ui): dark-mode contrast for the tinted editor/form panels (#16) by @rrolf in #47
- fix(rooms): bilingual default title for untitled rooms/sets (#19) by @rrolf in #48
- feat(ai): optional guidance prompt for document generation (GitLab #84) by @rrolf in #49
- feat(questions): True/False preset + in document generation (GitLab #79) by @rrolf in #50
- feat(admin): multilingual AI privacy notice, editable in the admin area (GitLab #80) by @rrolf in #51
- feat(rooms): declutter the room header, esp. in simple mode (GitLab #78) by @rrolf in #52
- feat(present): on-demand QR/join panel on the beamer by @rrolf in #53
- fix(deploy): proxy /r/* (recording viewer + QR) to Django in Caddy by @rrolf in #55
- feat(present): show server name instead of
/p/<code>on the beamer start screen by @rrolf in #76 - feat(present): word-cloud view controls beside the reveal slider + question-only view by @rrolf in #80
- feat: free-text AI evaluation against a model solution by @rrolf in #83
- feat(ai-generate): model solutions for generated free-text questions by @rrolf in #84
- fix(present): E returns to results (not question) from a revealed solution (#61) by @rrolf in #85
- fix(live): serialize concurrent start-run so shared rooms don't break (#66) by @rrolf in #95
- fix(results): correct inverted Likert polarity (#93) by @rrolf in #104
- feat(likert): make the centre line stick out above/below the bar by @rrolf in #105
- fix(editor): kind-accurate validation + AI sanity (#88, #90, #100, #101) by @rrolf in #106
- feat(editor): AI actions (rephrase / distractors) available while creating a question by @rrolf in #107
- fix: dark mode for the framework-free live templates (#56, #73) by @rrolf in #108
- fix(participant): clarify self-paced score counts only auto-graded questions (#67) by @rrolf in #110
- fix(ux): quick-wins + breadcrumb/list clarity (#57, #68, #69, #74, #89, #97, #98) by @rrolf in #109
- fix(editor): calmer time-limit marker, working sticky Save bar, move in a kebab menu by @rrolf in #111
- fix(mobile): lift the translate-all button above the sticky action bar by @rrolf in #112
- feat(editor): random order for priorities + toggle-switch redesign (#96, #98) by @rrolf in #113
- feat: copy questions across sets + pull-in picker (#87) by @rrolf in #114
- feat(sets): friendlier defaults for new question sets by @rrolf in #115
- fix(mobile): info popover on-screen (#14) + rooms filter fits (#71) by @rrolf in #116
- fix(mobile): rooms page — full-width titles, actions below (#81) by @rrolf in #117
- fix(beamer): long content scrolls, scales on small windows, QR not covered (#62, #63, #79) by @rrolf in #118
- fix(rooms): hide list controls while creating a room (#72) by @rrolf in #119
- feat(onboarding): seed an example room on first login (#78) by @rrolf in #122
- feat(landing): clearer intro + unified signed-out preferences menu (#58, #60) by @rrolf in #121
- fix(admin): LTI platform buttons squeezed thin on mobile (#64) by @rrolf in #120
- feat(i18n): detect & fix stale question translations (#91) by @rrolf in #123
- feat(i18n): one-click language switch for all editor fields (#99) by @rrolf in #124
- feat(rooms): set types — Phase 1 foundation (#75) by @rrolf in #125
- feat(rooms,live): Quiz-Block back-navigation + random question order (Phase 2, #75) by @rrolf in #126
- feat: Lernkontrolle (self_check) — permanent link, local instant feedback, single-question links (Phase 3, #75) by @rrolf in #129
- Lernkontrolle: KI-Rückmeldung bei Freitextantworten (#75) by @rrolf in #130
- Raumkarten: Aufschlüsselung der Fragenset-Typen (#75) by @rrolf in #131
- Kopier-Auswahl: nicht erlaubte Fragetypen anzeigen, aber deaktivieren (#75) by @rrolf in #132
- Einzelfrage kopieren/verschieben: unpassende Ziel-Sets deaktivieren (#75) by @rrolf in #133
- Lernkontrolle: Ergebnisse nach jeder Frage oder erst in der Zusammenfassung (#75) by @rrolf in #134
- Favorit-Herz in der Akzentfarbe statt Rot (GitLab #87) by @rrolf in #135
- Modus 'Pro' in 'Expert'/'Experte' umbenennen (GitLab #86) by @rrolf in #136
- Wortwolke: Beitragszahl vereinfachen + Sammel-Modus (#88) by @rrolf in #137
- Frageneditor: Vor-/Zurück-Pfeile zwischen den Fragen (#92) by @rrolf in #138
- Likert-Skalen: freie Endpunkte, 3–7 Stufen, Presets, Segment-UI (#86, #103) by @rrolf in #139
- fix(live): stabile A/B/C-Zuordnung zwischen Abstimmung und Ergebnis (#127) by @rrolf in #140
- fix(frontend): ungespeicherte Likert-Stufen/Label-Änderungen beim Fragenwechsel abfangen by @rrolf in #141
- fix(live): Aufzeichnungs-Wortwolke erlaubt mehrere Begriffe (#128) by @rrolf in #142
- feat(present): Wortwolken-Präsentation — Kategorie-Farben, Legende, verspielte Live-Animation by @rrolf in #143
- feat(present): „+N weitere Begriffe"-Hinweis, wenn die Wortwolke gedeckelt ist by @rrolf in #144
- feat: Wortwolken-Moderation — Begriffe ausblenden & zusammenführen (am Beamer, reversibel) by @rrolf in #145
- feat(ai): Dokument-Limit für Fragenerstellung konfigurierbar (AI_DOC_MAX_CHARS) by @rrolf in #146
- feat(ai): asynchrone, gechunkte Fragenerstellung mit Fortschrittsanzeige by @rrolf in #147
- fix(oidc): Back-Button nach Login zeigt Fehlerseite (Callback-Replay) by @rrolf in https://github.com/virtUOS/abstimmbar/pul...