You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Dashboard collection view can now be switched between poster, thumbnail, and list layouts (persisted per device).
Wine entries now track who created and last edited them, shown in the detail view.
Accessibility & consistency
Added a shared Modal component (drawer/center/sheet variants) used by all 13 overlay dialogs, adding consistent Escape-to-close, focus trap/return, and scroll-lock behavior that was previously missing everywhere.
Wine cards and zoomable images are now keyboard-operable.
Added missing aria-labels and label/for associations across several forms; fixed a hard-coded (non-localized) label list in the library view.
Introduced shared .btn-primary/.btn-secondary and a --danger CSS variable, replacing duplicated per-component styling.
<html lang> now follows the in-app language switch; the PWA theme-color now matches the actual brand color.
Backend hardening
Fixed the login rate limiter, which was keyed off the reverse proxy's IP instead of the real client IP and effectively shared across all users.
GET /wines/{id} now respects the same visibility rule as the collection list, instead of allowing any hidden/out-of-stock entry to be read directly by ID.
HEIC photo uploads (common from iPhone cameras) are now properly decoded and re-encoded as JPEG instead of being mislabeled, which previously made them fail to render.
Search-as-you-type and barcode lookup results now include all wine fields (by-the-glass, location, audit info) instead of a hand-built subset.
Wine type/body/acidity are now validated server-side against the same set of values the UI offers.
Added an SSRF guard on remote image fetching and stricter validation on bulk import.
The backend container now runs as a non-root user and has a proper health check.
Expanded test coverage (library search, lookup, uploads incl. a real HEIC conversion test, import/export) and fixed several pre-existing test failures.