Skip to content

Releases: virtUOS/abstimmbar

Abstimmbar 1.0.0

Choose a tag to compare

@rrolf rrolf released this 22 Oct 06:33
d0d9dce

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_FALLBACK war bisher an. Wenn Ihre Installation
    darauf angewiesen ist (etwa weil der Identity Provider Subjects neu
    vergibt), setzen Sie OIDC_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=0 verweigert
    Abstimmbar den Start, wenn DJANGO_SECRET_KEY noch den Entwicklungs-
    bzw. Beispielwert aus .env.prod.example trägt (fehlt der Schlüssel
    ganz, bricht bereits Docker Compose ab). Erzeugen Sie vor dem Update
    einen eigenen Schlüssel, z. B. mit openssl rand -base64 48 (#212, #223).
  • Caddyfile ohne lokale Anpassungen. Domain, ACME-Kontakt und erlaubte
    LMS-Origins für die Einbettung kommen jetzt aus PUBLIC_BASE_URL,
    ACME_EMAIL und ABSTIMMBAR_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 mit git checkout -- Caddyfile zurück. Eigene
    Zertifikate und die IP-Einschränkung für /metrics bleiben
    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ückliches command erhalten damit die
    Live-Übertragung zuverlässig (#212).
  • Größere Uploads im JSON-Format. DATA_UPLOAD_MAX_MEMORY_SIZE liegt
    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-sections und der
    Parameter reset beim 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_URL und
    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 Bedarf OIDC_MATCH_BY_USERNAME_FALLBACK=1
    (#212, #213).
  • Für den Betrieb relevant: Ohne eigenen DJANGO_SECRET_KEY startet
    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 .env konfiguriert;
    ein git pull bleibt 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 als 1.0.0 als auch als v1.0.0 (und latest) veröffentlicht;
    für ABSTIMMBAR_VERSION eignet 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 reset beim Start einer Durchführung (start-run): Er wird
    ignoriert, maßgeblich ist allein existing. Ältere Skripte mit
    reset: true setzen eine Durchführung damit fort, statt sie zu löschen
    (#216).
  • Interne Aufräumarbeiten: unge...
Read more

v0.1.2

Choose a tag to compare

@mheyen mheyen released this 16 Oct 15:46
012d6ef

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...
Read more

v0.1.1

Choose a tag to compare

@mheyen mheyen released this 07 Aug 13:32
fed22db

What's Changed

  • chore: bump @basicbar/ui to v0.3.0 by @mheyen in #3

Full Changelog: v0.1.0...v0.1.1

v0.1.0

v0.1.0 Pre-release
Pre-release

Choose a tag to compare

@mheyen mheyen released this 07 Aug 13:31
52bba1e

What's Changed

  • Feature/release image ci by @mheyen in #1
  • Update package sources for basicbar to refer to GitHub repo by @mheyen in #2

Full Changelog: https://github.com/virtUOS/abstimmbar/commits/v0.1.0