Zum Hauptinhalt springen

10 Posts getaggt mit "feature"

Alle Tags anzeigen

Uni-Verein 1.8.2 – Sicherere Mails, maskierte IBANs und Vereinslogo 🛡️✉️

· 4 Minuten Lesezeit
René Herrmann
Senior developer

Veröffentlicht am 30. September 2026

Uni-Verein 1.8.2 setzt die Sicherheitsarbeit aus 1.8.1 fort: Mail-Inhalte werden serverseitig bereinigt, IBANs sind für reguläre User maskiert und der Passwortwechsel verlangt das aktuelle Passwort. Dazu kommen ein eigener Absendername für Mails und das Vereinslogo in der Seitenleiste.

Highlights​

  • 🛡️ Sicherere Mails: Mail-Inhalte werden auf dem Server bereinigt. Es bleibt nur die Formatierung erhalten, die der Mail-Editor erzeugen kann, Skripte, Event-Handler, javascript:-Links, Formulare und iframes werden entfernt
  • 🔒 IBANs für reguläre User maskiert: Nur ADMIN und FINANCIAL_MANAGER sehen vollständige IBANs, die Rolle USER sieht sie bis auf die letzten 6 Zeichen maskiert
  • 🔑 Passwortwechsel nur mit aktuellem Passwort: Falsche Eingaben zählen zur Login-Sperre
  • ✉️ Absendername für Mails: Neues Feld "Absendername" in den Mail-Einstellungen, damit Mails z. B. als Vorstand <vorstand@verein.de> erscheinen
  • 🖼️ Vereinslogo in der Seitenleiste: Die Seitenleiste zeigt das Logo aus den allgemeinen Einstellungen

Neue Funktionen​

  • ✉️ Absendername (UV-47): Die Mail-Einstellungen haben ein neues optionales Feld "Absendername", das Empfänger als Absender sehen. Bisher wurde "Absender Email (From)" gleichzeitig als Name und Adresse verwendet, sodass die Eingabe eines Namens dort den Mailversand scheitern ließ. Das Feld für die Absender-E-Mail akzeptiert jetzt nur noch eine gültige Adresse
  • 🖼️ Vereinslogo in der Seitenleiste (UV-24): Das Logo aus den allgemeinen Einstellungen erscheint oben links in der Seitenleiste, sowohl aufgeklappt als auch eingeklappt. Ist kein Logo hochgeladen, wird weiterhin der erste Buchstabe des Vereinsnamens angezeigt

Sicherheit​

  • 🛡️ Mail-Inhalte bereinigen (UV-17): Der Text von Mails, die über /mail/send verschickt werden, wird serverseitig mit HtmlSanitizer bereinigt. Erhalten bleiben Text, Überschriften, Listen, Links, Bilder, Farben und Ausrichtung. Skripte, Event-Handler, javascript:-Links, Formulare und iframes werden entfernt, data:-URLs sind nur für Inline-Bilder erlaubt (kein SVG). Markdown-Release-Notes in Firmware-Update-Mails rendern außerdem kein rohes HTML mehr
  • 🔒 IBANs maskieren (UV-26): Vollständige IBANs der Mitglieder erhalten nur ADMIN und FINANCIAL_MANAGER. Die Rolle USER bekommt sie bis auf die letzten 6 Zeichen maskiert (Mitgliederliste, Antworten beim Anlegen/Ändern von Mitgliedern und die Warteschlange "Ausstehende Mitglieder"). So lässt sich eine IBAN weiterhin prüfen und durch eine neue ersetzen. Eine maskierte IBAN, die zurück an die API geschickt wird, gilt als unverändert und wird nie gespeichert
  • 🔑 Aktuelles Passwort erforderlich (UV-30): Wer sein eigenes Passwort ändert, muss das aktuelle eingeben, sowohl in den Profileinstellungen als auch, wenn ein Admin in der Benutzerverwaltung seinen eigenen Account bearbeitet. Falsche Versuche zählen zur Login-Sperre. Admins können die Passwörter anderer Benutzer weiterhin ohne das alte Passwort zurücksetzen
  • 🧰 Die transitive Build-Abhängigkeit serialize-javascript wurde auf 7.1.2 angehoben, um GHSA-gfhx-hw2g-v5hg zu beheben (XSS durch nicht maskiertes </script> in serialisierten Funktionskörpern, Schweregrad niedrig)

⚠️ Hinweise zum Update​

  • Immer mit docker-compose-update.yml aktualisieren, wie in der README beschrieben
  • Die Datenbank-Migration (AddMailFromName) läuft beim Start automatisch. Bestehende Mail-Einstellungen funktionieren weiter, der neue Absendername ist zunächst leer
  • Wer als Workaround einen Namen in "Absender Email (From)" eingetragen hatte, sollte ihn in das neue Feld "Absendername" verschieben. Das Feld für die Absender-E-Mail akzeptiert nur noch eine gültige Adresse

Warum diese Updates wichtig sind​

Mails sind ein sensibler Weg: Wer Inhalte aus dem Editor versendet, soll sich darauf verlassen können, dass dabei kein aktiver Code mitreist. Maskierte IBANs sorgen dafür, dass Bankdaten nur diejenigen vollständig sehen, die sie wirklich brauchen, und die Abfrage des aktuellen Passworts schützt Accounts auch dann, wenn jemand kurz an einem entsperrten Rechner sitzt. Absendername und Logo machen den Verein zudem im Postfach und in der Oberfläche besser erkennbar.

Wie geht es weiter?​

Weiteres Feedback aus der Praxis ist wie immer herzlich willkommen, gerne über GitHub Issues. Schaut auch weiterhin gerne hier vorbei!

Uni-Verein 1.8.1 – HTTPS inklusive und umfassende Sicherheitshärtung 🔐🛡️

· 5 Minuten Lesezeit
René Herrmann
Senior developer

Veröffentlicht am 26. September 2026

Uni-Verein 1.8.1 ist ein Sicherheits-Release: Die Installation bekommt HTTPS direkt ab Werk, der Login wird deutlich robuster gegen Angriffe, Uploads werden strenger geprüft und alle Container laufen ohne Root-Rechte.

Highlights​

  • 🔐 HTTPS ab Werk: Eine neue docker-compose-tls.yml samt Caddyfile stellt Caddy vor den Stack und holt automatisch ein Let's-Encrypt-Zertifikat. Das ist jetzt der empfohlene Installationsweg
  • 🛡️ Gehärteter Login: Rate-Limiting pro IP, keine Rückschlüsse mehr darauf, ob ein Benutzername existiert, und Sperren dauern höchstens 15 statt bis zu 24 Stunden
  • 🔑 Kein Standard-Admin-Passwort mehr im Einsatz: Wer sich mit admin123 anmeldet, muss zuerst ein neues Passwort setzen
  • 📦 Sicherere Uploads und Container: Belegdateien werden anhand ihres tatsächlichen Inhalts geprüft, Upload-Größen sind begrenzt, alle Container laufen als Nicht-Root-User

Neue Funktionen​

  • 🔐 HTTPS mit Let's Encrypt (UV-27): docker-compose-tls.yml und Caddyfile richten automatisches HTTPS ein (erfordert einen DNS-Eintrag sowie die Ports 80 und 443). Der Selbst-Update-Ablauf erkennt und unterstützt beide Varianten und aktualisiert auch das Caddyfile. nginx ermittelt die echte Client-IP hinter Caddy, damit Rate-Limiting und Audit-Logs weiter funktionieren
  • 🚦 Rate-Limiter für den Login (UV-31): /auth/login ist pro IP-Adresse begrenzt (Standard 20 Anfragen pro Zeitfenster, konfigurierbar über RateLimiting:AuthLogin:PermitLimit)
  • 🔑 Passwortwechsel erzwungen (UV-25): Beim Login mit dem Standardpasswort admin123 erscheint ein Dialog, der sich erst nach dem Setzen eines neuen Passworts schließen lässt
  • 🔍 Automatische Abhängigkeitsprüfung (UV-42): npm audit --audit-level=high läuft in der CI, dazu kommt Dependabot (ein gebündelter wöchentlicher PR, keine Major-Updates)

Verbesserungen​

  • 🔒 Authentifizierung als Standard (UV-41): Alle Endpunkte erfordern jetzt standardmäßig eine Anmeldung. Bewusst öffentliche Endpunkte (Login, Selbstregistrierung, öffentliche Seitenkonfiguration, /health) sind ausdrücklich freigegeben
  • ⏱️ Fairere Sperren (UV-45): Fehlversuche beim Login verfallen nach 15 Minuten, und die Sperre ist auf maximal 15 Minuten begrenzt (vorher bis zu 24 Stunden)
  • 👤 Admin-Schutz (UV-25): Der Standard-Admin wird nur noch angelegt, wenn noch gar kein Benutzer existiert. Admins können sich nicht mehr selbst löschen oder ihre eigene Rolle ändern
  • 🧾 Uploads nach Inhalt prüfen (UV-32): Belegdateien werden anhand der Magic Bytes (PNG, JPEG, GIF, WebP, PDF) validiert statt anhand des vom Browser gemeldeten Typs. SVG und unbekannte Formate werden abgelehnt. Downloads senden X-Content-Type-Options: nosniff und Content-Disposition: attachment
  • 📏 Upload-Limits (UV-43): Das globale Request-Limit sinkt von 10 GB auf 100 MB, nur die Backup-Wiederherstellung behält 10 GB. Belegdateien und der CSV-Import der Mitglieder sind auf 10 MB pro Datei begrenzt, zu große PDFs werden schon im Browser abgelehnt
  • 🧱 Security-Header (UV-33): Beide nginx-Konfigurationen senden CSP, X-Frame-Options, nosniff, Referrer-Policy und Permissions-Policy
  • 🌐 CORS (UV-28): Erlaubte Origins werden über Cors:AllowedOrigins konfiguriert (in Produktion leer), statt jeden localhost-Origin zuzulassen
  • 🔗 Sichere Bestätigungslinks (UV-35): Die Links der Selbstregistrierung nutzen eine gespeicherte PublicBaseUrl statt des Host-Headers der Anfrage, sodass keine Phishing-Links über gefälschte Hosts möglich sind
  • 📦 Container ohne Root (UV-37): Alle Container laufen als Nicht-Root-User, mit cap_drop: [ALL] und no-new-privileges, wo es möglich ist
  • 🗝️ Geheimnisse (UV-38, UV-39): Das Init-Skript erzeugt zufällige Datenbank-Passwörter und gibt nur noch die Namen der .env-Schlüssel aus, nicht deren Werte. .env.example enthält nur Platzhalter statt echter Schlüssel
  • 🧰 Abhängigkeiten (UV-40): Serilog.Sinks.File ist auf die stabile Version 7.0.0 festgelegt, das ungenutzte BCrypt.Net-Next wurde entfernt, dazu Minor-/Patch-Updates für Backend und Frontend

Fehlerbehebungen​

  • 🖥️ Weißer Bildschirm nach dem Login (UV-18): Nach einem Update konnten veraltete, nachgeladene Programmteile einen leeren Bildschirm verursachen. Die App lädt jetzt automatisch neu, sobald ein neuer Service Worker übernimmt
  • 🔔 Firmware-Hinweis (UV-46): Der Hinweis auf ein Firmware-Update vergleicht jetzt echte Versionsnummern und erscheint nur, wenn tatsächlich eine neuere Version existiert
  • 🕵️ Benutzernamen-Enumeration (UV-44): Die Antwortzeit beim Login verrät nicht mehr, ob ein Benutzername existiert. Rohe Benutzernamen werden nicht mehr ins Log geschrieben
  • 🌍 Gefälschte IP-Header (UV-34): X-Real-IP wird nur noch aus privaten bzw. internen Netzen akzeptiert, damit sich IP-basierte Limits nicht mit einem gefälschten Header umgehen lassen

⚠️ Hinweise zum Update​

  • Immer mit docker-compose-update.yml aktualisieren, wie in der README beschrieben. Proxy und Frontend lauschen im Container jetzt auf Port 8080 (der Host-Port bleibt 80), daher müssen nginx.conf und die Compose-Datei gemeinsam ersetzt werden. Das Update-Skript erledigt das für dich
  • logs/ und receipts/ müssen für das Nicht-Root-Backend (UID 1654) beschreibbar sein. Das Update-Skript kümmert sich über docker-compose-ini.yml darum. Bei einer manuellen Installation: chown -R 1654:1654 logs receipts
  • Wer die Selbstregistrierung nutzt: War sie schon vor dem Update aktiviert, muss ein Admin einmal die allgemeinen Einstellungen öffnen und speichern. Dabei wird die öffentliche URL für die Bestätigungslinks hinterlegt. Bis dahin schlagen neue Anmeldungen fehl
  • Die Datenbank-Migration (AddLastFailedLoginAttemptAndPublicBaseUrl) läuft beim Start automatisch

Warum diese Updates wichtig sind​

Ein Vereinssystem verwaltet Namen, Adressen und Bankdaten und sollte daher so sicher betrieben werden wie möglich. Mit HTTPS ab Werk, einem robusteren Login und strengeren Prüfungen bei Uploads und Netzwerkzugriffen schließt 1.8.1 gleich eine ganze Reihe möglicher Angriffsflächen. Dass die Container jetzt ohne Root-Rechte laufen, begrenzt zudem den Schaden, falls doch einmal etwas schiefgeht.

Wie geht es weiter?​

Weiteres Feedback aus der Praxis ist wie immer herzlich willkommen, gerne über GitHub Issues. Schaut auch weiterhin gerne hier vorbei!

Uni-Verein 1.8.0 – Selbstregistrierung für den Dauereinsatz 📝✅

· 3 Minuten Lesezeit
René Herrmann
Senior developer

Veröffentlicht am 20. September 2026

Uni-Verein 1.8.0 macht die Selbstregistrierung (bisher gedacht für den kurzzeitigen Einsatz z. B. am Messestand) fit für den dauerhaften Betrieb: Anmeldungen legen jetzt erst nach bestätigter E-Mail-Adresse und Prüfung durch eine eingeloggte Person ein Mitglied an, statt sofort. Dazu kommt eine neue Opt-in-Benachrichtigung für neue Anmeldungen und ein Sicherheits-Fix bei bereits bezahlten Belegen.

Highlights​

  • 📝 Gehärtete Selbstregistrierung: E-Mail-Bestätigung (48h) plus Prüf-Warteschlange statt direkter Mitgliedsanlage
  • 🔔 Opt-in-Benachrichtigung: Jede eingeloggte Person kann sich per Mail über neue Anmeldungen informieren lassen
  • 🔒 Beleg-Fix: Bereits bezahlte Belege können von regulären Usern nicht mehr gelöscht werden

Neue Funktionen​

  • 📝 Selbstregistrierung: Das öffentliche Formular erstellt kein Mitglied mehr direkt, sondern verlangt zunächst eine Bestätigung der angegebenen E-Mail-Adresse über einen 48 Stunden gültigen Link. Erst danach landet die Anmeldung im Tab "Ausstehende Mitglieder" der Mitgliederverwaltung, sichtbar für alle eingeloggten Rollen, die sie dort genehmigen oder ablehnen können
  • ✍️ Motivation statt Kategorie: Interessierte geben stattdessen eine kurze Motivation sowie verpflichtend IBAN und BIC an, eine Mitgliederkategorie wird erst von der prüfenden Person beim Genehmigen vergeben
  • 🛡️ Härtung fürs Tagesgeschäft: Rate-Limiting pro IP-Adresse, strengere E-Mail-Validierung, eine Voraussetzung, dass Mail-Einstellungen konfiguriert sind, bevor die Selbstregistrierung aktiviert werden kann, sowie eine mobil-freundliche Ansicht für die Warteschlange
  • 🔔 Benachrichtigung bei neuer Anmeldung: Jede eingeloggte Person kann sich unabhängig von ihrer Rolle über einen neuen Schalter in den Benachrichtigungseinstellungen für eine E-Mail bei jeder neu bestätigten Anmeldung eintragen, standardmäßig deaktiviert

Fehlerbehebungen​

  • 🔒 Beleg-Löschen nach Bezahlung: Ein regulärer User konnte einen eigenen Beleg auch dann noch löschen, wenn er von Admin oder Finanzverwalter bereits als bezahlt markiert worden war, da die Löschprüfung nur den Beleg-Besitzer, nicht aber den Bezahlt-Status berücksichtigte. Das Löschen eines bezahlten Belegs durch reguläre User liefert jetzt einen Fehler, der Löschen-Button wird dafür ausgeblendet. Admin und Finanzverwalter können bezahlte Belege weiterhin löschen

Warum diese Updates wichtig sind​

Die ursprüngliche Selbstregistrierung war für den kurzzeitigen Einsatz gedacht, etwa um bei einer Veranstaltung schnell neue Mitglieder zu gewinnen. Für den dauerhaften Einsatz auf der Vereinswebsite braucht es mehr Absicherung: Die E-Mail-Bestätigung verhindert Anmeldungen mit falschen oder fremden Adressen, die Prüf-Warteschlange gibt dem Vorstand die Kontrolle über jede neue Aufnahme, und die Opt-in-Benachrichtigung sorgt dafür, dass niemand manuell nachschauen muss, ob etwas Neues wartet.

Wie geht es weiter?​

Weiteres Feedback aus der Praxis ist wie immer herzlich willkommen, gerne über GitHub Issues. Schaut auch weiterhin gerne hier vorbei!

Uni-Verein 1.7.0 – Selbstregistrierung für neue Mitglieder 📝

· 2 Minuten Lesezeit
René Herrmann
Senior developer

Veröffentlicht am 5. September 2026

Uni-Verein 1.7.0 macht die Mitgliederaufnahme einfacher: Interessierte können sich ab sofort über ein öffentliches Formular selbst anmelden, ganz ohne eigenen Account. Dazu bringt dieses Release wichtige Sicherheitsupdates für einige Abhängigkeiten.

Neue Funktionen​

  • 📝 Selbstregistrierung: Ein neues, öffentlich erreichbares Formular erlaubt es Interessierten, sich selbst als Mitglied anzumelden (ganz ohne eigenen Account)
  • 🔒 Serverseitig geschützte Felder: Daten, die nur der Nutzer setzen darf oder die automatisch vergeben werden (Aufgabe im Verein, Datumsfelder, SEPA-Zustimmung), sind im öffentlichen Formular ausgeblendet und werden serverseitig erzwungen
  • 🚫 Duplikatsprüfung: E-Mail-Adresse und IBAN werden wie beim Anlegen durch einen User auf Duplikate geprüft und im Fall eines Treffers abgelehnt
  • 🔗 "Selbstregistrierung"-Schalter: Neue Einstellung in den allgemeinen Vereinseinstellungen, die das öffentliche Formular ein- oder ausschaltet, inklusive Button zum direkten Teilen des Links

Verbesserungen​

  • 🧩 Die Logik zum Anlegen von Mitgliedern wurde in einem gemeinsamen MemberService.CreateMemberAsync gebündelt, statt dupliziert für Nutzer-Erstellung und Selbstregistrierung vorzuliegen
  • 🧩 Wiederkehrende EF-Core-Abfragen wurden hinter einem neuen ReferenceDataService vereinheitlicht
  • 🌐 frontend/nginx.conf liefert die SPA jetzt mit einem try_files-Fallback auf index.html aus

Sicherheit​

  • 🔐 Die Abhängigkeiten fast-uri und @tiptap/* wurden aktualisiert. Damit werden vier Sicherheitslücken mit hohem Schweregrad (SSRF/Host-Confusion) sowie eine mit mittlerem Schweregrad (Prototype-Pollution zu XSS) geschlossen

Warum diese Updates wichtig sind​

Die Selbstregistrierung nimmt Vorständen viel manuelle Arbeit ab: Statt jedes neue Mitglied einzeln anzulegen, teilt man einfach den Link zum Formular, Interessierte tragen sich selbst ein. Serverseitig geschützte Felder und die Duplikatsprüfung sorgen dabei dafür, dass die Datenqualität dieselbe bleibt wie bei einer Anmeldung durcheinen Nutzer. Die Sicherheitsupdates schließen zudem bekannte Schwachstellen in verwendeten Abhängigkeiten.

Wie geht es weiter?​

Wie immer freue ich mich über Feedback und Wünsche, gerne über GitHub Issues. Schaut auch weiterhin gerne hier vorbei!

Uni-Verein 1.6.0 – E-Mail-Benachrichtigungen für Finanzverwalter 🔔🧾

· 2 Minuten Lesezeit
René Herrmann
Senior developer

Veröffentlicht am 25. August 2026

Uni-Verein 1.6.0 bringt eine kleine, aber im Vereinsalltag spürbare Verbesserung: Finanzverwalter werden ab sofort per E-Mail benachrichtigt, sobald ein neuer Beleg eingereicht wird (niemand muss mehr manuell auf der Belege-Seite nachschauen).

Neue Funktionen​

  • 🔔 Beleg-Benachrichtigungen: Finanzverwalter bekommen ab sofort eine E-Mail, sobald ein neuer Beleg eingereicht wird (egal ob von einem regulären User oder einem Admin). Reicht ein Finanzverwalter selbst einen Beleg ein, bleibt die Benachrichtigung an ihn aus
  • ⚙️ Benachrichtigungseinstellungen: Neuer Tab "Benachrichtigungseinstellungen" in den eigenen Kontoeinstellungen. Er ist für alle Rollen sichtbar (als Platzhalter für künftige Einstellungen), der Schalter für Beleg-Benachrichtigungen erscheint aber nur für Finanzverwalter. Die Funktion ist standardmäßig aktiviert, lässt sich aber jederzeit deaktivieren

Unter der Haube​

  • 🧱 Eine neue, generische Tabelle für benutzerbezogene Einstellungen (Typ + Aktiv-Flag) legt die Grundlage, um künftig weitere Benachrichtigungs- und Präferenztypen zu ergänzen, ohne dafür erneut das Datenbankschema anzupassen

Warum dieses Update wichtig ist​

Bisher mussten Finanzverwalter aktiv auf der Belege-Seite nachsehen, ob etwas Neues eingereicht wurde. Mit der automatischen Benachrichtigung entfällt das – Belege werden schneller bearbeitet, ohne dass dafür ein zusätzlicher Kontrollgang nötig ist.

Wie geht es weiter?​

Die neue Einstellungen-Tabelle ist bewusst generisch gehalten, weitere Benachrichtigungstypen werden folgen. Feedback und Wünsche gerne wie immer über GitHub Issues. Schaut auch weiterhin gerne hier vorbei!

Uni-Verein 1.5.0 – Belegverwaltung mit OCR-Scan und Auswertung 🧾📊

· 3 Minuten Lesezeit
René Herrmann
Senior developer

Veröffentlicht am 14. August 2026

Uni-Verein 1.5.0 bringt eine der größten neuen Funktionen seit dem Start: die Belegverwaltung. Kassenbons und Rechnungen lassen sich ab sofort direkt in Uni-Verein einreichen, per On-Device-OCR automatisch auswerten und in einer neuen Belegauswertung nach Monat, Kategorie und Jahr visualisieren.

Neue Funktionen​

  • 📎 Belegverwaltung: Neuer Bereich "Belege", in dem reguläre User ihre eigenen, Admin und Finanzverwalter alle eingereichten Belege inklusive einreichender Person sehen. Die Liste lässt sich nach Zeitraum, Kategorie und Status (Offen/Bezahlt) filtern
  • 🤖 OCR-Scan beim Einreichen: Beim Hochladen eines Fotos oder PDFs wird der Beleg direkt im Browser per On-Device-OCR gescannt und füllt Betrag sowie Belegdatum automatisch aus, bereits ausgefüllte Felder werden dabei nicht überschrieben. Händler, Kategorie, Zahlungsart und Beschreibung lassen sich zusätzlich manuell ergänzen, die Zahlungsart können nur Admin und Finanzverwalter setzen
  • 📸 Direkter Kamera-Button: Bei installierter App steht beim Einreichen eines Belegs zusätzlich zum Datei-Upload ein direkter Kamera-Button zur Verfügung
  • ✅ Als bezahlt markieren: Admin und Finanzverwalter bestätigen Belege als bezahlt, danach nicht mehr rückgängig zu machen. Reguläre User können einen eigenen, noch offenen Beleg nur innerhalb von 15 Minuten nach dem Einreichen selbst bearbeiten oder löschen
  • 🗑️ Löschen & Wiederherstellen: Gelöschte Belege werden zunächst nur soft-deleted (Papierkorb-Prinzip). Admin kann sie in der Liste einblenden, wiederherstellen oder endgültig inklusive aller angehängten Dateien löschen
  • 📤 Export als ZIP: Admin und Finanzverwalter können die aktuell gefilterte Belegliste als ZIP mit CSV-Übersicht und allen angehängten Dateien exportieren
  • 📊 Belegauswertung: Neuer Auswertungsbereich für Admin und Finanzverwalter mit Balkendiagramm der Ausgaben je Monat (gestapelt nach Kategorie), Kreisdiagramm je Kategorie mit Jahresgesamtsumme und einer Übersicht der Gesamtausgaben im Jahresvergleich
  • 🏷️ Belegkategorien verwalten: Neue Einstellung, um eigene Kategorien wie Büromaterial, Reisekosten oder Verpflegung anzulegen, eine Kategorie lässt sich erst löschen, wenn ihr kein Beleg mehr zugeordnet ist

Verbesserungen​

  • 💾 Backup mit Belegen: Neben dem normalen Datenbank-Backup steht jetzt ein Vollbackup inklusive aller hochgeladenen Belegdateien als ZIP zum Download bereit. Beim Wiedereinspielen erkennt Uni-Verein automatisch, ob eine reine SQL-Datei oder ein ZIP-Vollbackup ausgewählt wurde, beide lassen sich über "Backup-Datei auswählen" einspielen

Warum diese Updates wichtig sind​

Die Beleg- und Spesenverwaltung war eines der meistgewünschten Features aus der Vereinsarbeit: Statt Kassenbons zu sammeln und manuell in einer Tabelle zu erfassen, reichen Mitglieder sie jetzt direkt in Uni-Verein ein, der OCR-Scan übernimmt dabei einen Großteil der Tipparbeit. Für Vorstand und Finanzverwaltung schafft die neue Belegauswertung sofortige Transparenz über Ausgaben, ganz ohne separate Tabellenkalkulation.

Wie geht es weiter?​

Die Belegverwaltung ist ein erster Schritt in Richtung umfassenderer Finanzfunktionen, weiteres Feedback aus der Praxis ist wie immer herzlich willkommen, gerne über GitHub Issues. Schaut auch weiterhin gerne hier vorbei!

Uni-Verein 1.4.0 – Dark Mode und Umstieg auf PostgreSQL 🌓🐘

· 3 Minuten Lesezeit
René Herrmann
Senior developer

Veröffentlicht am 28. Juli 2026

Uni-Verein 1.4.0 ist da! Mit einem lang gewünschten Dark Mode und einer größeren technischen Umstellung unter der Haube: Die Datenbank wechselt von MariaDB zu PostgreSQL. Bestehende Installationen werden dabei automatisch und sicher vom Updater migriert.

Highlights​

  • 🌓 Dark Mode: Die App folgt jetzt standardmäßig dem Farbschema von Betriebssystem/Browser, mit einem manuellen Umschalter neben dem Sprachumschalter
  • 🐘 PostgreSQL statt MariaDB: Die Datenbank-Engine wurde umgestellt. Bestehende Installationen werden vom Updater automatisch und sicher migriert (siehe Wichtiger Hinweis zum Upgrade unten)

⚠️ Wichtiger Hinweis zum Upgrade (Breaking Change)​

Dieses Release wechselt die Datenbank-Engine von MariaDB zu PostgreSQL. Aktualisiert deshalb ausschließlich über den offiziellen Updater und setzt niemals VERSION in der .env von Hand oder tauscht selbstständig eine neuere docker-compose-prod-image.yml ein, das überspringt die notwendige Datenbankmigration und beschädigt eure Installation!

curl -O https://raw.githubusercontent.com/uni-verein/uni-verein/main/docker-compose-update.yml
docker compose -f docker-compose-update.yml run --rm update
  • Erstellt vor dem Fortfahren ein manuelles Backup (Datenbank-Backup und Mitgliederexport, beides unter Backup) der Updater fragt vor der Migration explizit danach, ob dies erledigt wurde
  • Installationen, die noch auf MariaDB laufen, werden zunächst auf v1.3.1 aktualisiert, falls sie das nicht schon sind. Ab v1.3.1 migriert der nächste Update-Lauf die Datenbank nach PostgreSQL und stellt den gesamten Stack um. Das bringt eine Ausfallzeit mit sich, die proportional zur Datenbankgröße ist
  • Sicherheitsnetz bei der Migration: Die Umstellung läuft gegen eine isolierte, temporäre PostgreSQL-Instanz, während der laufende MariaDB-Container weiterhin bedient, es wird also erst etwas verändert, nachdem die Kopie verifiziert wurde. Bei Erfolg wird der alte MariaDB-Container gestoppt, sein Datenvolume aber nicht gelöscht (späteres Freigeben mit docker volume rm <project>_db_data, sobald alles bestätigt funktioniert). Bei einem Fehlschlag wird die Migration automatisch bereinigt und die MariaDB-Installation bleibt vollständig unangetastet
  • Kommt ihr von einer älteren Version? Der Updater geht pro Lauf nur einen Schritt weiter (< v1.3.1 → v1.3.1 → v1.4.0 → aktuellste Version). Wer von vor v1.3.1 aktualisiert, führt den obigen Befehl einfach mehrfach hintereinander aus, bis "Already up to date" gemeldet wird

Neue Funktionen​

  • 🌓 Dark Mode: folgt standardmäßig prefers-color-scheme oder lässt sich manuell über einen Umschalter neben dem Sprachumschalter setzen, die Wahl wird über Reloads hinweg gespeichert. Jede bisher nur helle Oberfläche (Hauptbereich, Tabellenköpfe, Backup-/E-Mail-/Sendefortschritt-Panels, Kopfleiste, Login-Seite) ist jetzt theme-fähig
  • 🛠️ UniVerein.DbMigrator: ein neues Tool, das die oben beschriebene MariaDB-zu-PostgreSQL-Migration durchführt, kopiert jede Tabelle (inklusive soft-gelöschter Zeilen) in fremdschlüsselsicherer Reihenfolge und verifiziert die Zeilenanzahlen

Verbesserungen​

  • 🐘 MariaDB wurde im gesamten Stack durch PostgreSQL (postgres:17-alpine) ersetzt: Docker-Images, der Datenbank-Provider im Backend sowie das Backup-/Restore-Tooling
  • 🔄 Der Updater (docker-compose-update.yml) wurde so angepasst das er die oben beschriebene MariaDB-zu-PostgreSQL-Umstellung automatisch durchführt

Fehlerbehebungen​

  • 🐛 Der Login-Dialog für den Demo-Modus konnte fälschlicherweise auch dann erscheinen, wenn die App gar nicht als Demo-Instanz konfiguriert war

Warum diese Updates wichtig sind​

Der Dark Mode war eine der meistgefragten Komfortfunktionen, gerade bei abendlichen Vorstandssitzungen ein spürbarer Unterschied. Der Wechsel zu PostgreSQL ist dagegen eine strategische Entscheidung: PostgreSQL bietet eine robustere Grundlage für zukünftige Funktionen und bessere Datenintegrität. Da ein Datenbankwechsel für bestehende Installationen naturgemäß heikel ist, wurde besonderer Wert auf eine sichere, automatisierte Migration mit Rückfallebene gelegt.

Wie geht es weiter?​

Bitte plant für das Update ein kurzes Wartungsfenster ein und meldet euch bei Problemen während der Migration gerne über GitHub Issues. Vielen Dank an alle, die dieses Release mit Feedback begleitet haben. Schaut auch weiterhin gerne hier vorbei!

Uni-Verein 1.3.0 – Namenssuche im Rundmail-Versand und stabilere Infrastruktur 🔍

· 2 Minuten Lesezeit
René Herrmann
Senior developer

Veröffentlicht am 25. Juli 2026

Uni-Verein 1.3.0 bringt eine praktische neue Suchfunktion für den Rundmail-Versand sowie eine ganze Reihe an Verbesserungen unter der Haube, die die Zuverlässigkeit von Deployments und CI-Läufen erhöhen.

Neue Funktionen​

  • 🔍 Namenssuche im Empfänger-Tab der Rundmail: Empfänger lassen sich jetzt zusätzlich zum bestehenden Filter nach Mitgliedskategorie auch nach Vor- oder Nachnamen filtern (unscharfe Suche mittels Jaro-Winkler-Ähnlichkeit)

Verbesserungen​

  • ❤️ /health-Endpoint: Ein neuer, unauthentifizierter GET /health-Endpoint sowie Docker-HEALTHCHECKs für Backend und Frontend
  • 🩺 backend, frontend und proxy verfügen jetzt über richtige Health-Checks (zuvor nur die Datenbank), und jeder Dienst wartet in allen docker-compose*.yml-Dateien darauf, dass seine Abhängigkeiten tatsächlich bereit sind (service_healthy) statt nur gestartet
  • 🚦 Die CI bricht jetzt sofort mit angehängten Container-Logs ab, wenn der Stack nicht rechtzeitig gesund wird, statt stillschweigend fortzufahren und erst bei den Playwright-Tests ohne Diagnoseinformationen zu scheitern
  • ⏱️ Der Retry-timeout des Datenbank-Health-Checks wurde erhöht, um gelegentlich langsame Erstinitialisierungen auf CI-Runnern zu tolerieren
  • 📝 .env.example listet jetzt auch BACKUP_PATH, passend zu allen Werten, die docker-compose-ini.yml erzeugt
  • 🔒 Die CI erzwingt jetzt, dass Pull Requests nach main nur noch von development ausgehen dürfen (neuer enforce-source-branch-Job)

Fehlerbehebungen​

  • 🐛 Das Kategorie-Dropdown im Rundmail-Empfänger-Filter zeigte für individuelle (nicht standardmäßige) Mitgliedskategorien den rohen Übersetzungsschlüssel statt des Kategorienamens an
  • 🐛 Der proxy-Container konnte unbegrenzt "unhealthy" bleiben, weil sein Health-Check localhost per IPv6 auflöste, während nginx.conf nur auf IPv4 lauscht
  • 🐛 Der Docker-Image-Build des Backends schlug gelegentlich wegen kurzzeitiger Fehler des Paket-Mirrors bei apt-get install fehl

Sicherheit​

  • 🔐 sharp wurde per npm-overrides auf ^0.35.3 fixiert, um statt der verwundbaren transitiven Version eine gefixte Version zu beziehen

Warum diese Updates wichtig sind​

Die Namenssuche im Rundmail-Versand spart bei größeren Vereinen viel Zeit, wenn schnell einzelne Empfänger gefunden werden müssen. Mindestens genauso wichtig sind die Verbesserungen an den Health-Checks: Sie sorgen dafür, dass Deployments zuverlässiger anlaufen und Probleme in der CI sofort mit aussagekräftigen Logs sichtbar werden, statt erst spät und ohne Kontext aufzufallen.

Wie geht es weiter?​

Die Arbeit an Performance und Infrastruktur geht weiter, im nächsten Release liegt der Fokus bereits auf spürbar schnelleren Ladezeiten.

Uni-Verein 1.2.0 – Progressive Web App und mobile Ansicht 📱

· 2 Minuten Lesezeit
René Herrmann
Senior developer

Veröffentlicht am 22. Juli 2026

Mit Uni-Verein 1.2.0 löst sich eine der größten Baustellen aus den Anfängen des Projekts: Die Software war bisher für PC und Tablet optimiert, ab sofort funktioniert Uni-Verein auch auf dem Smartphone und lässt sich ebenfalls wie eine App installieren.

Neue Funktionen​

  • 📲 Progressive Web App (PWA): Uni-Verein lässt sich jetzt auf dem Homescreen installieren
  • 📱 Mobile-optimiertes Layout: Auf Smartphones ersetzt ein Hamburger-Menü mit Bottom-Navigation die Desktop-Sidebar, Tabellen werden als Karten bzw. einspaltige Ansicht dargestellt, Dialoge öffnen im Vollbild und Filterleisten stapeln sich vertikal
  • 📡 Offline-Hinweis auf der Login-Seite: Zeigt "Du bist offline" an, sobald keine Verbindung besteht oder der Server nicht erreichbar ist, und verschwindet automatisch wieder bei erneuten verbindung.

Verbesserungen​

  • 🧩 Größere Refactorings im Frontend: Mobile-spezifische Ansichten (Audit-Log, Mitgliederliste) und die Sidebar-Navigation wurden in eigene, wiederverwendbare Komponenten ausgelagert
  • 🗂️ Die Erstellen-/Bearbeiten-Dialoge (Beitragspläne, Nutzer, Mitgliedskategorien, Links, Import-Fehler, Bestätigungen, Icon-Auswahl, Mitgliederformular) wurden in eigenständige Komponenten unter src/components/dialogs verschoben
  • 📄 Eine gemeinsame ResponsiveTablePagination-Komponente wird jetzt von allen paginierten Tabellen (Mitglieder, Mail-Empfänger, SEPA, Beiträge, Audit) verwendet
  • ✨ Einheitliche Prettier-Formatierung im gesamten Frontend-Code
  • ⚙️ Der Workflow zur Aktualisierung der Third-Party-Hinweise läuft jetzt auf Feature-Branches statt auf main
  • 🐳 docker-compose-ini.yml liest die aktuelle Version jetzt automatisch vom neuesten GitHub-Release aus, statt sie manuell im .env pflegen zu müssen

Fehlerbehebungen​

  • 🐛 Der Sprachumschalter musste beim ersten Klick manchmal zweimal betätigt werden, bevor die Sprache tatsächlich wechselte
  • 🐛 Das Init-Skript (docker-compose-ini.yml) hinterließ doppelte VERSION-Zeilen im .env, weil sed -i gegen den Single-File-Bind-Mount stillschweigend fehlschlug

Warum diese Updates wichtig sind​

Die mobile Ansicht war eine der meistgewünschten Funktionen seit dem ersten Release und macht Uni-Verein jetzt auch für die Vorstandsarbeit unterwegs praktikabel, ob beim Check-in auf einer Veranstaltung oder für einen schnellen Blick in die Mitgliederliste zwischen zwei Vorlesungen. Durch die PWA-Unterstützung fühlt sich die Web-App dabei fast wie eine native App an, inklusive Offline-Zugriff auf bereits geladene Daten.

Wie geht es weiter?​

Damit ist ein wichtiger Meilenstein von der ursprünglichen Roadmap erreicht. Als Nächstes stehen weitere Performance- und Infrastruktur-Verbesserungen an. Schaut auch in Zukunft gerne wieder hier vorbei.

Uni-Verein 1.1.0 – Automatische Update-Prüfung und wichtige Fehlerbehebungen 🔔

· 2 Minuten Lesezeit
René Herrmann
Senior developer

Veröffentlicht am 16. Juli 2026

Mit Uni-Verein 1.1.0 ist das erste größere Feature-Update seit dem Release erschienen. Im Fokus stehen dieses Mal eine automatische Update-Benachrichtigung sowie einige wichtige Fehlerbehebungen im Alltag der Mitgliederverwaltung.

Neue Funktionen​

  • 🔔 Automatische Update-Prüfung: Uni-Verein vergleicht ab sofort automatisch die installierte Version mit dem neuesten GitHub-Release
  • 📧 E-Mail-Benachrichtigung für Admins: Sobald eine neue Version verfügbar ist, werden Administratoren automatisch per E-Mail informiert
  • 🔔 Benachrichtigungsglocke im Frontend: Ein neues Glocken-Symbol im Frontend zeigt auf einen Blick an, ob ein Update verfügbar ist

Verbesserungen​

  • 🗂️ Das Backend-Verzeichnis Data wurde in Models umbenannt, um die Projektstruktur übersichtlicher zu gestalten
  • ⚙️ Anpassungen an der CI-Konfiguration

Fehlerbehebungen​

  • 🐛 Ein Fehler wurde behoben, durch den neue Mitglieder teilweise doppelte Mitgliedsnummern erhalten haben

Warum diese Updates wichtig sind​

Die automatische Update-Prüfung sorgt dafür, dass Vereine immer informiert sind, sobald eine neue Version von Uni-Verein verfügbar ist (ganz ohne manuell auf GitHub nachschauen zu müssen). In Kombination mit den behobenen Fehlern rund um die Mitgliedsnummern-Vergabe wird die tägliche Arbeit mit Uni-Verein noch zuverlässiger.

Wie geht es weiter?​

Vielen Dank an alle, die mit Feedback und Bug-Reports zu diesem Release beigetragen haben! Die Arbeit an neuen Funktionen wie Mobile support und Event-Kalender läuft weiter, schaut auch in Zukunft gerne wieder hier vorbei.