From 1606cb3a90394826f2ca39d45b9c9b055ca0de58 Mon Sep 17 00:00:00 2001 From: dadaloop82 Date: Tue, 28 Apr 2026 06:20:50 +0000 Subject: [PATCH] docs: add v1.4.0 CHANGELOG and README updates for all features since 1.3.0 --- CHANGELOG.md | 22 ++++++++++++++++++++++ README.md | 11 +++++------ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b1b405..379c1bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,28 @@ All notable changes to EverShelf will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.4.0] - 2026-04-28 + +### Added +- **Generic shopping names** — Products are grouped by type ("Latte", "Affettato", "Pasta") rather than brand; computed via an expanded keyword map with Google Gemini AI as fallback for unknown products +- **Bring! auto-migration** — Existing list items with old specific names are silently migrated to generic names on every list load, throttled to once per 10 minutes +- **Bring! catalog coverage** — All 93 shopping_name values now resolve to a German Bring! catalog key (icons and categories in the Bring! app); 24 aliases added to cover previously unmatched names +- **Auto-add to Bring! on depletion** — When a product reaches zero the app adds it to Bring! automatically using the generic shopping name, with the specific product name and brand in the specification field +- **Finished-product confirmation banner** — Instead of silently deleting zero-stock entries, a banner prompts the user to confirm; banner title includes the last 3 digits of the product barcode for easier identification +- **Anomaly detection banner** — Dashboard notifications for suspicious inventory/transaction mismatches and consumption prediction errors, with one-tap inline correction +- **SSE recipe streaming** — Recipe generation streams live via Server-Sent Events; Gemini agent feedback is shown in real time as it is generated +- **Smart alert banners** — Configurable expired-only mode with explanatory messages; banner buttons are fully internationalized + +### Fixed +- **Scale double-deduction** — Multiple BLE stable readings of the same weight no longer fire duplicate `inventory_use` events; JS preserves the confirmation sentinel on submit and PHP rejects a second `out` transaction for the same product within 12 seconds +- **Kiosk native TTS** — CI workflow now builds the APK on `develop` branch too; the native Android `TextToSpeech` bridge bypasses Web Speech API voice-availability issues without requiring offline voice packs +- **TTS voice loading** — Retries for up to 10 seconds on page load; shows a message if no voices are available and offers a manual refresh button +- **Bring! migration** — Corrected two bugs: wrong removal API (`DELETE /item` → `PUT remove=item`) and wrong purchase key sent to Bring! (Italian shopping name → German catalog key), which previously created Italian/German duplicate entries +- **Gemini 429 rate limiting** — API calls are retried with exponential backoff; recipe requests are capped at 5 per minute with a dedicated rate-limit bucket + +### Performance +- **Gemini calls centralized** — All Gemini API requests go through a single `callGemini()` helper with intelligent backoff; Gemini removed from the product-selection and bringSuggest flows in favour of fast offline logic + ## [1.3.0] - 2026-04-18 ### Added diff --git a/README.md b/README.md index 7fe9ee2..6338366 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ - **Expiry date reading** — Photograph a label and extract the expiry date automatically - **Product identification** — Point your camera at any product for instant recognition - **Existing product matching** — AI scan shows matching products already in your pantry before suggesting new ones -- **Recipe generation** — Get personalized recipes based on what's in your pantry +- **Recipe generation** — Get personalized recipes based on what's in your pantry; streams live via Server-Sent Events so results appear as they are generated - **Smart chat assistant** — Ask questions about your inventory, get cooking tips - **Shopping suggestions** — AI-powered purchase recommendations @@ -36,12 +36,12 @@ - **Generic shopping names** — Products are grouped by type ("Latte", "Affettato", "Panna da cucina") rather than brand, keeping the Bring! list clean and consolidated - **Smart predictions** — Know what you'll need before you run out - **Auto-add on depletion** — When a product reaches zero the app adds it to Bring! automatically, no confirmation needed -- **Auto-remove on scan** — Products are removed from the shopping list when scanned in -- **DupliClick integration** — Online grocery ordering (Gruppo Poli) +- **Auto-remove on scan** — Products are removed from the shopping list when scanned in - **Auto-migration** — Items already on the Bring! list are silently renamed to their generic name in the background (throttled, runs on list load) + - **Catalog coverage** — All product types resolve to a German Bring! catalog key for icon and category display in the Bring! app- **DupliClick integration** — Online grocery ordering (Gruppo Poli) ### 🍳 Cooking Mode - **Step-by-step guidance** — Follow recipes with a hands-free cooking interface -- **Text-to-Speech** — Voice readout of recipe steps; supports browser Web Speech API, native Android TTS (kiosk), or a custom REST endpoint (Home Assistant, etc.) +- **Text-to-Speech** — Voice readout of recipe steps; supports browser Web Speech API, native Android TTS (kiosk), or a custom REST endpoint (Home Assistant, etc.); retries voice loading for up to 10 seconds with a fallback refresh button - **Built-in timer** — Automatic timer suggestions based on recipe instructions - **Ingredient tracking** — Mark ingredients as used during cooking; leftover quantities prompt a "move to another location" flow @@ -65,8 +65,7 @@ - **SSE relay** — Server-side relay avoids mixed-content (HTTPS→WS) issues - **Auto-discovery** — Server scans LAN to find the gateway automatically - **Auto weight reading** — When adding/using a product with unit g/ml, weight fills automatically -- **10g threshold** — Ignores readings that haven't changed enough between products -- **ml conversion hint** — Shows "weight in grams → will be converted to ml" when product unit is ml +- **10g threshold** — Ignores readings that haven't changed enough between products - **Duplicate-reading prevention** — Server-side 12-second dedup window rejects a second scale-triggered deduction of the same product, guarding against BLE multi-fire- **ml conversion hint** — Shows "weight in grams → will be converted to ml" when product unit is ml - **Stability + auto-confirm** — 10s stable wait + 5s countdown before confirming - **Real-time status** — Scale connection indicator always visible in the header - **Multi-protocol** — Supports Bluetooth SIG Weight Scale, Body Composition, Xiaomi Mi Scale 2 and 100+ models