Skip to main content

Vinarium - Releases

← App details

Nextcloud 35

Vinarium 0.5.5
Release Details
UpdatedOct. 4, 2026, 8:23 p.m.
Changelog

Added

  • Menüeintrag „Neuerungen“ links unten: öffnet das „Was ist neu?“-Fenster jederzeit mit allen bisherigen Neuerungen, nach Version gruppiert. Nachlesen quittiert nichts, das automatische Fenster nach einem Update bleibt unverändert (#298)
  • Währung AUD (Australischer Dollar) beim Erfassen und Bearbeiten eines Kaufs (#294)

Changed

  • Fehlermeldungen laufen über einen gemeinsamen Helfer statt über catch (e: any). Beim Hochladen eines Etikett-Fotos erscheint jetzt die Meldung des Servers statt „Request failed with status code 400“. ESLint verbietet any nun als Fehler (#232)
  • Build: appName und appVersion für @nextcloud/vue kommen jetzt aus package.json (App-ID vinarium) und appinfo/info.xml statt aus festen Werten (VINARIUM, 0.1.0). Heute ohne sichtbare Wirkung, verhindert aber „VINARIUM 0.1.0“ in einem späteren Einstellungsdialog (#301)
  • Die Schema-Prüfung der whatsnew.json läuft jetzt zentral über nc-whatsnew-check aus nc-app-tooling v1.17.0 (npm run whatsnew:check, in der node-CI). Der PHP-Test prüft nur noch das App-Eigene: bekannte Symbole und kein plus-Feld (#296, nc-app-tooling#27)
  • CI: Die Ableitung der getesteten nextcloud/ocp-Versionen nutzt jetzt die geteilte Composite Action ocp-versionen@v1.17.0 aus nc-app-tooling statt einer eigenen Kopie im Workflow. Verhalten unverändert, auch der harte Abbruch bei einer Packagist-unbekannten Version (#295, nc-app-tooling#28)
  • @nextcloud/vue 9.11.0 (innerhalb der Spanne <9.12.0), vite 8.3.1, sass 1.105.0 (#300)
  • Abhängigkeiten aktualisiert: vue 3.5.43, eslint 10.11.0, nextcloud/ocp 34.0.4
  • @nextcloud/vue ist jetzt auch in package.json auf >=9.6.0 <9.12.0 begrenzt, nicht mehr nur über das Lockfile. Ab 9.12 zieht die Bibliothek über eine von Vinarium nicht genutzte Upload-Komponente @nextcloud/files/upload nach und der Build bricht; Dependabot überspringt diese Versionen jetzt, statt den Sprung wöchentlich erneut vorzuschlagen (#286)
  • Kompatibilität bis Nextcloud 35 (max-version). Geprüft auf einer echten NC-35-Instanz (35.0.0): Installation, Migrationen, App-Start und alle Ansichten (Dashboard, Bestand, Regal, Verkostungen) ohne Befund; die Unit-Suite läuft in der CI zusätzlich gegen nextcloud/ocp dev-master
  • CI: Die PHPUnit-Matrix wählt die getesteten nextcloud/ocp-Versionen jetzt nach der PHP-Version des jeweiligen Jobs. NC 35 lässt PHP 8.2 fallen (nextcloud/ocp v35 verlangt ~8.3 || ~8.4 || ~8.5), der 8.2-Job wäre sonst an einer Auflösung gescheitert, die gar nicht scheitern soll. Neuer Job für PHP 8.5; php min-version bleibt bei 8.2, weil eine App-Untergrenze auf einem NC-35-Server ohnehin nicht bindend ist und ein Anheben nur NC-32-bis-34-Nutzer aussperren würde (Muster aus contractmanager#414)
  • Mindestversion auf Nextcloud 33 angehoben (min-version; max-version bleibt 35). Ohne <database>-Deklaration begrenzt NC bei min-version 32 Bezeichnernamen auf die scharfen Oracle-11-Grenzen (30/27/22 Zeichen); seit NC 33 gilt stattdessen eine glatte 63 (nextcloud/server#51593), zudem korrigiert NC 33 die NOT-NULL-Boolean-Behandlung selbst. Oracle bleibt installierbar (kein <database>-Ausschluss). Preis: NC-32-Nutzer erhalten kein Update mehr; Produktivinstanzen laufen auf NC 34 (nc-app-tooling#15)

Fixed

  • Die Apache-2.0-Attribution des App-Symbols (mdi-grapes) wird jetzt mit ausgeliefert. Sie stand bisher in THIRD_PARTY_NOTICES.md, die beim Packen still herausfiel; jetzt steht sie in der README.md
  • Dialog-Titel schweben nicht mehr über der Suchleiste der Nextcloud-Kopfzeile. Alle acht Dialoge benennen sich jetzt über ihre eigene Überschrift (labelId statt name); der Foto-Zuschnitt hat dafür eine sichtbare Überschrift bekommen (#314)
  • Etikett-Foto: Ein Bildformat, das der Browser nicht anzeigen kann (z. B. HEIC vom iPhone in Chrome oder Firefox), führt nicht mehr zu einem leeren Zuschnitt-Fenster mit stumm scheiterndem „Übernehmen“. Stattdessen erscheint eine verständliche Meldung mit der Bitte um JPG oder PNG, und „Übernehmen“ bleibt gesperrt (#276)

Security

  • Transitive Abhängigkeiten auf gepatchte Versionen gehoben: axios 1.20.0, brace-expansion 2.1.7 / 5.0.12, dompurify 3.4.16. Schließt 17 Dependabot-Sicherheitshinweise, davon 9 mit hoher Einstufung (#306)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
Signaturep/ZD74IDgpTze8yTsiofsXe7wtEKQoiWPPz7p5kF1c4ZvLKhYzYYMjXzF4oajcIgTrHERVn/wJVL7LI2AEanYUzCqgioymcL9bgCyH2BZHLJO0bu0vf0Nr6/jQWdeqhWUI7FHzQrtzYOdepcdzwg9PzyLfJZ5x7COmdGnTPPJvkbULRiAu4/HYTRytm06O5hYe1YUv3CLmCVsXWR1ngM1EYCDUMNR8xfaAQNihuKmaAKKY5r/indsflxDV+0jiKRAIEKWCUiLIEsChlxbHb3QXpw+jSlkEmOUtDxjrxw0c5+8/Wb61jjikCYAXrrHdDLagNj5a+7P+w4wJl8eOMtug==
Signature digestsha512
Dependencies
Required Nextcloud versions >=33.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0

Nextcloud 34

Vinarium 0.5.5
Release Details
UpdatedOct. 4, 2026, 8:23 p.m.
Changelog

Added

  • Menüeintrag „Neuerungen“ links unten: öffnet das „Was ist neu?“-Fenster jederzeit mit allen bisherigen Neuerungen, nach Version gruppiert. Nachlesen quittiert nichts, das automatische Fenster nach einem Update bleibt unverändert (#298)
  • Währung AUD (Australischer Dollar) beim Erfassen und Bearbeiten eines Kaufs (#294)

Changed

  • Fehlermeldungen laufen über einen gemeinsamen Helfer statt über catch (e: any). Beim Hochladen eines Etikett-Fotos erscheint jetzt die Meldung des Servers statt „Request failed with status code 400“. ESLint verbietet any nun als Fehler (#232)
  • Build: appName und appVersion für @nextcloud/vue kommen jetzt aus package.json (App-ID vinarium) und appinfo/info.xml statt aus festen Werten (VINARIUM, 0.1.0). Heute ohne sichtbare Wirkung, verhindert aber „VINARIUM 0.1.0“ in einem späteren Einstellungsdialog (#301)
  • Die Schema-Prüfung der whatsnew.json läuft jetzt zentral über nc-whatsnew-check aus nc-app-tooling v1.17.0 (npm run whatsnew:check, in der node-CI). Der PHP-Test prüft nur noch das App-Eigene: bekannte Symbole und kein plus-Feld (#296, nc-app-tooling#27)
  • CI: Die Ableitung der getesteten nextcloud/ocp-Versionen nutzt jetzt die geteilte Composite Action ocp-versionen@v1.17.0 aus nc-app-tooling statt einer eigenen Kopie im Workflow. Verhalten unverändert, auch der harte Abbruch bei einer Packagist-unbekannten Version (#295, nc-app-tooling#28)
  • @nextcloud/vue 9.11.0 (innerhalb der Spanne <9.12.0), vite 8.3.1, sass 1.105.0 (#300)
  • Abhängigkeiten aktualisiert: vue 3.5.43, eslint 10.11.0, nextcloud/ocp 34.0.4
  • @nextcloud/vue ist jetzt auch in package.json auf >=9.6.0 <9.12.0 begrenzt, nicht mehr nur über das Lockfile. Ab 9.12 zieht die Bibliothek über eine von Vinarium nicht genutzte Upload-Komponente @nextcloud/files/upload nach und der Build bricht; Dependabot überspringt diese Versionen jetzt, statt den Sprung wöchentlich erneut vorzuschlagen (#286)
  • Kompatibilität bis Nextcloud 35 (max-version). Geprüft auf einer echten NC-35-Instanz (35.0.0): Installation, Migrationen, App-Start und alle Ansichten (Dashboard, Bestand, Regal, Verkostungen) ohne Befund; die Unit-Suite läuft in der CI zusätzlich gegen nextcloud/ocp dev-master
  • CI: Die PHPUnit-Matrix wählt die getesteten nextcloud/ocp-Versionen jetzt nach der PHP-Version des jeweiligen Jobs. NC 35 lässt PHP 8.2 fallen (nextcloud/ocp v35 verlangt ~8.3 || ~8.4 || ~8.5), der 8.2-Job wäre sonst an einer Auflösung gescheitert, die gar nicht scheitern soll. Neuer Job für PHP 8.5; php min-version bleibt bei 8.2, weil eine App-Untergrenze auf einem NC-35-Server ohnehin nicht bindend ist und ein Anheben nur NC-32-bis-34-Nutzer aussperren würde (Muster aus contractmanager#414)
  • Mindestversion auf Nextcloud 33 angehoben (min-version; max-version bleibt 35). Ohne <database>-Deklaration begrenzt NC bei min-version 32 Bezeichnernamen auf die scharfen Oracle-11-Grenzen (30/27/22 Zeichen); seit NC 33 gilt stattdessen eine glatte 63 (nextcloud/server#51593), zudem korrigiert NC 33 die NOT-NULL-Boolean-Behandlung selbst. Oracle bleibt installierbar (kein <database>-Ausschluss). Preis: NC-32-Nutzer erhalten kein Update mehr; Produktivinstanzen laufen auf NC 34 (nc-app-tooling#15)

Fixed

  • Die Apache-2.0-Attribution des App-Symbols (mdi-grapes) wird jetzt mit ausgeliefert. Sie stand bisher in THIRD_PARTY_NOTICES.md, die beim Packen still herausfiel; jetzt steht sie in der README.md
  • Dialog-Titel schweben nicht mehr über der Suchleiste der Nextcloud-Kopfzeile. Alle acht Dialoge benennen sich jetzt über ihre eigene Überschrift (labelId statt name); der Foto-Zuschnitt hat dafür eine sichtbare Überschrift bekommen (#314)
  • Etikett-Foto: Ein Bildformat, das der Browser nicht anzeigen kann (z. B. HEIC vom iPhone in Chrome oder Firefox), führt nicht mehr zu einem leeren Zuschnitt-Fenster mit stumm scheiterndem „Übernehmen“. Stattdessen erscheint eine verständliche Meldung mit der Bitte um JPG oder PNG, und „Übernehmen“ bleibt gesperrt (#276)

Security

  • Transitive Abhängigkeiten auf gepatchte Versionen gehoben: axios 1.20.0, brace-expansion 2.1.7 / 5.0.12, dompurify 3.4.16. Schließt 17 Dependabot-Sicherheitshinweise, davon 9 mit hoher Einstufung (#306)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
Signaturep/ZD74IDgpTze8yTsiofsXe7wtEKQoiWPPz7p5kF1c4ZvLKhYzYYMjXzF4oajcIgTrHERVn/wJVL7LI2AEanYUzCqgioymcL9bgCyH2BZHLJO0bu0vf0Nr6/jQWdeqhWUI7FHzQrtzYOdepcdzwg9PzyLfJZ5x7COmdGnTPPJvkbULRiAu4/HYTRytm06O5hYe1YUv3CLmCVsXWR1ngM1EYCDUMNR8xfaAQNihuKmaAKKY5r/indsflxDV+0jiKRAIEKWCUiLIEsChlxbHb3QXpw+jSlkEmOUtDxjrxw0c5+8/Wb61jjikCYAXrrHdDLagNj5a+7P+w4wJl8eOMtug==
Signature digestsha512
Dependencies
Required Nextcloud versions >=33.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.4
Release Details
UpdatedSept. 21, 2026, 8:39 p.m.
Changelog

Added

  • „Was ist neu?"-Fenster — nach einem Update zeigt Vinarium einmal je Nutzer und Version kurz, was sich geändert hat. Die Inhalte liegen als whatsnew/whatsnew.json im App-Paket, es wird nichts von fremden Servern nachgeladen. Wegklickbar per Knopf, X oder Escape; jeder Weg quittiert. Keine Kumulation über mehrere Versionen, kein Fenster bei einer Neuinstallation, und fällt etwas aus, bleibt das Fenster einfach aus (Fixes #284)

Beim Release beachten: Der Versions-Schlüssel in whatsnew/whatsnew.json muss der Version des Release entsprechen, sonst bleibt das Fenster stumm.

Changed

  • Abhängigkeiten aktualisiert: vitest, nanoid, brace-expansion sowie die composer-Entwicklungsabhängigkeiten. @nextcloud/vue bleibt bewusst auf 9.6.0 — ab 9.12 zieht die Bibliothek über eine von Vinarium nicht genutzte Upload-Komponente @nextcloud/files, dialogs, webdav und sax nach und sprengt damit das ausgelieferte Bundle (#280/#281)
  • Werkzeugkette: nc-app-tooling auf v1.15.0 — erst diese Fassung lässt den neuen Ordner whatsnew/ ins Release-Archiv
  • CI-Actions aktualisiert (setup-node 7, github-script 9, canary v1.14.0)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignaturebHd7d1ugn3WAZC3DYuklDxGCBhZZqmRGyOJe/4v8BwGcMFIOTZ2mFbs6nN8OHbUgThj8GUbf57pXsD2/gclRDrcWw65RLkqog5vbRv68GDl8YiSE13TXEwrdH12CSxq+9jdlELMidiqNEvZvB2gA2ZcePqQ9VPOAhf/on/fZ9IbUiNPhCcEjpA8RMC9TdGAAjS6lepsOU9s7qxcHT6gQHqrvoqcmFtRl0o0V5rP6ZKh6boVuNrD+OsivkevuCom3bGcd951SttbzDqB3wMZ10L4LstSNuCH9JqJix3OIB+Us9o6uy6opQ1FD/lILNfjcQ61OQpzt4I7l8A7x4e/evQ==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.3
Release Details
UpdatedSept. 19, 2026, 5:49 p.m.
Changelog

Fixed

  • Etikettenfotos ließen sich nicht zuschneiden — beim Hochladen eines Etiketts (Kauf-Wizard und Etikett-Bearbeitung) blieb der Zuschneide-Dialog leer, und „Übernehmen" scheiterte mit „Zuschneiden fehlgeschlagen". Betroffen war jedes Bildformat, nicht nur HEIC vom iPhone. Ursache: vue-cropperjs liefert nur ein CommonJS-Bundle ohne ESM-Entry; unter Vite 8 band der Default-Import an ein Nicht-Komponenten-Objekt, sodass die Cropper-Komponente nicht mountete und ihre Methode getCroppedCanvas fehlte. Der Default wird jetzt defensiv aufgelöst, unabhängig von der Interop-Form (Fixes #254)
  • Fehlende und fehlerhafte Übersetzungen — 40 fehlende Übersetzungen ergänzt und drei kaputte Pluralschlüssel korrigiert (Fixes #243)

Security

  • dompurify auf 3.4.13 aktualisiert (#236)

Changed

  • Release-Hygiene: Dev-, Test- und Konfigurationsdateien werden über .gitattributes export-ignore aus dem ausgelieferten Archiv gehalten; die Apache-2.0-Attribution (THIRD_PARTY_NOTICES.md) bleibt bewusst enthalten (#273)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureVFLynGFGiGTg6duOEskdKYb8c85h1tu3KS2Zkuuwveh+J5Py2f8Rd+g9xlRsH6I0XwbrHu5sq+ktVVIuywHLMuiAK9QE37Y7X8EPTWLIymH7QFegj/xabxyxUZX4SlciFWAutA7ptqe3uY5mdX2TINkWWFt4rsXlavl5qFrlOIWU/gmq8VTv+yeWBmAMFoRe3s6FYAmguwexw5TYECPw7Y7xMhmn8psj1f0eEAEcDRESk92wdVOFuCtCjJ0RurQSxLtPgG4UbovX//BHXm395dlmXMrRdG4Wt/38IuLn4P4ig6AHUOX0CjcLAkaIHBtyLMqHjDWwKprMZp+VwDyTmw==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.2
Release Details
UpdatedAug. 8, 2026, 9:35 p.m.
Changelog

Fixed

  • 0.5.1 ließ sich nicht benutzen: die App rendert nicht — jede Datumsausgabe warf TypeError: (0, ns.default) is not a function. Betroffen war formatDate, und die steckt im Dashboard und fünf weiteren Ansichten, darunter der Standardroute; sichtbar blieb ein leerer Inhaltsbereich. Ursache war der Bundler-Wechsel in 0.5.1: @nextcloud/moment liefert ein UMD-Bundle ohne eigenen default-Export, und Vite 8 (Rolldown) greift bei solchen Paketen im Bibliotheks-Build direkt auf .default zu, wo Vite 7 zuvor einen Auspack-Helfer eingefügt hatte. formatDate kommt jetzt ohne die Bibliothek aus: für ein ISO-Datum als TT.MM.JJJJ genügen ein Muster und eine Kalenderprüfung über UTC. Damit hängt die Funktion an keiner Bundler-Interop mehr, und das Bundle verliert die komplette moment-Sprachdatenbank, rund 132 KB (Fixes #233)

Changed

  • Vite bleibt auf 8. Ein Rückbau auf 7 war zwischenzeitlich erwogen und wieder verworfen: die Interop ist nicht generell defekt, sondern nur für UMD-Pakete ohne default. Für gewöhnliche CommonJS-Pakete setzt der eingefügte Helfer default korrekt auf module.exports, nachgewiesen an @nextcloud/event-bus
  • @nextcloud/moment als Abhängigkeit entfernt
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignaturesJcpYAXpveeojzkqkXbjpOpi9ynBLpRlQ+DN8eo5jJxaHnU208XPXL6WCR6CA4X5SUlSP0qKmgiPAdN9Bn7vnozHzEf/M/YNVJX3JZRoMO+eUWVUkMoa9GORCEU4NKvvdxfAIkFQc1Gs+hYI4K3wImQLh6oLkiooelfqYH14LG6Wa9niqXCxX8COFzvOs0zmZrhgdM0cAfkfcUxBi8Y/MTnv1U6L2aeBsbu+TSNBaqE3+BjV1I4TgGf+rInpM7iFahHngmFBvZOeq04XToHc5nxeW9lL5so7eihXlz7aQk51LAbZnTjNR+Jnc4O454ApnEA9rZEIUrhhqCyJW1gQMA==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.1
Release Details
UpdatedAug. 4, 2026, 4:17 a.m.
Changelog

Added

  • Etikett mit Vorder- und Rückseite — das Etikettenfoto hängt jetzt am Jahrgang statt an der einzelnen Flasche, und es lassen sich zwei Seiten hinterlegen. Die Rückseite trägt in der Praxis Rebsorten, Lage und Abfüller. Bestehende Flaschenfotos wandern als Vorderseite mit; tragen mehrere Flaschen eines Jahrgangs unterschiedliche Fotos, gewinnt die zuerst aufgenommene, keine Datei wird gelöscht (Fixes #190)
  • Etiketten frei zuschneiden — das feste 3:4-Hochformat entfällt für Etiketten. Rückenetiketten sind oft anders proportioniert; ein erzwungenes Verhältnis schnitt dort Text weg. Verkostungsfotos behalten ihr Verhalten
  • Regal-Reihenfolge per Tastatur — am aktiven Regal verschieben zwei Knöpfe es eine Position nach links oder rechts. Drag & Drop war bisher der einzige Weg und ist per Tastatur nicht bedienbar (Fixes #211)

Fixed

  • Vue lief im ausgelieferten Produktionsbundle im Entwicklungsmodus — ein pauschales 'process.env': {} in der Vite-Konfiguration ließ NODE_ENV als undefined durchlaufen, wodurch Warnungen, Prop-Typprüfungen und Devtools-Hooks im Bundle landeten. Nach der Korrektur ist das Bundle rund 100 KB kleiner (gzip 472 → 438 KB)
  • Aktivitäts-Widget zeigte das Datum ohne Jahr — Einträge aus verschiedenen Jahren waren nicht unterscheidbar, ein Datum in der Zukunft las sich wie ein Sortierfehler. Das Widget nutzt jetzt denselben Datums-Helfer wie die Vollansicht; im Frontend gibt es kein zweites Datumsformat mehr (Fixes #205)
  • Verwaiste Daten nach dem Löschen eines Benutzers — nach occ user:delete blieben Keller- und Weindaten in der Datenbank liegen, über kein UI mehr erreichbar. Ein Listener räumt beide Besitzwurzeln transaktional ab (Fixes #212)
  • Aktivitätslog: Die Sortierung „neueste zuerst" verließ sich bei Einträgen ohne Uhrzeit (Geschenk/Verlust) auf einen Zufall der strcmp-String-Länge statt auf eine benannte Regel; das Ergebnis bleibt gleich, aber ein künftiges ISO-T oder Sekundenbruchteile in einer Quelle würden die Reihenfolge nicht mehr still verschieben (Fixes #214)
  • Der Kauf-Wizard lud dasselbe Etikettenfoto einmal pro Flasche hoch — bei sechs Flaschen sechs identische Dateien. Jetzt ein Upload an den Jahrgang

Changed

  • Migration auf Vite 8 — der Bump scheiterte bisher an einem Laufzeitfehler (process is not defined). Ursache waren die esm-bundler-Builds von Vue, Pinia und Vue Router, die eine Ersetzung von process.env.NODE_ENV durch den Bundler voraussetzen (Fixes #182)
  • vinarium_vintage erhält photo_front_file_id und photo_back_file_id; vinarium_bottle.photo_file_id entfällt. Zwei getrennte Migrationsschritte, damit ein Abbruch beim Übertragen die Quelldaten intakt lässt
  • Neue Etikettenfotos liegen unter Vinarium/labels/; das bisherige Verzeichnis bleibt beim Ausliefern zugelassen, vorhandene Bilder werden nicht verschoben
  • Die Foto-Endpunkte sind von /bottles/{id}/photo nach /vintages/{id}/photo/{side} gewandert
  • Unit-Tests 80 → 115; neuer Workflow schließt referenzierte Issues beim Merge nach develop (Fixes #213, #216)
  • Dependency-Updates: ws, fast-uri, fast-xml-parser, @babel/core, postcss, immutable, js-cookie
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureKXImojCw5WspgTclqcxE/ZeZjYBXd+sJzS+dt8s5nCDmQwBQ5kt8zul8VRACrUq+2BvB/JArMf1HdNSHU77t84Dw3gxif8NZ+my5fhVLWVykW7by21VxVBeKEwtExVmlwJs1buldof734Dv8ar+6n/hPu+GBp88ey5Nvkd/kDlggsUtyY7dkV/yylVbJiDx22yvXZnuQO1WmQWz2BYs5r+JKA7MpYPhP2vQECVuPmiOI4tXQhL3gSPhX5TtzYc7JFntMRjVUzvfIFyZghtgQAuk3AyJB1NUke/8xql/0lYbw26VeEbZfbEif5jlNJMTxWxFaT0sOJkpRfdfclvvChA==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.0
Release Details
UpdatedAug. 2, 2026, 9:14 p.m.
Changelog

Added

  • Weine-Tab zeigt „Im Bestand" neben „Gekauft" — bisher stand dort nur die Summe aller je gekauften Flaschen, entkorkte, verschenkte und verlorene wurden nie abgezogen. Wer 12 gekauft und eine getrunken hatte, sah weiterhin 12. Die neue Spalte zählt die tatsächlich im Keller liegenden Flaschen und ist visuell führend; die Kaufhistorie steht gedämpft daneben (Fixes #189)
  • Süße-Grad am Jahrgang — neues optionales Feld (trocken / halbtrocken / lieblich / süß) an der Vintage, weil derselbe Wein je Jahrgang unterschiedlich ausgebaut sein kann. Erfassbar im Kauf-Wizard, im Jahrgangs-Edit und im Detail-Panel, filterbar im Bestand (auch als Deep-Link), angezeigt als Chip in Bestands- und Verkostungsliste (Fixes #89)
  • Eigener Anlage-Wizard für Weine ohne Kauf — „+ Wein" im Weine-Tab öffnet einen dreistufigen Wizard (Weingut / Wein / Jahrgang, Jahrgang überspringbar). Für geschenkte Flaschen, Altbestand aus der Zeit vor der App oder eine Wunschliste (Fixes #137)
  • Regal-Reihenfolge per Drag & Drop — Regale lassen sich über einen Griff im Tab umsortieren; die Reihenfolge wird atomar persistiert (Fixes #191)
  • Aktivitätslog unter #/activity — vollständige chronologische Übersicht über Käufe, Verkostungen, Geschenke und Verluste, mit Filter nach Art und Zeitraum sowie „Mehr laden". Der Dashboard-Link „Aktivität alle ›" führt jetzt dorthin statt ersatzweise auf die Verkostungen (Fixes #92)

Fixed

  • Esc schließt Modals auch dann, wenn der Fokus in einem Eingabefeld steht (Fixes #176)
  • composer.lock war nicht mehr deckungsgleich mit composer.json: nextcloud/ocp und doctrine/dbal fehlten, composer install brach ab und die PHP-Testsuite lief lokal nicht mehr
  • Zähler in Tabs und Kopfzeile des Bestands blieben nach dem Anlegen oder Löschen von Stammdaten stehen, bis die Seite neu geladen wurde

Changed

  • Zusätzlicher Endpoint GET /api/v1/vintages/stock liefert die Bestandszahlen als Aggregat — bewusst nicht aus der bereits geladenen Flaschenliste berechnet, die gefiltert ist und dadurch stillschweigend zu wenig angezeigt hätte
  • Neuer Endpoint PUT /api/v1/cellar/{cellarId}/shelves/order nimmt die vollständige Zielreihenfolge entgegen und nummeriert in einer Transaktion durch; fremde, fehlende oder doppelte IDs werden abgewiesen
  • Neuer Endpoint GET /api/v1/activity aggregiert Käufe, Verkostungen und Flaschen-Status-Ereignisse

Migration

  • vinarium_vintage.sweetness (nullable VARCHAR(16)) wird ergänzt. Kein Backfill — „nicht angegeben" ist für jede bestehende Zeile die zutreffende Aussage
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureJEZjUPpaA+YEzvliwINv6G01IKWT3fskgKfCboLaINciM4PGkLYFJTyhlWCJO3JugedMQLJXX5In6VhT7h1bRy1Bme9vHF9zptTek1BPXY981XvUutUmM307PvGBSL6oFFESRingGoqRhkvifLtrVLV2E6No1GqhKvQ77I6axOrSibHMPlfHRUevtwgj2YdvcHul2Jns6o1LvFpQLCLgg9QTqw9JKc9SbkVHlrU8R+LGBwGn5PjQPthjGf9uHWeuz9hzn5Yw3EmGJJZBIe0kr5iZ6ZOgb8eJFqmk51e+TsZAmkTdfT4PLqzz1+9NvUnltm3DyEB3v6KY73CLiIaAtw==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.4.2
Release Details
UpdatedJuly 6, 2026, 4:11 a.m.
Changelog

Added

  • Nextcloud 34 wird unterstützt (max-version 33 → 34)
  • Dashboard-Volltextsuche über Weingüter, Weine und Jahrgänge — Relevanz-sortiertes Dropdown mit Tastatursteuerung (⌘K, ↑↓, Enter, Esc), Klick springt in den Bestand; Jahrgang-Treffer zeigen die Flaschenzahl im Bestand (Fixes #103)
  • Bestand: Filter in der URL — alle Filter (Farbe, Status, Jahrgang, Weingut, Trinkfenster) sind deep-link-fähig und überleben ein Neuladen; neuer Filter „Trinkfenster läuft bis" als Preset-Auswahl; Dashboard-Kachel „Bald trinken → alle" verlinkt direkt auf den passend gefilterten Bestand (Fixes #90)
  • Spenden-Link (Ko-fi) in den App-Metadaten

Changed

  • Test- und CI-Härtung: stabilere Frontend-Tests (flushPromises statt nextTick), Typecheck-Fixtures repariert, Release-bewusstes Bot-Review, Dependabot auf Security-Updates reduziert
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureP/TsINmDSdIsI7lFKDI+dh1DHzW7CpEzTHNbAUMUuzIL9yFr9FRcfBMH5XfA6DaWB3LZocpMgmPtETCuZ3FQ38ZHEySnNXTtwsyrNP3SB8YAlJJqdwMOhansu+kqoMgCRb9eUJpS3CXc+ISISUaJ4EP4e8tVWEoC8K6CADrDVLWk1QYArZDETv9qXlxPIPPcF48MrukUOOYi+IxLVFOI/l6aVho/zmKgL2RGPo+ZHEPB8zEhof427fjFrlAlsue/p/k70G20IAZKwE1b/D2H/RXW/WMTbYxRJN8dnmzLp4LuSSCm40gvmDhY5VDV1qgKnDd148xk6Hdue4oym7ZFJQ==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0

Nextcloud 33

Vinarium 0.5.5
Release Details
UpdatedOct. 4, 2026, 8:23 p.m.
Changelog

Added

  • Menüeintrag „Neuerungen“ links unten: öffnet das „Was ist neu?“-Fenster jederzeit mit allen bisherigen Neuerungen, nach Version gruppiert. Nachlesen quittiert nichts, das automatische Fenster nach einem Update bleibt unverändert (#298)
  • Währung AUD (Australischer Dollar) beim Erfassen und Bearbeiten eines Kaufs (#294)

Changed

  • Fehlermeldungen laufen über einen gemeinsamen Helfer statt über catch (e: any). Beim Hochladen eines Etikett-Fotos erscheint jetzt die Meldung des Servers statt „Request failed with status code 400“. ESLint verbietet any nun als Fehler (#232)
  • Build: appName und appVersion für @nextcloud/vue kommen jetzt aus package.json (App-ID vinarium) und appinfo/info.xml statt aus festen Werten (VINARIUM, 0.1.0). Heute ohne sichtbare Wirkung, verhindert aber „VINARIUM 0.1.0“ in einem späteren Einstellungsdialog (#301)
  • Die Schema-Prüfung der whatsnew.json läuft jetzt zentral über nc-whatsnew-check aus nc-app-tooling v1.17.0 (npm run whatsnew:check, in der node-CI). Der PHP-Test prüft nur noch das App-Eigene: bekannte Symbole und kein plus-Feld (#296, nc-app-tooling#27)
  • CI: Die Ableitung der getesteten nextcloud/ocp-Versionen nutzt jetzt die geteilte Composite Action ocp-versionen@v1.17.0 aus nc-app-tooling statt einer eigenen Kopie im Workflow. Verhalten unverändert, auch der harte Abbruch bei einer Packagist-unbekannten Version (#295, nc-app-tooling#28)
  • @nextcloud/vue 9.11.0 (innerhalb der Spanne <9.12.0), vite 8.3.1, sass 1.105.0 (#300)
  • Abhängigkeiten aktualisiert: vue 3.5.43, eslint 10.11.0, nextcloud/ocp 34.0.4
  • @nextcloud/vue ist jetzt auch in package.json auf >=9.6.0 <9.12.0 begrenzt, nicht mehr nur über das Lockfile. Ab 9.12 zieht die Bibliothek über eine von Vinarium nicht genutzte Upload-Komponente @nextcloud/files/upload nach und der Build bricht; Dependabot überspringt diese Versionen jetzt, statt den Sprung wöchentlich erneut vorzuschlagen (#286)
  • Kompatibilität bis Nextcloud 35 (max-version). Geprüft auf einer echten NC-35-Instanz (35.0.0): Installation, Migrationen, App-Start und alle Ansichten (Dashboard, Bestand, Regal, Verkostungen) ohne Befund; die Unit-Suite läuft in der CI zusätzlich gegen nextcloud/ocp dev-master
  • CI: Die PHPUnit-Matrix wählt die getesteten nextcloud/ocp-Versionen jetzt nach der PHP-Version des jeweiligen Jobs. NC 35 lässt PHP 8.2 fallen (nextcloud/ocp v35 verlangt ~8.3 || ~8.4 || ~8.5), der 8.2-Job wäre sonst an einer Auflösung gescheitert, die gar nicht scheitern soll. Neuer Job für PHP 8.5; php min-version bleibt bei 8.2, weil eine App-Untergrenze auf einem NC-35-Server ohnehin nicht bindend ist und ein Anheben nur NC-32-bis-34-Nutzer aussperren würde (Muster aus contractmanager#414)
  • Mindestversion auf Nextcloud 33 angehoben (min-version; max-version bleibt 35). Ohne <database>-Deklaration begrenzt NC bei min-version 32 Bezeichnernamen auf die scharfen Oracle-11-Grenzen (30/27/22 Zeichen); seit NC 33 gilt stattdessen eine glatte 63 (nextcloud/server#51593), zudem korrigiert NC 33 die NOT-NULL-Boolean-Behandlung selbst. Oracle bleibt installierbar (kein <database>-Ausschluss). Preis: NC-32-Nutzer erhalten kein Update mehr; Produktivinstanzen laufen auf NC 34 (nc-app-tooling#15)

Fixed

  • Die Apache-2.0-Attribution des App-Symbols (mdi-grapes) wird jetzt mit ausgeliefert. Sie stand bisher in THIRD_PARTY_NOTICES.md, die beim Packen still herausfiel; jetzt steht sie in der README.md
  • Dialog-Titel schweben nicht mehr über der Suchleiste der Nextcloud-Kopfzeile. Alle acht Dialoge benennen sich jetzt über ihre eigene Überschrift (labelId statt name); der Foto-Zuschnitt hat dafür eine sichtbare Überschrift bekommen (#314)
  • Etikett-Foto: Ein Bildformat, das der Browser nicht anzeigen kann (z. B. HEIC vom iPhone in Chrome oder Firefox), führt nicht mehr zu einem leeren Zuschnitt-Fenster mit stumm scheiterndem „Übernehmen“. Stattdessen erscheint eine verständliche Meldung mit der Bitte um JPG oder PNG, und „Übernehmen“ bleibt gesperrt (#276)

Security

  • Transitive Abhängigkeiten auf gepatchte Versionen gehoben: axios 1.20.0, brace-expansion 2.1.7 / 5.0.12, dompurify 3.4.16. Schließt 17 Dependabot-Sicherheitshinweise, davon 9 mit hoher Einstufung (#306)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
Signaturep/ZD74IDgpTze8yTsiofsXe7wtEKQoiWPPz7p5kF1c4ZvLKhYzYYMjXzF4oajcIgTrHERVn/wJVL7LI2AEanYUzCqgioymcL9bgCyH2BZHLJO0bu0vf0Nr6/jQWdeqhWUI7FHzQrtzYOdepcdzwg9PzyLfJZ5x7COmdGnTPPJvkbULRiAu4/HYTRytm06O5hYe1YUv3CLmCVsXWR1ngM1EYCDUMNR8xfaAQNihuKmaAKKY5r/indsflxDV+0jiKRAIEKWCUiLIEsChlxbHb3QXpw+jSlkEmOUtDxjrxw0c5+8/Wb61jjikCYAXrrHdDLagNj5a+7P+w4wJl8eOMtug==
Signature digestsha512
Dependencies
Required Nextcloud versions >=33.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.4
Release Details
UpdatedSept. 21, 2026, 8:39 p.m.
Changelog

Added

  • „Was ist neu?"-Fenster — nach einem Update zeigt Vinarium einmal je Nutzer und Version kurz, was sich geändert hat. Die Inhalte liegen als whatsnew/whatsnew.json im App-Paket, es wird nichts von fremden Servern nachgeladen. Wegklickbar per Knopf, X oder Escape; jeder Weg quittiert. Keine Kumulation über mehrere Versionen, kein Fenster bei einer Neuinstallation, und fällt etwas aus, bleibt das Fenster einfach aus (Fixes #284)

Beim Release beachten: Der Versions-Schlüssel in whatsnew/whatsnew.json muss der Version des Release entsprechen, sonst bleibt das Fenster stumm.

Changed

  • Abhängigkeiten aktualisiert: vitest, nanoid, brace-expansion sowie die composer-Entwicklungsabhängigkeiten. @nextcloud/vue bleibt bewusst auf 9.6.0 — ab 9.12 zieht die Bibliothek über eine von Vinarium nicht genutzte Upload-Komponente @nextcloud/files, dialogs, webdav und sax nach und sprengt damit das ausgelieferte Bundle (#280/#281)
  • Werkzeugkette: nc-app-tooling auf v1.15.0 — erst diese Fassung lässt den neuen Ordner whatsnew/ ins Release-Archiv
  • CI-Actions aktualisiert (setup-node 7, github-script 9, canary v1.14.0)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignaturebHd7d1ugn3WAZC3DYuklDxGCBhZZqmRGyOJe/4v8BwGcMFIOTZ2mFbs6nN8OHbUgThj8GUbf57pXsD2/gclRDrcWw65RLkqog5vbRv68GDl8YiSE13TXEwrdH12CSxq+9jdlELMidiqNEvZvB2gA2ZcePqQ9VPOAhf/on/fZ9IbUiNPhCcEjpA8RMC9TdGAAjS6lepsOU9s7qxcHT6gQHqrvoqcmFtRl0o0V5rP6ZKh6boVuNrD+OsivkevuCom3bGcd951SttbzDqB3wMZ10L4LstSNuCH9JqJix3OIB+Us9o6uy6opQ1FD/lILNfjcQ61OQpzt4I7l8A7x4e/evQ==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.3
Release Details
UpdatedSept. 19, 2026, 5:49 p.m.
Changelog

Fixed

  • Etikettenfotos ließen sich nicht zuschneiden — beim Hochladen eines Etiketts (Kauf-Wizard und Etikett-Bearbeitung) blieb der Zuschneide-Dialog leer, und „Übernehmen" scheiterte mit „Zuschneiden fehlgeschlagen". Betroffen war jedes Bildformat, nicht nur HEIC vom iPhone. Ursache: vue-cropperjs liefert nur ein CommonJS-Bundle ohne ESM-Entry; unter Vite 8 band der Default-Import an ein Nicht-Komponenten-Objekt, sodass die Cropper-Komponente nicht mountete und ihre Methode getCroppedCanvas fehlte. Der Default wird jetzt defensiv aufgelöst, unabhängig von der Interop-Form (Fixes #254)
  • Fehlende und fehlerhafte Übersetzungen — 40 fehlende Übersetzungen ergänzt und drei kaputte Pluralschlüssel korrigiert (Fixes #243)

Security

  • dompurify auf 3.4.13 aktualisiert (#236)

Changed

  • Release-Hygiene: Dev-, Test- und Konfigurationsdateien werden über .gitattributes export-ignore aus dem ausgelieferten Archiv gehalten; die Apache-2.0-Attribution (THIRD_PARTY_NOTICES.md) bleibt bewusst enthalten (#273)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureVFLynGFGiGTg6duOEskdKYb8c85h1tu3KS2Zkuuwveh+J5Py2f8Rd+g9xlRsH6I0XwbrHu5sq+ktVVIuywHLMuiAK9QE37Y7X8EPTWLIymH7QFegj/xabxyxUZX4SlciFWAutA7ptqe3uY5mdX2TINkWWFt4rsXlavl5qFrlOIWU/gmq8VTv+yeWBmAMFoRe3s6FYAmguwexw5TYECPw7Y7xMhmn8psj1f0eEAEcDRESk92wdVOFuCtCjJ0RurQSxLtPgG4UbovX//BHXm395dlmXMrRdG4Wt/38IuLn4P4ig6AHUOX0CjcLAkaIHBtyLMqHjDWwKprMZp+VwDyTmw==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.2
Release Details
UpdatedAug. 8, 2026, 9:35 p.m.
Changelog

Fixed

  • 0.5.1 ließ sich nicht benutzen: die App rendert nicht — jede Datumsausgabe warf TypeError: (0, ns.default) is not a function. Betroffen war formatDate, und die steckt im Dashboard und fünf weiteren Ansichten, darunter der Standardroute; sichtbar blieb ein leerer Inhaltsbereich. Ursache war der Bundler-Wechsel in 0.5.1: @nextcloud/moment liefert ein UMD-Bundle ohne eigenen default-Export, und Vite 8 (Rolldown) greift bei solchen Paketen im Bibliotheks-Build direkt auf .default zu, wo Vite 7 zuvor einen Auspack-Helfer eingefügt hatte. formatDate kommt jetzt ohne die Bibliothek aus: für ein ISO-Datum als TT.MM.JJJJ genügen ein Muster und eine Kalenderprüfung über UTC. Damit hängt die Funktion an keiner Bundler-Interop mehr, und das Bundle verliert die komplette moment-Sprachdatenbank, rund 132 KB (Fixes #233)

Changed

  • Vite bleibt auf 8. Ein Rückbau auf 7 war zwischenzeitlich erwogen und wieder verworfen: die Interop ist nicht generell defekt, sondern nur für UMD-Pakete ohne default. Für gewöhnliche CommonJS-Pakete setzt der eingefügte Helfer default korrekt auf module.exports, nachgewiesen an @nextcloud/event-bus
  • @nextcloud/moment als Abhängigkeit entfernt
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignaturesJcpYAXpveeojzkqkXbjpOpi9ynBLpRlQ+DN8eo5jJxaHnU208XPXL6WCR6CA4X5SUlSP0qKmgiPAdN9Bn7vnozHzEf/M/YNVJX3JZRoMO+eUWVUkMoa9GORCEU4NKvvdxfAIkFQc1Gs+hYI4K3wImQLh6oLkiooelfqYH14LG6Wa9niqXCxX8COFzvOs0zmZrhgdM0cAfkfcUxBi8Y/MTnv1U6L2aeBsbu+TSNBaqE3+BjV1I4TgGf+rInpM7iFahHngmFBvZOeq04XToHc5nxeW9lL5so7eihXlz7aQk51LAbZnTjNR+Jnc4O454ApnEA9rZEIUrhhqCyJW1gQMA==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.1
Release Details
UpdatedAug. 4, 2026, 4:17 a.m.
Changelog

Added

  • Etikett mit Vorder- und Rückseite — das Etikettenfoto hängt jetzt am Jahrgang statt an der einzelnen Flasche, und es lassen sich zwei Seiten hinterlegen. Die Rückseite trägt in der Praxis Rebsorten, Lage und Abfüller. Bestehende Flaschenfotos wandern als Vorderseite mit; tragen mehrere Flaschen eines Jahrgangs unterschiedliche Fotos, gewinnt die zuerst aufgenommene, keine Datei wird gelöscht (Fixes #190)
  • Etiketten frei zuschneiden — das feste 3:4-Hochformat entfällt für Etiketten. Rückenetiketten sind oft anders proportioniert; ein erzwungenes Verhältnis schnitt dort Text weg. Verkostungsfotos behalten ihr Verhalten
  • Regal-Reihenfolge per Tastatur — am aktiven Regal verschieben zwei Knöpfe es eine Position nach links oder rechts. Drag & Drop war bisher der einzige Weg und ist per Tastatur nicht bedienbar (Fixes #211)

Fixed

  • Vue lief im ausgelieferten Produktionsbundle im Entwicklungsmodus — ein pauschales 'process.env': {} in der Vite-Konfiguration ließ NODE_ENV als undefined durchlaufen, wodurch Warnungen, Prop-Typprüfungen und Devtools-Hooks im Bundle landeten. Nach der Korrektur ist das Bundle rund 100 KB kleiner (gzip 472 → 438 KB)
  • Aktivitäts-Widget zeigte das Datum ohne Jahr — Einträge aus verschiedenen Jahren waren nicht unterscheidbar, ein Datum in der Zukunft las sich wie ein Sortierfehler. Das Widget nutzt jetzt denselben Datums-Helfer wie die Vollansicht; im Frontend gibt es kein zweites Datumsformat mehr (Fixes #205)
  • Verwaiste Daten nach dem Löschen eines Benutzers — nach occ user:delete blieben Keller- und Weindaten in der Datenbank liegen, über kein UI mehr erreichbar. Ein Listener räumt beide Besitzwurzeln transaktional ab (Fixes #212)
  • Aktivitätslog: Die Sortierung „neueste zuerst" verließ sich bei Einträgen ohne Uhrzeit (Geschenk/Verlust) auf einen Zufall der strcmp-String-Länge statt auf eine benannte Regel; das Ergebnis bleibt gleich, aber ein künftiges ISO-T oder Sekundenbruchteile in einer Quelle würden die Reihenfolge nicht mehr still verschieben (Fixes #214)
  • Der Kauf-Wizard lud dasselbe Etikettenfoto einmal pro Flasche hoch — bei sechs Flaschen sechs identische Dateien. Jetzt ein Upload an den Jahrgang

Changed

  • Migration auf Vite 8 — der Bump scheiterte bisher an einem Laufzeitfehler (process is not defined). Ursache waren die esm-bundler-Builds von Vue, Pinia und Vue Router, die eine Ersetzung von process.env.NODE_ENV durch den Bundler voraussetzen (Fixes #182)
  • vinarium_vintage erhält photo_front_file_id und photo_back_file_id; vinarium_bottle.photo_file_id entfällt. Zwei getrennte Migrationsschritte, damit ein Abbruch beim Übertragen die Quelldaten intakt lässt
  • Neue Etikettenfotos liegen unter Vinarium/labels/; das bisherige Verzeichnis bleibt beim Ausliefern zugelassen, vorhandene Bilder werden nicht verschoben
  • Die Foto-Endpunkte sind von /bottles/{id}/photo nach /vintages/{id}/photo/{side} gewandert
  • Unit-Tests 80 → 115; neuer Workflow schließt referenzierte Issues beim Merge nach develop (Fixes #213, #216)
  • Dependency-Updates: ws, fast-uri, fast-xml-parser, @babel/core, postcss, immutable, js-cookie
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureKXImojCw5WspgTclqcxE/ZeZjYBXd+sJzS+dt8s5nCDmQwBQ5kt8zul8VRACrUq+2BvB/JArMf1HdNSHU77t84Dw3gxif8NZ+my5fhVLWVykW7by21VxVBeKEwtExVmlwJs1buldof734Dv8ar+6n/hPu+GBp88ey5Nvkd/kDlggsUtyY7dkV/yylVbJiDx22yvXZnuQO1WmQWz2BYs5r+JKA7MpYPhP2vQECVuPmiOI4tXQhL3gSPhX5TtzYc7JFntMRjVUzvfIFyZghtgQAuk3AyJB1NUke/8xql/0lYbw26VeEbZfbEif5jlNJMTxWxFaT0sOJkpRfdfclvvChA==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.0
Release Details
UpdatedAug. 2, 2026, 9:14 p.m.
Changelog

Added

  • Weine-Tab zeigt „Im Bestand" neben „Gekauft" — bisher stand dort nur die Summe aller je gekauften Flaschen, entkorkte, verschenkte und verlorene wurden nie abgezogen. Wer 12 gekauft und eine getrunken hatte, sah weiterhin 12. Die neue Spalte zählt die tatsächlich im Keller liegenden Flaschen und ist visuell führend; die Kaufhistorie steht gedämpft daneben (Fixes #189)
  • Süße-Grad am Jahrgang — neues optionales Feld (trocken / halbtrocken / lieblich / süß) an der Vintage, weil derselbe Wein je Jahrgang unterschiedlich ausgebaut sein kann. Erfassbar im Kauf-Wizard, im Jahrgangs-Edit und im Detail-Panel, filterbar im Bestand (auch als Deep-Link), angezeigt als Chip in Bestands- und Verkostungsliste (Fixes #89)
  • Eigener Anlage-Wizard für Weine ohne Kauf — „+ Wein" im Weine-Tab öffnet einen dreistufigen Wizard (Weingut / Wein / Jahrgang, Jahrgang überspringbar). Für geschenkte Flaschen, Altbestand aus der Zeit vor der App oder eine Wunschliste (Fixes #137)
  • Regal-Reihenfolge per Drag & Drop — Regale lassen sich über einen Griff im Tab umsortieren; die Reihenfolge wird atomar persistiert (Fixes #191)
  • Aktivitätslog unter #/activity — vollständige chronologische Übersicht über Käufe, Verkostungen, Geschenke und Verluste, mit Filter nach Art und Zeitraum sowie „Mehr laden". Der Dashboard-Link „Aktivität alle ›" führt jetzt dorthin statt ersatzweise auf die Verkostungen (Fixes #92)

Fixed

  • Esc schließt Modals auch dann, wenn der Fokus in einem Eingabefeld steht (Fixes #176)
  • composer.lock war nicht mehr deckungsgleich mit composer.json: nextcloud/ocp und doctrine/dbal fehlten, composer install brach ab und die PHP-Testsuite lief lokal nicht mehr
  • Zähler in Tabs und Kopfzeile des Bestands blieben nach dem Anlegen oder Löschen von Stammdaten stehen, bis die Seite neu geladen wurde

Changed

  • Zusätzlicher Endpoint GET /api/v1/vintages/stock liefert die Bestandszahlen als Aggregat — bewusst nicht aus der bereits geladenen Flaschenliste berechnet, die gefiltert ist und dadurch stillschweigend zu wenig angezeigt hätte
  • Neuer Endpoint PUT /api/v1/cellar/{cellarId}/shelves/order nimmt die vollständige Zielreihenfolge entgegen und nummeriert in einer Transaktion durch; fremde, fehlende oder doppelte IDs werden abgewiesen
  • Neuer Endpoint GET /api/v1/activity aggregiert Käufe, Verkostungen und Flaschen-Status-Ereignisse

Migration

  • vinarium_vintage.sweetness (nullable VARCHAR(16)) wird ergänzt. Kein Backfill — „nicht angegeben" ist für jede bestehende Zeile die zutreffende Aussage
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureJEZjUPpaA+YEzvliwINv6G01IKWT3fskgKfCboLaINciM4PGkLYFJTyhlWCJO3JugedMQLJXX5In6VhT7h1bRy1Bme9vHF9zptTek1BPXY981XvUutUmM307PvGBSL6oFFESRingGoqRhkvifLtrVLV2E6No1GqhKvQ77I6axOrSibHMPlfHRUevtwgj2YdvcHul2Jns6o1LvFpQLCLgg9QTqw9JKc9SbkVHlrU8R+LGBwGn5PjQPthjGf9uHWeuz9hzn5Yw3EmGJJZBIe0kr5iZ6ZOgb8eJFqmk51e+TsZAmkTdfT4PLqzz1+9NvUnltm3DyEB3v6KY73CLiIaAtw==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.4.2
Release Details
UpdatedJuly 6, 2026, 4:11 a.m.
Changelog

Added

  • Nextcloud 34 wird unterstützt (max-version 33 → 34)
  • Dashboard-Volltextsuche über Weingüter, Weine und Jahrgänge — Relevanz-sortiertes Dropdown mit Tastatursteuerung (⌘K, ↑↓, Enter, Esc), Klick springt in den Bestand; Jahrgang-Treffer zeigen die Flaschenzahl im Bestand (Fixes #103)
  • Bestand: Filter in der URL — alle Filter (Farbe, Status, Jahrgang, Weingut, Trinkfenster) sind deep-link-fähig und überleben ein Neuladen; neuer Filter „Trinkfenster läuft bis" als Preset-Auswahl; Dashboard-Kachel „Bald trinken → alle" verlinkt direkt auf den passend gefilterten Bestand (Fixes #90)
  • Spenden-Link (Ko-fi) in den App-Metadaten

Changed

  • Test- und CI-Härtung: stabilere Frontend-Tests (flushPromises statt nextTick), Typecheck-Fixtures repariert, Release-bewusstes Bot-Review, Dependabot auf Security-Updates reduziert
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureP/TsINmDSdIsI7lFKDI+dh1DHzW7CpEzTHNbAUMUuzIL9yFr9FRcfBMH5XfA6DaWB3LZocpMgmPtETCuZ3FQ38ZHEySnNXTtwsyrNP3SB8YAlJJqdwMOhansu+kqoMgCRb9eUJpS3CXc+ISISUaJ4EP4e8tVWEoC8K6CADrDVLWk1QYArZDETv9qXlxPIPPcF48MrukUOOYi+IxLVFOI/l6aVho/zmKgL2RGPo+ZHEPB8zEhof427fjFrlAlsue/p/k70G20IAZKwE1b/D2H/RXW/WMTbYxRJN8dnmzLp4LuSSCm40gvmDhY5VDV1qgKnDd148xk6Hdue4oym7ZFJQ==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.4.1
Release Details
UpdatedJune 19, 2026, 9:42 p.m.
Changelog

Added

  • „Würde ich wieder kaufen"-Flag bei Verkostungen — eigenständiges Empfehlungs-Signal (ja / nein / keine Angabe), unabhängig von der Bewertung; filigraner ✓/✗-Toggle im Entkork-Dialog, Badge im Verkostungs-Detail (Fixes #143)

Fixed

  • Kauf-Wizard Schritt 4: irreführendes Button-Label „📷 Foto aufnehmen" → „Foto hinzufügen" (am Desktop ist es ein Datei-Upload), konsistent mit den übrigen Foto-Buttons (Fixes #142)
  • l10n/de.json und l10n/en.json waren durch ein gerades Anführungszeichen kein valides JSON — auf deutsches schließendes Anführungszeichen korrigiert (Fixes #146)
  • CI: Bot-Review nutzt die korrekte PR-Nummer und eine breitere Lese-Allowlist
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
Signatureu4lkF9YOU7hyuKntedlHxUVnCtEkbCH4ddoimnbpbmINVXQCFxx6hTnyo8jh7XWxBkq1Gb8H90t0zN+ih2N1xyP0KMMsfy9y48YACeM9DkFZmjMAE5bbf5ck4cdKmMI6/Tf4tiGHdZEl+s28JPN3pF2SzSMZXQ5/Yxpd3Aj2DEVlMzjwF7d46Jvv6RmYToZQZc9aWWhsbTm2SFVr6s17eKBHXrOkbvlElg2k7NlrbpMRebhHzETjdJYu3bHKAaGigvCHTfm5cuZX6MzGSYvfiBpCioH0kk+9rn+5Ai9rE+/tlZ/uzO1uXE3Ir0USCUZ2ISlhxAQfQ+zNGVHXpOuz6g==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.4.0
Release Details
UpdatedJune 11, 2026, 5:02 p.m.
Changelog

Großes UI-Redesign über alle Ansichten („v4-Konzept") plus neue Detail- und Foto-Funktionen.

Added

  • Dashboard-Redesign — Bestand-Hero mit Farb-Verteilung, „Bald trinken"-Vorschläge anhand des Trinkfensters, „Top & Flop" (beste/schlechteste Bewertung pro Wein × Jahrgang) und Aktivitäts-Feed (Fixes #94, #99, #91)
  • Bestand komplett neu — fünf flache Sub-Tabs (Flaschen · Weingüter · Weine · Käufe), v4-Kartentabellen mit Bewertungs-Spalte und Weingut-Filter (Fixes #111, #113, #114, #115)
  • Wein × Jahrgang — der Weine-Tab zeigt Weine gruppiert mit ihren Jahrgängen und einer farbigen Trinkfenster-Pille; der separate Jahrgänge-Tab entfällt (Fixes #132)
  • Käufe in den Stammdaten editier- und löschbar (CRUD-Konsistenz) (Fixes #116)
  • Flaschen-Detail-Modal mit fünf Reitern (Flasche · Weingut · Wein · Jahrgang · Kauf) und Vor/Zurück-Navigation samt Tastatursteuerung (Fixes #131)
  • Etiketten-Fotos — direkt beim Einlegen ins Regal aufnehmen, als Hintergrund im Regal-Slot anzeigen, jahrgangsweit geteilt mit Zuschnitt (Fixes #117, #118, #127, #128)
  • Verkostungen-Redesign — Vier-KPI-Reihe und Bewertungs-Balken in der Tabelle (Fixes #97)
  • Weinkeller/Regal-Redesign — links angeheftete Parkzone und gedämpfte Slot-Farben (Fixes #96)
  • Kauf-Wizard: Händler-Autocomplete aus bestehenden Käufen (Fixes #86)
  • Fächer werden beim Löschen automatisch neu durchnummeriert (Fixes #105)

Changed

  • Kauf-Wizard: Notiz-/Beschreibungsfelder klarer beschriftet (Cuvée vs. Jahrgang) (Fixes #87)
  • App-Store-Screenshots auf den neuen v4-Stand aktualisiert

Fixed

  • Verkostungs-Datum erlaubt keine Zukunft mehr (Fixes #85)
  • Tabellenkopf im Bestand bleibt korrekt sticky (Fixes #112)
  • Foto rendert nicht (CSRF) plus zwei Layout-Bugs im Detail-Panel (Fixes #126)
  • Diverse Review-Fixes: CSV-Export gegen Formel-Injection abgesichert, durchgängige UTC-Zeitzonen-Behandlung, vollständige englische l10n

Removed

  • Eigenständige Weine-View — in den Bestand als Stammdaten-Tab gefaltet (Fixes #95)
  • Jahrgänge-Tab — in den Wein × Jahrgang-View integriert (Fixes #132)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureqkG5mJT1X8Beech72w5aeHZmuMJEk2cFFVjtlJ7jAHjNqrKz5VBsY8fDxlH9BzmtYYyJiHfD8A+MzsG2wHhYqWkH1LCwjaBHSkAuTTc9yenTzoAYpcF7b5DVBGLWDd6Ge2MKGztAKYYz/hUbAEvx2/MFeGb44pVW1nzx6z0+AVi1lSaNvi78d1aNmCnvx6CJjDFmcbVGofR1NMHz6i+DP6SZ8xq75/QY1OOEhVPLmEEcjkvrs+qB2hOweCB7gg84bD55pXq5uaRqeFOdxcJ0dB5MfgWD02GyMCVZFZotsI3h/Wd3uQ5bhZUjEByuN0Bw04XpgFOnRhpbRIUEZdRwdg==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.3.0
Release Details
UpdatedMay 20, 2026, 12:20 p.m.
Changelog

Added

  • Flaschen verschenken und als verloren markieren — Verschenken erfasst Empfänger (mit Autosuggest aus früheren Empfängern), Datum und Anlass; Verloren erfasst Datum und Grund. Buttons im Regal-Detail und im Bestand (nur bei Flaschen im Bestand); beide geben den Slot frei. Dashboard um Zähler „Verschenkt" und „Verloren" erweitert (Fixes #66)
  • Regal-Kopfbereich als sticky Tab-Leiste — Regale als Tabs (immer sichtbar), Regal per Klick auf den Tab umbenennen, ✕ mit Bestätigungsdialog, „+"-Tab zum Anlegen eines neuen Regals. Der Kopfbereich (inkl. Parkzone) bleibt beim Scrollen langer Regale sichtbar (Fixes #64, #70)
  • Fächer umbenennen per Inline-Edit (Klick auf den Fach-Titel) (Fixes #73)
  • Sticky Header/Filter/Tabellenkopf in der Bestands-Ansicht — bei langen Listen bleiben Überschrift, Filter und Spaltenköpfe sichtbar (Fixes #65)

Changed

  • Kauf-Wizard persistiert erst beim Abschluss — „Weiter" legt nichts mehr vorzeitig an, Vor/Zurück lässt alle Felder editierbar, „Abbrechen" hinterlässt keine Geister-Daten. Producer/Wein/Jahrgang/Kauf werden am Ende in einer Transaktion erstellt (Fixes #68)
  • Bestands-Aktionen kompakt: gefüllter „Entkorken"-Button + ⋮-Menü für Verschenken/Verloren statt drei gestapelter Buttons
  • formatDate in eine gemeinsame Utility ausgelagert (statt in vier Komponenten dupliziert)

Fixed

  • Datumsanzeige im deutschen Format dd.mm.yyyy statt US-Format MM/DD/YYYY (Fixes #67)
  • PHPUnit-Suite an aktuelle Code-Signaturen angepasst — volle Suite wieder grün (Fixes #72)
  • Backend-Status-Validierung für Verschenken/Verloren (nur Flaschen im Bestand, sonst HTTP 400)
  • Diverse Robustheits-Fixes aus Code-Reviews: Race-Condition beim Click-to-Move im Regal, Dateigrößen-Prüfung vor Foto-Upload, Regalname auf DB-Limit (255) begrenzt, Event-Felder in der Bottle-Detail-Response, sichtbares Fehler-Feedback beim Zurücksetzen
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureuuQYRj3gjlbyTj7E6lnyC82tMSMEdVxfTOJdp49xqI6kbpaiWMbvqLnbCYjwJYSQC/FKGJALX/WYgVi8puxt/5snzR4D+ecg70fpfkL92MX3/1XTZc0mQ1eZGf2OaSvaGL51c+Cs2vXsm42jg3WDcW+D30vU8BJEFztDc5fD6x38On4jbPTBA7CVEt7XakJVgM//A64fT5lnMDRYqIE8gzlZm4DOZnkTCFOgwMdLGgLd4M5JDPrI+8t9yZ36dkvGsDVjh/IoY1JWm4mcjMMwDrLYRSRibQH06JUc42doPc6xvT25vmy4e9uYvoF0q7LjlCe4URFoEcm/2PDkq3wuDw==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.2.0
Release Details
UpdatedMay 19, 2026, 8:59 p.m.
Changelog

Added

  • Fächer eines Regals lassen sich nachträglich hinzufügen und löschen — „+ Fach hinzufügen"-Button am Ende eines Regals, ✕-Button pro Fach mit Bestätigungsdialog; Flaschen aus gelöschten Fächern landen in der Parkzone (Fixes #49)
  • Cellar-View: Parkzone ist jetzt unabhängig vom Cellar immer sichtbar; das letzte Regal lässt sich löschen — die View fällt dann auf einen schlanken Empty-State zurück (Fixes #48)

Changed

  • Native Browser-confirm()-Dialoge ersetzt durch NC-styled ConfirmDialog (knallroter Delete-Button, NC-Look) — durchgängig in Wine-Picker, Bottle-Move, Shelf-Delete, Compartment-Delete (Fixes #50)
  • NcButton-Migration type → variant an 21 Stellen: Primary-Buttons sind jetzt wieder NC-blau, Tertiary transparent — die visuelle Hierarchie war zuvor verloren gegangen (Fixes #55)
  • Bessere Fehlermeldungen im TastingDialog und beim Bottle-Picker bei API-Fehlern statt stiller Fehlschläge (Fixes #41)
  • App-Beschreibung in info.xml gestrafft

Fixed

  • TastingService::consumeWithTasting() ist jetzt atomar — Flasche und Verkostung werden in einer DB-Transaktion erstellt; schlägt die Verkostung fehl, wird der Flaschen-Status zurückgerollt (Fixes #36)
  • DoesNotExistException in den neuen Compartment-Endpoints wird jetzt korrekt zu HTTP 404 statt 500

Removed

  • Toter Code: consumeBottle() aus API und Store entfernt (Fixes #37)
  • Toter Code: ungenutzter Frontend-Wrapper createDefaultCellar() aus api/cellar.ts
  • Standard-Regal-Button im Empty-State entfernt — Anlegepfad ist jetzt einheitlich der „+ Neues Regal"-Wizard

Refactored

  • cssColorFor in src/utils/wineColors.ts extrahiert (6 Aufrufer statt zuvor 2 dupliziert) (Fixes #39)
  • restoreBottle als Store-Action ergänzt (Fixes #40)

Compliance

  • Apache-2.0-Attribution für mdi-grapes in THIRD_PARTY_NOTICES.md ergänzt (Fixes #38)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureNPwU40rhD1C6vL+MBWzsgJo+OWOJFr8SEkaGQNebPMvf20saNa7rP5FxdfiQ/4DUKTRgJE+088PBLeSL2UdzYmTjzVFr0MLAvwvSNBB8qUsqQNOyXL/jazq3UIiTlo4AcqDcxUpgj70M9ZHZYuN99yBTWAsdjjd5rxlKU7qCxnRvMpso29L9/OhbgqwoaQjLwr5jPcYXbVF1umhCazOZDDfbZFLDZVp5beC8w2KgFo5DcV/+1y/rKjlibKqtvx9wIPTDqTU3DwwFc07QFCNI8xyxKm6995H48uP2E8zit4ovoLOqs6DpRJEw1BnH2J/oyz3S1wNm3dfIyIkeldyEzQ==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.1.2
Release Details
UpdatedMay 18, 2026, 5:42 p.m.
Changelog

Added

  • App Store Screenshots (Dashboard, Wines, Inventory, Tasting-Detail, Tastings)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignaturehkhxxeKp/qxcQIGp2bRTUjO1iwK8W7X7bShRF85w9Vb3xvkc6CxS/t0CCiFdSZHD6HRkqkVKAeb9wlJKaWhQt/SaFDBJOw6xK5eX1GDVGr9y+Yi3Rrz9whjgQxTKDlZdEzZyIOphTdM7BZwwzuKpm9Sixxej0Bts8gIiy2JMlDdPaYINJObPZ6GQ5CCPVx1gjlGZbqtE9RO9uVEHRxtsPTEXTiXXINC6R/IA4LotR02LUgNz/cv7O34aAc/LpGLtEP/Ft8eTIfI0NPZKfoskgvwpX9HXst6Fm/m+CiBZIdoOZ5kWWGQBlDjuxLbkl74BFGQ4Ymv1YB9PfHgpR4WaHQ==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.1.1
Release Details
UpdatedMay 18, 2026, 12:57 p.m.
Changelog

Fixed

  • l10n: JSON-Dateien hatten keinen translations-Wrapper → HTTP 500 für Nutzer mit EN-Locale
  • l10n: ASCII-Anführungszeichen " statt typografischem " in l10n-Keys → JS-Syntaxfehler beim Laden
  • NcModal: name-Prop in TastingDialog, TastingDetailModal, EntityEditModal und PurchaseWizardModal ergänzt (Accessibility)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignaturejZ4bYSjrgI5OtRUgR5l1OswIygA23KIIh4dCJawWzAyoT+F+ebyMZA45lTfLqfhen8rDs+fSIyYSVsfRLqNdu5BOW8gECIzN14OzkgB80NALiv0Yi9J/69Es4DOskW09uOu85iDMOprOeXcxpRWmBikLbJSeAcfhvXR4tnF056MdcZyX9gVhtclwsYJByPfWZBCQUjXOXmoyuyfzh0iuIEF7tcHzK3EgICUGMznnQAdPQkvDHFfkhyekvr9Fzut5NNjrNtKI6iEGge79yYodoBoZYvXwG6nA3quIYHUfTvc7N5bUg/a++hcWqwpVYNQizRv7CqehzbVmaMXw4U0B+A==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.1.0
Release Details
UpdatedMay 18, 2026, 6:49 a.m.
Changelog

Erste offizielle Veröffentlichung — Weinverwaltung End-to-End.

Added

Datenbank + Backend - 10 DB-Tabellen via Migration (Cellar, Shelf, Compartment, Slot, Producer, Wine, Vintage, Purchase, Bottle, Tasting) - 10 Entities + 10 QBMapper-Subklassen mit Owner-Queries - CellarService: Default-Regal (234 Slots), Reconfigure mit Parkzonen-Migration - ProducerService, WineService, VintageService: CRUD mit Ownership-Checks - PurchaseService: CRUD + Bottle-Size-Validation - BottleService: Bulk-Insert, Move (409 SlotOccupied), Swap, Consume, Restore, Filter (4-Table JOIN) - TastingService: Create, Update, ConsumeWithTasting, List (denormalisiert), Detail-View - DashboardService: Stats-Aggregation (Bestand, Farb-Verteilung, Bald-Trinken) - ExportService: CSV-Export (UTF-8 BOM, Semikolon, denormalisiert) - PhotoService: Foto-Upload in NC-Files (IRootFolder), Thumbnail via NC Preview API - Foto-Upload für Flaschen (1 Foto) und Verkostungen (mehrere Fotos)

REST-API - 40+ Endpoints unter /api/v1/ (Producer, Wine, Vintage, Purchase, Bottle, Tasting, Cellar, Dashboard, Export, Photo) - DataResponse mit HTTP-Status-Mapping (404/403/400/409/201/204) - CSRF-Schutz auf allen mutierenden Endpoints

Frontend - Vue 3 + TypeScript + Vite + Pinia - PurchaseWizardModal: 4-Step-Wizard (Weingut → Wein → Jahrgang → Kauf) - Single-Action-Flow (Weiter = speichert + advanced) - Form zeigt Daten bei Auswahl eines bestehenden Eintrags - Deutsche Farblabels (Rot/Weiß/Rosé/Schaumwein/Dessertwein/Likörwein) - WinesView: 4 Tabs (Weingüter/Weine/Jahrgänge/Käufe) mit Edit/Delete - InventoryView: Flaschen-Tabelle mit Filter (Farbe/Status/Jahrgang), Foto-Upload, Flasche zurücksetzen - SimpleShelfView: Regal-Ansicht mit HTML5 Drag & Drop + Bottle-Swap, Detail-Panel mit Split-View - Slots mit 2-Zeilen-Weinname + Jahrgang - Parkzone mit Wein-Labels - Slot-Labels menschenlesbar (Fach/Ebene/Platz) - Regal-Einstellungen: Ebenen/Spalten/Versatz konfigurieren - TastingDialog: Bewertungs-Slider (0.5–10), Notizen, Anlass, Begleitung, Foto-Upload (mehrere) - TastingsView: Chronologische Tabelle mit Foto-Badge, Entkorken direkt aus Liste - TastingDetailModal: Detail-Ansicht mit Foto-Strip, Lightbox-Vollbild, verwandte Verkostungen - DashboardView: 4 Stat-Widgets, Farb-Verteilung, Bald-Trinken, letzte Verkostungen, CSV-Export - Entkorken-Funktion: Flasche öffnen + Verkostung in einem Schritt - Weingut standalone erfassen (ohne Wizard) - App-Icon: Weintraube (MDI mdi-grapes)

Internationalisierung - Vollständige Zweisprachigkeit DE + EN

Infrastruktur - Vue 3.5 + Composition API + TypeScript 5.7 + Vite 7.3 - @nextcloud/vue 9.6, @nextcloud/axios, @nextcloud/router - Pinia Stores mit Optimistic Updates + Rollback - 88 PHPUnit-Tests + 24 Vitest-Tests (112 gesamt) - Pre-Commit-Hook für OCP-only API-Enforcement

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignaturekRhu1SmG7i9VmNtsp1dMId19I1oCjMwkQ5d0ZY8g3BCo/IlAg2hJvUmiFyYroa/NLtTkGm6o31SissX8NrfNZku2A6csuiTBBdnsy9lTWIYXPgxZaoA+Ne6zGYEna7QxVOb7+Zi1UceD3Jj6T97kBCBaA8NzZ/1WUkKi7nwwq202N4Nmk6cMsF6UAK7u+GLHa8SapoeGZF0QkZURxOTViJqp1RZGGtJbFGPiUxbdTZXZVIVBL3O2VPKugmw2AvH3npgqcIQeso62ONhpgQk/MBTCdLvR6Uyy55v/YRlGPwCZxwMRVnaxqool0PgbXq1BdWcNdhIA8Vq5ayNErYapzQ==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0

Nextcloud 32

Vinarium 0.5.4
Release Details
UpdatedSept. 21, 2026, 8:39 p.m.
Changelog

Added

  • „Was ist neu?"-Fenster — nach einem Update zeigt Vinarium einmal je Nutzer und Version kurz, was sich geändert hat. Die Inhalte liegen als whatsnew/whatsnew.json im App-Paket, es wird nichts von fremden Servern nachgeladen. Wegklickbar per Knopf, X oder Escape; jeder Weg quittiert. Keine Kumulation über mehrere Versionen, kein Fenster bei einer Neuinstallation, und fällt etwas aus, bleibt das Fenster einfach aus (Fixes #284)

Beim Release beachten: Der Versions-Schlüssel in whatsnew/whatsnew.json muss der Version des Release entsprechen, sonst bleibt das Fenster stumm.

Changed

  • Abhängigkeiten aktualisiert: vitest, nanoid, brace-expansion sowie die composer-Entwicklungsabhängigkeiten. @nextcloud/vue bleibt bewusst auf 9.6.0 — ab 9.12 zieht die Bibliothek über eine von Vinarium nicht genutzte Upload-Komponente @nextcloud/files, dialogs, webdav und sax nach und sprengt damit das ausgelieferte Bundle (#280/#281)
  • Werkzeugkette: nc-app-tooling auf v1.15.0 — erst diese Fassung lässt den neuen Ordner whatsnew/ ins Release-Archiv
  • CI-Actions aktualisiert (setup-node 7, github-script 9, canary v1.14.0)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignaturebHd7d1ugn3WAZC3DYuklDxGCBhZZqmRGyOJe/4v8BwGcMFIOTZ2mFbs6nN8OHbUgThj8GUbf57pXsD2/gclRDrcWw65RLkqog5vbRv68GDl8YiSE13TXEwrdH12CSxq+9jdlELMidiqNEvZvB2gA2ZcePqQ9VPOAhf/on/fZ9IbUiNPhCcEjpA8RMC9TdGAAjS6lepsOU9s7qxcHT6gQHqrvoqcmFtRl0o0V5rP6ZKh6boVuNrD+OsivkevuCom3bGcd951SttbzDqB3wMZ10L4LstSNuCH9JqJix3OIB+Us9o6uy6opQ1FD/lILNfjcQ61OQpzt4I7l8A7x4e/evQ==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.3
Release Details
UpdatedSept. 19, 2026, 5:49 p.m.
Changelog

Fixed

  • Etikettenfotos ließen sich nicht zuschneiden — beim Hochladen eines Etiketts (Kauf-Wizard und Etikett-Bearbeitung) blieb der Zuschneide-Dialog leer, und „Übernehmen" scheiterte mit „Zuschneiden fehlgeschlagen". Betroffen war jedes Bildformat, nicht nur HEIC vom iPhone. Ursache: vue-cropperjs liefert nur ein CommonJS-Bundle ohne ESM-Entry; unter Vite 8 band der Default-Import an ein Nicht-Komponenten-Objekt, sodass die Cropper-Komponente nicht mountete und ihre Methode getCroppedCanvas fehlte. Der Default wird jetzt defensiv aufgelöst, unabhängig von der Interop-Form (Fixes #254)
  • Fehlende und fehlerhafte Übersetzungen — 40 fehlende Übersetzungen ergänzt und drei kaputte Pluralschlüssel korrigiert (Fixes #243)

Security

  • dompurify auf 3.4.13 aktualisiert (#236)

Changed

  • Release-Hygiene: Dev-, Test- und Konfigurationsdateien werden über .gitattributes export-ignore aus dem ausgelieferten Archiv gehalten; die Apache-2.0-Attribution (THIRD_PARTY_NOTICES.md) bleibt bewusst enthalten (#273)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureVFLynGFGiGTg6duOEskdKYb8c85h1tu3KS2Zkuuwveh+J5Py2f8Rd+g9xlRsH6I0XwbrHu5sq+ktVVIuywHLMuiAK9QE37Y7X8EPTWLIymH7QFegj/xabxyxUZX4SlciFWAutA7ptqe3uY5mdX2TINkWWFt4rsXlavl5qFrlOIWU/gmq8VTv+yeWBmAMFoRe3s6FYAmguwexw5TYECPw7Y7xMhmn8psj1f0eEAEcDRESk92wdVOFuCtCjJ0RurQSxLtPgG4UbovX//BHXm395dlmXMrRdG4Wt/38IuLn4P4ig6AHUOX0CjcLAkaIHBtyLMqHjDWwKprMZp+VwDyTmw==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.2
Release Details
UpdatedAug. 8, 2026, 9:35 p.m.
Changelog

Fixed

  • 0.5.1 ließ sich nicht benutzen: die App rendert nicht — jede Datumsausgabe warf TypeError: (0, ns.default) is not a function. Betroffen war formatDate, und die steckt im Dashboard und fünf weiteren Ansichten, darunter der Standardroute; sichtbar blieb ein leerer Inhaltsbereich. Ursache war der Bundler-Wechsel in 0.5.1: @nextcloud/moment liefert ein UMD-Bundle ohne eigenen default-Export, und Vite 8 (Rolldown) greift bei solchen Paketen im Bibliotheks-Build direkt auf .default zu, wo Vite 7 zuvor einen Auspack-Helfer eingefügt hatte. formatDate kommt jetzt ohne die Bibliothek aus: für ein ISO-Datum als TT.MM.JJJJ genügen ein Muster und eine Kalenderprüfung über UTC. Damit hängt die Funktion an keiner Bundler-Interop mehr, und das Bundle verliert die komplette moment-Sprachdatenbank, rund 132 KB (Fixes #233)

Changed

  • Vite bleibt auf 8. Ein Rückbau auf 7 war zwischenzeitlich erwogen und wieder verworfen: die Interop ist nicht generell defekt, sondern nur für UMD-Pakete ohne default. Für gewöhnliche CommonJS-Pakete setzt der eingefügte Helfer default korrekt auf module.exports, nachgewiesen an @nextcloud/event-bus
  • @nextcloud/moment als Abhängigkeit entfernt
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignaturesJcpYAXpveeojzkqkXbjpOpi9ynBLpRlQ+DN8eo5jJxaHnU208XPXL6WCR6CA4X5SUlSP0qKmgiPAdN9Bn7vnozHzEf/M/YNVJX3JZRoMO+eUWVUkMoa9GORCEU4NKvvdxfAIkFQc1Gs+hYI4K3wImQLh6oLkiooelfqYH14LG6Wa9niqXCxX8COFzvOs0zmZrhgdM0cAfkfcUxBi8Y/MTnv1U6L2aeBsbu+TSNBaqE3+BjV1I4TgGf+rInpM7iFahHngmFBvZOeq04XToHc5nxeW9lL5so7eihXlz7aQk51LAbZnTjNR+Jnc4O454ApnEA9rZEIUrhhqCyJW1gQMA==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.1
Release Details
UpdatedAug. 4, 2026, 4:17 a.m.
Changelog

Added

  • Etikett mit Vorder- und Rückseite — das Etikettenfoto hängt jetzt am Jahrgang statt an der einzelnen Flasche, und es lassen sich zwei Seiten hinterlegen. Die Rückseite trägt in der Praxis Rebsorten, Lage und Abfüller. Bestehende Flaschenfotos wandern als Vorderseite mit; tragen mehrere Flaschen eines Jahrgangs unterschiedliche Fotos, gewinnt die zuerst aufgenommene, keine Datei wird gelöscht (Fixes #190)
  • Etiketten frei zuschneiden — das feste 3:4-Hochformat entfällt für Etiketten. Rückenetiketten sind oft anders proportioniert; ein erzwungenes Verhältnis schnitt dort Text weg. Verkostungsfotos behalten ihr Verhalten
  • Regal-Reihenfolge per Tastatur — am aktiven Regal verschieben zwei Knöpfe es eine Position nach links oder rechts. Drag & Drop war bisher der einzige Weg und ist per Tastatur nicht bedienbar (Fixes #211)

Fixed

  • Vue lief im ausgelieferten Produktionsbundle im Entwicklungsmodus — ein pauschales 'process.env': {} in der Vite-Konfiguration ließ NODE_ENV als undefined durchlaufen, wodurch Warnungen, Prop-Typprüfungen und Devtools-Hooks im Bundle landeten. Nach der Korrektur ist das Bundle rund 100 KB kleiner (gzip 472 → 438 KB)
  • Aktivitäts-Widget zeigte das Datum ohne Jahr — Einträge aus verschiedenen Jahren waren nicht unterscheidbar, ein Datum in der Zukunft las sich wie ein Sortierfehler. Das Widget nutzt jetzt denselben Datums-Helfer wie die Vollansicht; im Frontend gibt es kein zweites Datumsformat mehr (Fixes #205)
  • Verwaiste Daten nach dem Löschen eines Benutzers — nach occ user:delete blieben Keller- und Weindaten in der Datenbank liegen, über kein UI mehr erreichbar. Ein Listener räumt beide Besitzwurzeln transaktional ab (Fixes #212)
  • Aktivitätslog: Die Sortierung „neueste zuerst" verließ sich bei Einträgen ohne Uhrzeit (Geschenk/Verlust) auf einen Zufall der strcmp-String-Länge statt auf eine benannte Regel; das Ergebnis bleibt gleich, aber ein künftiges ISO-T oder Sekundenbruchteile in einer Quelle würden die Reihenfolge nicht mehr still verschieben (Fixes #214)
  • Der Kauf-Wizard lud dasselbe Etikettenfoto einmal pro Flasche hoch — bei sechs Flaschen sechs identische Dateien. Jetzt ein Upload an den Jahrgang

Changed

  • Migration auf Vite 8 — der Bump scheiterte bisher an einem Laufzeitfehler (process is not defined). Ursache waren die esm-bundler-Builds von Vue, Pinia und Vue Router, die eine Ersetzung von process.env.NODE_ENV durch den Bundler voraussetzen (Fixes #182)
  • vinarium_vintage erhält photo_front_file_id und photo_back_file_id; vinarium_bottle.photo_file_id entfällt. Zwei getrennte Migrationsschritte, damit ein Abbruch beim Übertragen die Quelldaten intakt lässt
  • Neue Etikettenfotos liegen unter Vinarium/labels/; das bisherige Verzeichnis bleibt beim Ausliefern zugelassen, vorhandene Bilder werden nicht verschoben
  • Die Foto-Endpunkte sind von /bottles/{id}/photo nach /vintages/{id}/photo/{side} gewandert
  • Unit-Tests 80 → 115; neuer Workflow schließt referenzierte Issues beim Merge nach develop (Fixes #213, #216)
  • Dependency-Updates: ws, fast-uri, fast-xml-parser, @babel/core, postcss, immutable, js-cookie
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureKXImojCw5WspgTclqcxE/ZeZjYBXd+sJzS+dt8s5nCDmQwBQ5kt8zul8VRACrUq+2BvB/JArMf1HdNSHU77t84Dw3gxif8NZ+my5fhVLWVykW7by21VxVBeKEwtExVmlwJs1buldof734Dv8ar+6n/hPu+GBp88ey5Nvkd/kDlggsUtyY7dkV/yylVbJiDx22yvXZnuQO1WmQWz2BYs5r+JKA7MpYPhP2vQECVuPmiOI4tXQhL3gSPhX5TtzYc7JFntMRjVUzvfIFyZghtgQAuk3AyJB1NUke/8xql/0lYbw26VeEbZfbEif5jlNJMTxWxFaT0sOJkpRfdfclvvChA==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.5.0
Release Details
UpdatedAug. 2, 2026, 9:14 p.m.
Changelog

Added

  • Weine-Tab zeigt „Im Bestand" neben „Gekauft" — bisher stand dort nur die Summe aller je gekauften Flaschen, entkorkte, verschenkte und verlorene wurden nie abgezogen. Wer 12 gekauft und eine getrunken hatte, sah weiterhin 12. Die neue Spalte zählt die tatsächlich im Keller liegenden Flaschen und ist visuell führend; die Kaufhistorie steht gedämpft daneben (Fixes #189)
  • Süße-Grad am Jahrgang — neues optionales Feld (trocken / halbtrocken / lieblich / süß) an der Vintage, weil derselbe Wein je Jahrgang unterschiedlich ausgebaut sein kann. Erfassbar im Kauf-Wizard, im Jahrgangs-Edit und im Detail-Panel, filterbar im Bestand (auch als Deep-Link), angezeigt als Chip in Bestands- und Verkostungsliste (Fixes #89)
  • Eigener Anlage-Wizard für Weine ohne Kauf — „+ Wein" im Weine-Tab öffnet einen dreistufigen Wizard (Weingut / Wein / Jahrgang, Jahrgang überspringbar). Für geschenkte Flaschen, Altbestand aus der Zeit vor der App oder eine Wunschliste (Fixes #137)
  • Regal-Reihenfolge per Drag & Drop — Regale lassen sich über einen Griff im Tab umsortieren; die Reihenfolge wird atomar persistiert (Fixes #191)
  • Aktivitätslog unter #/activity — vollständige chronologische Übersicht über Käufe, Verkostungen, Geschenke und Verluste, mit Filter nach Art und Zeitraum sowie „Mehr laden". Der Dashboard-Link „Aktivität alle ›" führt jetzt dorthin statt ersatzweise auf die Verkostungen (Fixes #92)

Fixed

  • Esc schließt Modals auch dann, wenn der Fokus in einem Eingabefeld steht (Fixes #176)
  • composer.lock war nicht mehr deckungsgleich mit composer.json: nextcloud/ocp und doctrine/dbal fehlten, composer install brach ab und die PHP-Testsuite lief lokal nicht mehr
  • Zähler in Tabs und Kopfzeile des Bestands blieben nach dem Anlegen oder Löschen von Stammdaten stehen, bis die Seite neu geladen wurde

Changed

  • Zusätzlicher Endpoint GET /api/v1/vintages/stock liefert die Bestandszahlen als Aggregat — bewusst nicht aus der bereits geladenen Flaschenliste berechnet, die gefiltert ist und dadurch stillschweigend zu wenig angezeigt hätte
  • Neuer Endpoint PUT /api/v1/cellar/{cellarId}/shelves/order nimmt die vollständige Zielreihenfolge entgegen und nummeriert in einer Transaktion durch; fremde, fehlende oder doppelte IDs werden abgewiesen
  • Neuer Endpoint GET /api/v1/activity aggregiert Käufe, Verkostungen und Flaschen-Status-Ereignisse

Migration

  • vinarium_vintage.sweetness (nullable VARCHAR(16)) wird ergänzt. Kein Backfill — „nicht angegeben" ist für jede bestehende Zeile die zutreffende Aussage
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureJEZjUPpaA+YEzvliwINv6G01IKWT3fskgKfCboLaINciM4PGkLYFJTyhlWCJO3JugedMQLJXX5In6VhT7h1bRy1Bme9vHF9zptTek1BPXY981XvUutUmM307PvGBSL6oFFESRingGoqRhkvifLtrVLV2E6No1GqhKvQ77I6axOrSibHMPlfHRUevtwgj2YdvcHul2Jns6o1LvFpQLCLgg9QTqw9JKc9SbkVHlrU8R+LGBwGn5PjQPthjGf9uHWeuz9hzn5Yw3EmGJJZBIe0kr5iZ6ZOgb8eJFqmk51e+TsZAmkTdfT4PLqzz1+9NvUnltm3DyEB3v6KY73CLiIaAtw==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.4.2
Release Details
UpdatedJuly 6, 2026, 4:11 a.m.
Changelog

Added

  • Nextcloud 34 wird unterstützt (max-version 33 → 34)
  • Dashboard-Volltextsuche über Weingüter, Weine und Jahrgänge — Relevanz-sortiertes Dropdown mit Tastatursteuerung (⌘K, ↑↓, Enter, Esc), Klick springt in den Bestand; Jahrgang-Treffer zeigen die Flaschenzahl im Bestand (Fixes #103)
  • Bestand: Filter in der URL — alle Filter (Farbe, Status, Jahrgang, Weingut, Trinkfenster) sind deep-link-fähig und überleben ein Neuladen; neuer Filter „Trinkfenster läuft bis" als Preset-Auswahl; Dashboard-Kachel „Bald trinken → alle" verlinkt direkt auf den passend gefilterten Bestand (Fixes #90)
  • Spenden-Link (Ko-fi) in den App-Metadaten

Changed

  • Test- und CI-Härtung: stabilere Frontend-Tests (flushPromises statt nextTick), Typecheck-Fixtures repariert, Release-bewusstes Bot-Review, Dependabot auf Security-Updates reduziert
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureP/TsINmDSdIsI7lFKDI+dh1DHzW7CpEzTHNbAUMUuzIL9yFr9FRcfBMH5XfA6DaWB3LZocpMgmPtETCuZ3FQ38ZHEySnNXTtwsyrNP3SB8YAlJJqdwMOhansu+kqoMgCRb9eUJpS3CXc+ISISUaJ4EP4e8tVWEoC8K6CADrDVLWk1QYArZDETv9qXlxPIPPcF48MrukUOOYi+IxLVFOI/l6aVho/zmKgL2RGPo+ZHEPB8zEhof427fjFrlAlsue/p/k70G20IAZKwE1b/D2H/RXW/WMTbYxRJN8dnmzLp4LuSSCm40gvmDhY5VDV1qgKnDd148xk6Hdue4oym7ZFJQ==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.4.1
Release Details
UpdatedJune 19, 2026, 9:42 p.m.
Changelog

Added

  • „Würde ich wieder kaufen"-Flag bei Verkostungen — eigenständiges Empfehlungs-Signal (ja / nein / keine Angabe), unabhängig von der Bewertung; filigraner ✓/✗-Toggle im Entkork-Dialog, Badge im Verkostungs-Detail (Fixes #143)

Fixed

  • Kauf-Wizard Schritt 4: irreführendes Button-Label „📷 Foto aufnehmen" → „Foto hinzufügen" (am Desktop ist es ein Datei-Upload), konsistent mit den übrigen Foto-Buttons (Fixes #142)
  • l10n/de.json und l10n/en.json waren durch ein gerades Anführungszeichen kein valides JSON — auf deutsches schließendes Anführungszeichen korrigiert (Fixes #146)
  • CI: Bot-Review nutzt die korrekte PR-Nummer und eine breitere Lese-Allowlist
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
Signatureu4lkF9YOU7hyuKntedlHxUVnCtEkbCH4ddoimnbpbmINVXQCFxx6hTnyo8jh7XWxBkq1Gb8H90t0zN+ih2N1xyP0KMMsfy9y48YACeM9DkFZmjMAE5bbf5ck4cdKmMI6/Tf4tiGHdZEl+s28JPN3pF2SzSMZXQ5/Yxpd3Aj2DEVlMzjwF7d46Jvv6RmYToZQZc9aWWhsbTm2SFVr6s17eKBHXrOkbvlElg2k7NlrbpMRebhHzETjdJYu3bHKAaGigvCHTfm5cuZX6MzGSYvfiBpCioH0kk+9rn+5Ai9rE+/tlZ/uzO1uXE3Ir0USCUZ2ISlhxAQfQ+zNGVHXpOuz6g==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.4.0
Release Details
UpdatedJune 11, 2026, 5:02 p.m.
Changelog

Großes UI-Redesign über alle Ansichten („v4-Konzept") plus neue Detail- und Foto-Funktionen.

Added

  • Dashboard-Redesign — Bestand-Hero mit Farb-Verteilung, „Bald trinken"-Vorschläge anhand des Trinkfensters, „Top & Flop" (beste/schlechteste Bewertung pro Wein × Jahrgang) und Aktivitäts-Feed (Fixes #94, #99, #91)
  • Bestand komplett neu — fünf flache Sub-Tabs (Flaschen · Weingüter · Weine · Käufe), v4-Kartentabellen mit Bewertungs-Spalte und Weingut-Filter (Fixes #111, #113, #114, #115)
  • Wein × Jahrgang — der Weine-Tab zeigt Weine gruppiert mit ihren Jahrgängen und einer farbigen Trinkfenster-Pille; der separate Jahrgänge-Tab entfällt (Fixes #132)
  • Käufe in den Stammdaten editier- und löschbar (CRUD-Konsistenz) (Fixes #116)
  • Flaschen-Detail-Modal mit fünf Reitern (Flasche · Weingut · Wein · Jahrgang · Kauf) und Vor/Zurück-Navigation samt Tastatursteuerung (Fixes #131)
  • Etiketten-Fotos — direkt beim Einlegen ins Regal aufnehmen, als Hintergrund im Regal-Slot anzeigen, jahrgangsweit geteilt mit Zuschnitt (Fixes #117, #118, #127, #128)
  • Verkostungen-Redesign — Vier-KPI-Reihe und Bewertungs-Balken in der Tabelle (Fixes #97)
  • Weinkeller/Regal-Redesign — links angeheftete Parkzone und gedämpfte Slot-Farben (Fixes #96)
  • Kauf-Wizard: Händler-Autocomplete aus bestehenden Käufen (Fixes #86)
  • Fächer werden beim Löschen automatisch neu durchnummeriert (Fixes #105)

Changed

  • Kauf-Wizard: Notiz-/Beschreibungsfelder klarer beschriftet (Cuvée vs. Jahrgang) (Fixes #87)
  • App-Store-Screenshots auf den neuen v4-Stand aktualisiert

Fixed

  • Verkostungs-Datum erlaubt keine Zukunft mehr (Fixes #85)
  • Tabellenkopf im Bestand bleibt korrekt sticky (Fixes #112)
  • Foto rendert nicht (CSRF) plus zwei Layout-Bugs im Detail-Panel (Fixes #126)
  • Diverse Review-Fixes: CSV-Export gegen Formel-Injection abgesichert, durchgängige UTC-Zeitzonen-Behandlung, vollständige englische l10n

Removed

  • Eigenständige Weine-View — in den Bestand als Stammdaten-Tab gefaltet (Fixes #95)
  • Jahrgänge-Tab — in den Wein × Jahrgang-View integriert (Fixes #132)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureqkG5mJT1X8Beech72w5aeHZmuMJEk2cFFVjtlJ7jAHjNqrKz5VBsY8fDxlH9BzmtYYyJiHfD8A+MzsG2wHhYqWkH1LCwjaBHSkAuTTc9yenTzoAYpcF7b5DVBGLWDd6Ge2MKGztAKYYz/hUbAEvx2/MFeGb44pVW1nzx6z0+AVi1lSaNvi78d1aNmCnvx6CJjDFmcbVGofR1NMHz6i+DP6SZ8xq75/QY1OOEhVPLmEEcjkvrs+qB2hOweCB7gg84bD55pXq5uaRqeFOdxcJ0dB5MfgWD02GyMCVZFZotsI3h/Wd3uQ5bhZUjEByuN0Bw04XpgFOnRhpbRIUEZdRwdg==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.3.0
Release Details
UpdatedMay 20, 2026, 12:20 p.m.
Changelog

Added

  • Flaschen verschenken und als verloren markieren — Verschenken erfasst Empfänger (mit Autosuggest aus früheren Empfängern), Datum und Anlass; Verloren erfasst Datum und Grund. Buttons im Regal-Detail und im Bestand (nur bei Flaschen im Bestand); beide geben den Slot frei. Dashboard um Zähler „Verschenkt" und „Verloren" erweitert (Fixes #66)
  • Regal-Kopfbereich als sticky Tab-Leiste — Regale als Tabs (immer sichtbar), Regal per Klick auf den Tab umbenennen, ✕ mit Bestätigungsdialog, „+"-Tab zum Anlegen eines neuen Regals. Der Kopfbereich (inkl. Parkzone) bleibt beim Scrollen langer Regale sichtbar (Fixes #64, #70)
  • Fächer umbenennen per Inline-Edit (Klick auf den Fach-Titel) (Fixes #73)
  • Sticky Header/Filter/Tabellenkopf in der Bestands-Ansicht — bei langen Listen bleiben Überschrift, Filter und Spaltenköpfe sichtbar (Fixes #65)

Changed

  • Kauf-Wizard persistiert erst beim Abschluss — „Weiter" legt nichts mehr vorzeitig an, Vor/Zurück lässt alle Felder editierbar, „Abbrechen" hinterlässt keine Geister-Daten. Producer/Wein/Jahrgang/Kauf werden am Ende in einer Transaktion erstellt (Fixes #68)
  • Bestands-Aktionen kompakt: gefüllter „Entkorken"-Button + ⋮-Menü für Verschenken/Verloren statt drei gestapelter Buttons
  • formatDate in eine gemeinsame Utility ausgelagert (statt in vier Komponenten dupliziert)

Fixed

  • Datumsanzeige im deutschen Format dd.mm.yyyy statt US-Format MM/DD/YYYY (Fixes #67)
  • PHPUnit-Suite an aktuelle Code-Signaturen angepasst — volle Suite wieder grün (Fixes #72)
  • Backend-Status-Validierung für Verschenken/Verloren (nur Flaschen im Bestand, sonst HTTP 400)
  • Diverse Robustheits-Fixes aus Code-Reviews: Race-Condition beim Click-to-Move im Regal, Dateigrößen-Prüfung vor Foto-Upload, Regalname auf DB-Limit (255) begrenzt, Event-Felder in der Bottle-Detail-Response, sichtbares Fehler-Feedback beim Zurücksetzen
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureuuQYRj3gjlbyTj7E6lnyC82tMSMEdVxfTOJdp49xqI6kbpaiWMbvqLnbCYjwJYSQC/FKGJALX/WYgVi8puxt/5snzR4D+ecg70fpfkL92MX3/1XTZc0mQ1eZGf2OaSvaGL51c+Cs2vXsm42jg3WDcW+D30vU8BJEFztDc5fD6x38On4jbPTBA7CVEt7XakJVgM//A64fT5lnMDRYqIE8gzlZm4DOZnkTCFOgwMdLGgLd4M5JDPrI+8t9yZ36dkvGsDVjh/IoY1JWm4mcjMMwDrLYRSRibQH06JUc42doPc6xvT25vmy4e9uYvoF0q7LjlCe4URFoEcm/2PDkq3wuDw==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.2.0
Release Details
UpdatedMay 19, 2026, 8:59 p.m.
Changelog

Added

  • Fächer eines Regals lassen sich nachträglich hinzufügen und löschen — „+ Fach hinzufügen"-Button am Ende eines Regals, ✕-Button pro Fach mit Bestätigungsdialog; Flaschen aus gelöschten Fächern landen in der Parkzone (Fixes #49)
  • Cellar-View: Parkzone ist jetzt unabhängig vom Cellar immer sichtbar; das letzte Regal lässt sich löschen — die View fällt dann auf einen schlanken Empty-State zurück (Fixes #48)

Changed

  • Native Browser-confirm()-Dialoge ersetzt durch NC-styled ConfirmDialog (knallroter Delete-Button, NC-Look) — durchgängig in Wine-Picker, Bottle-Move, Shelf-Delete, Compartment-Delete (Fixes #50)
  • NcButton-Migration type → variant an 21 Stellen: Primary-Buttons sind jetzt wieder NC-blau, Tertiary transparent — die visuelle Hierarchie war zuvor verloren gegangen (Fixes #55)
  • Bessere Fehlermeldungen im TastingDialog und beim Bottle-Picker bei API-Fehlern statt stiller Fehlschläge (Fixes #41)
  • App-Beschreibung in info.xml gestrafft

Fixed

  • TastingService::consumeWithTasting() ist jetzt atomar — Flasche und Verkostung werden in einer DB-Transaktion erstellt; schlägt die Verkostung fehl, wird der Flaschen-Status zurückgerollt (Fixes #36)
  • DoesNotExistException in den neuen Compartment-Endpoints wird jetzt korrekt zu HTTP 404 statt 500

Removed

  • Toter Code: consumeBottle() aus API und Store entfernt (Fixes #37)
  • Toter Code: ungenutzter Frontend-Wrapper createDefaultCellar() aus api/cellar.ts
  • Standard-Regal-Button im Empty-State entfernt — Anlegepfad ist jetzt einheitlich der „+ Neues Regal"-Wizard

Refactored

  • cssColorFor in src/utils/wineColors.ts extrahiert (6 Aufrufer statt zuvor 2 dupliziert) (Fixes #39)
  • restoreBottle als Store-Action ergänzt (Fixes #40)

Compliance

  • Apache-2.0-Attribution für mdi-grapes in THIRD_PARTY_NOTICES.md ergänzt (Fixes #38)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignatureNPwU40rhD1C6vL+MBWzsgJo+OWOJFr8SEkaGQNebPMvf20saNa7rP5FxdfiQ/4DUKTRgJE+088PBLeSL2UdzYmTjzVFr0MLAvwvSNBB8qUsqQNOyXL/jazq3UIiTlo4AcqDcxUpgj70M9ZHZYuN99yBTWAsdjjd5rxlKU7qCxnRvMpso29L9/OhbgqwoaQjLwr5jPcYXbVF1umhCazOZDDfbZFLDZVp5beC8w2KgFo5DcV/+1y/rKjlibKqtvx9wIPTDqTU3DwwFc07QFCNI8xyxKm6995H48uP2E8zit4ovoLOqs6DpRJEw1BnH2J/oyz3S1wNm3dfIyIkeldyEzQ==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.1.2
Release Details
UpdatedMay 18, 2026, 5:42 p.m.
Changelog

Added

  • App Store Screenshots (Dashboard, Wines, Inventory, Tasting-Detail, Tastings)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignaturehkhxxeKp/qxcQIGp2bRTUjO1iwK8W7X7bShRF85w9Vb3xvkc6CxS/t0CCiFdSZHD6HRkqkVKAeb9wlJKaWhQt/SaFDBJOw6xK5eX1GDVGr9y+Yi3Rrz9whjgQxTKDlZdEzZyIOphTdM7BZwwzuKpm9Sixxej0Bts8gIiy2JMlDdPaYINJObPZ6GQ5CCPVx1gjlGZbqtE9RO9uVEHRxtsPTEXTiXXINC6R/IA4LotR02LUgNz/cv7O34aAc/LpGLtEP/Ft8eTIfI0NPZKfoskgvwpX9HXst6Fm/m+CiBZIdoOZ5kWWGQBlDjuxLbkl74BFGQ4Ymv1YB9PfHgpR4WaHQ==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.1.1
Release Details
UpdatedMay 18, 2026, 12:57 p.m.
Changelog

Fixed

  • l10n: JSON-Dateien hatten keinen translations-Wrapper → HTTP 500 für Nutzer mit EN-Locale
  • l10n: ASCII-Anführungszeichen " statt typografischem " in l10n-Keys → JS-Syntaxfehler beim Laden
  • NcModal: name-Prop in TastingDialog, TastingDetailModal, EntityEditModal und PurchaseWizardModal ergänzt (Accessibility)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignaturejZ4bYSjrgI5OtRUgR5l1OswIygA23KIIh4dCJawWzAyoT+F+ebyMZA45lTfLqfhen8rDs+fSIyYSVsfRLqNdu5BOW8gECIzN14OzkgB80NALiv0Yi9J/69Es4DOskW09uOu85iDMOprOeXcxpRWmBikLbJSeAcfhvXR4tnF056MdcZyX9gVhtclwsYJByPfWZBCQUjXOXmoyuyfzh0iuIEF7tcHzK3EgICUGMznnQAdPQkvDHFfkhyekvr9Fzut5NNjrNtKI6iEGge79yYodoBoZYvXwG6nA3quIYHUfTvc7N5bUg/a++hcWqwpVYNQizRv7CqehzbVmaMXw4U0B+A==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
Vinarium 0.1.0
Release Details
UpdatedMay 18, 2026, 6:49 a.m.
Changelog

Erste offizielle Veröffentlichung — Weinverwaltung End-to-End.

Added

Datenbank + Backend - 10 DB-Tabellen via Migration (Cellar, Shelf, Compartment, Slot, Producer, Wine, Vintage, Purchase, Bottle, Tasting) - 10 Entities + 10 QBMapper-Subklassen mit Owner-Queries - CellarService: Default-Regal (234 Slots), Reconfigure mit Parkzonen-Migration - ProducerService, WineService, VintageService: CRUD mit Ownership-Checks - PurchaseService: CRUD + Bottle-Size-Validation - BottleService: Bulk-Insert, Move (409 SlotOccupied), Swap, Consume, Restore, Filter (4-Table JOIN) - TastingService: Create, Update, ConsumeWithTasting, List (denormalisiert), Detail-View - DashboardService: Stats-Aggregation (Bestand, Farb-Verteilung, Bald-Trinken) - ExportService: CSV-Export (UTF-8 BOM, Semikolon, denormalisiert) - PhotoService: Foto-Upload in NC-Files (IRootFolder), Thumbnail via NC Preview API - Foto-Upload für Flaschen (1 Foto) und Verkostungen (mehrere Fotos)

REST-API - 40+ Endpoints unter /api/v1/ (Producer, Wine, Vintage, Purchase, Bottle, Tasting, Cellar, Dashboard, Export, Photo) - DataResponse mit HTTP-Status-Mapping (404/403/400/409/201/204) - CSRF-Schutz auf allen mutierenden Endpoints

Frontend - Vue 3 + TypeScript + Vite + Pinia - PurchaseWizardModal: 4-Step-Wizard (Weingut → Wein → Jahrgang → Kauf) - Single-Action-Flow (Weiter = speichert + advanced) - Form zeigt Daten bei Auswahl eines bestehenden Eintrags - Deutsche Farblabels (Rot/Weiß/Rosé/Schaumwein/Dessertwein/Likörwein) - WinesView: 4 Tabs (Weingüter/Weine/Jahrgänge/Käufe) mit Edit/Delete - InventoryView: Flaschen-Tabelle mit Filter (Farbe/Status/Jahrgang), Foto-Upload, Flasche zurücksetzen - SimpleShelfView: Regal-Ansicht mit HTML5 Drag & Drop + Bottle-Swap, Detail-Panel mit Split-View - Slots mit 2-Zeilen-Weinname + Jahrgang - Parkzone mit Wein-Labels - Slot-Labels menschenlesbar (Fach/Ebene/Platz) - Regal-Einstellungen: Ebenen/Spalten/Versatz konfigurieren - TastingDialog: Bewertungs-Slider (0.5–10), Notizen, Anlass, Begleitung, Foto-Upload (mehrere) - TastingsView: Chronologische Tabelle mit Foto-Badge, Entkorken direkt aus Liste - TastingDetailModal: Detail-Ansicht mit Foto-Strip, Lightbox-Vollbild, verwandte Verkostungen - DashboardView: 4 Stat-Widgets, Farb-Verteilung, Bald-Trinken, letzte Verkostungen, CSV-Export - Entkorken-Funktion: Flasche öffnen + Verkostung in einem Schritt - Weingut standalone erfassen (ohne Wizard) - App-Icon: Weintraube (MDI mdi-grapes)

Internationalisierung - Vollständige Zweisprachigkeit DE + EN

Infrastruktur - Vue 3.5 + Composition API + TypeScript 5.7 + Vite 7.3 - @nextcloud/vue 9.6, @nextcloud/axios, @nextcloud/router - Pinia Stores mit Optimistic Updates + Rollback - 88 PHPUnit-Tests + 24 Vitest-Tests (112 gesamt) - Pre-Commit-Hook für OCP-only API-Enforcement

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIDAzCCAesCAhNBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTEzMTQwODIwWhcNMzYwODE4MTQwODIwWjATMREwDwYD
VQQDDAh2aW5hcml1bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUy
Uf45nxsw9A85lkErb0KHGlESd4xVFuXULhPxrfu0468oXo+FAFGR66OcZd7Dz0ju
cwIrI2S+wwD5Un6NbK/AIw1SeUIZ2iOtpyPu1Rfefp3QDXrHWSVeirwBAynhR3Xu
auyE/SVSX19cSU3cxomVZpI6/fD5A1rYsfV13jKfJSVqk8GgJpob28sAOJPGz5wf
cTUILWh/fBJLWHE8PhowV2r2AnlQCeMScOgIZ5Okg3GX5P1VWMgohr8MafIAgeib
hl9fiUrHdSb445ph/9SGuLwZ7achJN0Yk27+SjqpvDLDT965yqHMqe9hqZRwWqSY
ErR46cHuDKqEUQHBtLcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAU6RQMAMbEMoj
hwEQ34AYwy7sYrSOYYhRxy5HrZ8cZGHwDbNIRNhglMs1UDe+GqDFRhibNVA4Dmou
pvVWqRTihM/hRs+dUKrqgQ3owf/3KbA9VSD5/nEE8MiehZVvMA0ecJ26JqTbrekF
eAVFzcZul1wJkH0hO5wlM3h7RHNKUDViOi3hUsYiDJot4BWN3ndlTuAqgrsAonPm
x28mIRLs8XPn023C9IY/D9VRnw/6Fc3aMyB/vkUe5FWwYAuoo9ntnkeA8v5AxLlH
Os1dIxl+8sW8SJtfZ6BDqnnpK9/J11ZLvQFoWHVqK5Z/kN+ZLTaUtCVKCgC2LNB1
BoFrOxGkfQ==
-----END CERTIFICATE-----
SignaturekRhu1SmG7i9VmNtsp1dMId19I1oCjMwkQ5d0ZY8g3BCo/IlAg2hJvUmiFyYroa/NLtTkGm6o31SissX8NrfNZku2A6csuiTBBdnsy9lTWIYXPgxZaoA+Ne6zGYEna7QxVOb7+Zi1UceD3Jj6T97kBCBaA8NzZ/1WUkKi7nwwq202N4Nmk6cMsF6UAK7u+GLHa8SapoeGZF0QkZURxOTViJqp1RZGGtJbFGPiUxbdTZXZVIVBL3O2VPKugmw2AvH3npgqcIQeso62ONhpgQk/MBTCdLvR6Uyy55v/YRlGPwCZxwMRVnaxqool0PgbXq1BdWcNdhIA8Vq5ayNErYapzQ==
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0