feat: AI suggestions, smart shopping qty, shelf life fixes, UX polish
- bringSuggestItems(): Gemini AI for seasonal/complementary suggestions (6h cache) - renderSuggestions(): AI badge (🤖 AI) for AI-sourced items + CSS .priority-ai - smartShopping(): suggested_qty/unit/approx with package-aware tiers - autoSyncUrgencySpecs(): sync suggested quantities to Bring! spec field - estimateOpenedExpiryDays(): dairy-outside-fridge rules (panna 3d, yogurt 2d, latte 1d) - AI shelf-life upper bound tightened to max(rule×4, 30) days - Opened section: fix 0g display (remainderAmt >= 0.5 threshold, pkgSize guard) - guessCategoryFromName(): expanded with 50+ new patterns (uova, herbs, vegetables...) - Suggestions panel: excludes already-added Bring! items - Shopping list: no re-render while suggestions panel is open - Translations: remove duplicate 🍳 from dashboard.quick_recipe (all 3 langs) - Scale icon: always white via filter:brightness(0)invert(1) - opened_shelf_cache.json: remove 3 bad dairy entries (60d outside fridge)
This commit is contained in:
+10
-3
@@ -84,7 +84,7 @@
|
||||
"opened_title": "📦 Geöffnete Produkte",
|
||||
"review_title": "🔍 Zu prüfen",
|
||||
"review_hint": "Mengen, die ungewöhnlich erscheinen. Bestätigen oder ändern.",
|
||||
"quick_recipe": "🍳 Schnelles Rezept mit ablaufenden Produkten",
|
||||
"quick_recipe": "Schnelles Rezept mit ablaufenden Produkten",
|
||||
"banner_review_title": "Ungewöhnliche Menge",
|
||||
"banner_review_action_ok": "Ist korrekt",
|
||||
"banner_review_action_finish": "🗑️ Alles aufgebraucht",
|
||||
@@ -103,8 +103,11 @@
|
||||
"banner_expired_action_throw": "Habe ich weggeworfen",
|
||||
"banner_expired_action_edit": "Datum korrigieren",
|
||||
"banner_anomaly_action_edit": "Bestand korrigieren",
|
||||
"banner_anomaly_action_dismiss": "Menge ist korrekt",
|
||||
"banner_expiring_title": "Bald ablaufend",
|
||||
"banner_anomaly_action_dismiss": "Menge ist korrekt", "banner_no_expiry_title": "Ablaufdatum fehlt: {name}",
|
||||
"banner_no_expiry_detail": "Dieses Produkt hat kein Ablaufdatum. Möchten Sie eines hinzufügen oder bestätigen, dass es nicht verfällt?",
|
||||
"banner_no_expiry_action_set": "Ablaufdatum setzen",
|
||||
"banner_no_expiry_action_dismiss": "Läuft nicht ab ✓",
|
||||
"banner_no_expiry_toast_dismissed": "Als 'läuft nicht ab' markiert", "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",
|
||||
@@ -357,6 +360,10 @@
|
||||
"smart_already": "📊 Intelligenter Einkauf sagt bereits {name} voraus",
|
||||
"all_searched": "Alle Produkte wurden bereits gesucht. Nutze 🔄 für einzelne Suchen.",
|
||||
"search_complete": "Suche abgeschlossen: {count} Produkte",
|
||||
"suggest_buy": "🛒 Kaufen: {qty} {unit}",
|
||||
"suggest_buy_approx": "🛒 Mindestens: {qty} {unit}",
|
||||
"suggest_buy_tip": "Empfohlene Menge basierend auf dem Verbrauch der letzten 14 Tage",
|
||||
"suggest_buy_approx_tip": "Mindestschätzung basierend auf Verbrauch (nächste Packungsgröße kaufen)",
|
||||
"removed_sufficient": "🧹 {removed} Produkt(e) mit ausreichendem Bestand von der Liste entfernt",
|
||||
"bring_badge": "🛒 Schon auf Bring!",
|
||||
"add_urgent_toast": "🔴 {n} dringende(s) Produkt(e) automatisch zu Bring! hinzugefügt",
|
||||
|
||||
Reference in New Issue
Block a user