feat: v1.3.0 — banner notifications, quick-access, swipe navigation, bug fixes

Added:
- Expired/expiring product banner alerts with use, throw, edit, dismiss actions
- Priority-sorted notifications (expired > expiring > suspicious qty > predictions)
- Touch swipe navigation for banner with dot indicators and arrow buttons
- Quick-access buttons on inventory (4 recent + 8 popular products)
- Auto-refresh banner every 5 min on dashboard
- Edit expiry dates directly from expired/expiring notifications

Fixed:
- Ignore negative BLE scale readings
- Banner re-appearing after edit (confirmation now persisted)
- False consumption predictions when inventory was manually edited
- Kiosk overlay no longer blocks web app header
This commit is contained in:
dadaloop82
2026-04-18 05:37:03 +00:00
parent 52cfbba663
commit 9e2a24def4
10 changed files with 593 additions and 12 deletions
+13 -1
View File
@@ -92,12 +92,24 @@
"banner_prediction_hint": "Laut Vorhersage stimmt diese Menge nicht mit dem erwarteten Verbrauch überein.",
"banner_prediction_action_confirm": "Menge bestätigen",
"banner_prediction_action_weigh": "Mit Waage wiegen",
"banner_prediction_action_edit": "Korrigieren"
"banner_prediction_action_edit": "Korrigieren",
"banner_expired_title": "Abgelaufenes Produkt",
"banner_expired_today": "Heute abgelaufen",
"banner_expired_days": "Seit {days} Tagen abgelaufen",
"banner_expired_action_use": "Trotzdem verwenden",
"banner_expired_action_throw": "Wegwerfen",
"banner_expiring_title": "Bald ablaufend",
"banner_expiring_today": "Läuft heute ab!",
"banner_expiring_tomorrow": "Läuft morgen ab",
"banner_expiring_days": "Läuft in {days} Tagen ab",
"banner_expiring_action_use": "Jetzt verwenden"
},
"inventory": {
"title": "Vorrat",
"filter_all": "Alle",
"search_placeholder": "🔍 Produkt suchen...",
"recent_title": "🕐 Zuletzt verwendet",
"popular_title": "⭐ Meistverwendet",
"empty": "Keine Produkte hier.\nScanne ein Produkt, um es hinzuzufügen!",
"no_items_found": "Keine Bestandseinträge gefunden"
},
+13 -1
View File
@@ -92,12 +92,24 @@
"banner_prediction_hint": "Based on predictions, this quantity doesn't match expected consumption.",
"banner_prediction_action_confirm": "Confirm quantity",
"banner_prediction_action_weigh": "Weigh with scale",
"banner_prediction_action_edit": "Correct"
"banner_prediction_action_edit": "Correct",
"banner_expired_title": "Expired product",
"banner_expired_today": "Expired today",
"banner_expired_days": "Expired {days} days ago",
"banner_expired_action_use": "Use anyway",
"banner_expired_action_throw": "Throw away",
"banner_expiring_title": "Expiring soon",
"banner_expiring_today": "Expires today!",
"banner_expiring_tomorrow": "Expires tomorrow",
"banner_expiring_days": "Expires in {days} days",
"banner_expiring_action_use": "Use now"
},
"inventory": {
"title": "Pantry",
"filter_all": "All",
"search_placeholder": "🔍 Search product...",
"recent_title": "🕐 Recently used",
"popular_title": "⭐ Most used",
"empty": "No products here.\nScan a product to add it!",
"no_items_found": "No inventory items found"
},
+13 -1
View File
@@ -92,12 +92,24 @@
"banner_prediction_hint": "Secondo le previsioni, questa quantità non corrisponde al consumo previsto.",
"banner_prediction_action_confirm": "Confermo quantità",
"banner_prediction_action_weigh": "Pesa con bilancia",
"banner_prediction_action_edit": "Correggi"
"banner_prediction_action_edit": "Correggi",
"banner_expired_title": "Prodotto scaduto",
"banner_expired_today": "Scaduto oggi",
"banner_expired_days": "Scaduto da {days} giorni",
"banner_expired_action_use": "Usa comunque",
"banner_expired_action_throw": "Butta via",
"banner_expiring_title": "In scadenza",
"banner_expiring_today": "Scade oggi!",
"banner_expiring_tomorrow": "Scade domani",
"banner_expiring_days": "Scade tra {days} giorni",
"banner_expiring_action_use": "Usa ora"
},
"inventory": {
"title": "Dispensa",
"filter_all": "Tutti",
"search_placeholder": "🔍 Cerca prodotto...",
"recent_title": "🕐 Ultimi usati",
"popular_title": "⭐ Più usati",
"empty": "Nessun prodotto qui.\nScansiona un prodotto per aggiungerlo!",
"no_items_found": "Nessuna voce di inventario trovata"
},