docs: add v1.4.0 CHANGELOG and README updates for all features since 1.3.0
This commit is contained in:
@@ -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/),
|
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).
|
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
|
## [1.3.0] - 2026-04-18
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
- **Expiry date reading** — Photograph a label and extract the expiry date automatically
|
- **Expiry date reading** — Photograph a label and extract the expiry date automatically
|
||||||
- **Product identification** — Point your camera at any product for instant recognition
|
- **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
|
- **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
|
- **Smart chat assistant** — Ask questions about your inventory, get cooking tips
|
||||||
- **Shopping suggestions** — AI-powered purchase recommendations
|
- **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
|
- **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
|
- **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-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
|
- **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)
|
||||||
- **DupliClick integration** — Online grocery ordering (Gruppo Poli)
|
- **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
|
### 🍳 Cooking Mode
|
||||||
- **Step-by-step guidance** — Follow recipes with a hands-free cooking interface
|
- **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
|
- **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
|
- **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
|
- **SSE relay** — Server-side relay avoids mixed-content (HTTPS→WS) issues
|
||||||
- **Auto-discovery** — Server scans LAN to find the gateway automatically
|
- **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
|
- **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
|
- **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
|
||||||
- **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
|
- **Stability + auto-confirm** — 10s stable wait + 5s countdown before confirming
|
||||||
- **Real-time status** — Scale connection indicator always visible in the header
|
- **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
|
- **Multi-protocol** — Supports Bluetooth SIG Weight Scale, Body Composition, Xiaomi Mi Scale 2 and 100+ models
|
||||||
|
|||||||
Reference in New Issue
Block a user