Commit Graph

759 Commits

Author SHA1 Message Date
dadaloop82 07e9db3442 Merge develop: fix use-all confirm HTML + disambiguation UX 2026-05-08 05:48:04 +00:00
dadaloop82 7cb1dfe285 fix: no HTML in use-all confirm dialog; rework disambiguation UX flow 2026-05-08 05:48:00 +00:00
dadaloop82 ef9a8c5c2f fix: price crash with kg-priced items 2026-05-07 20:56:06 +00:00
dadaloop82 f4dbd151a8 fix: getAllShoppingPrices TypeError on null estimated_total for /kg items; fallback to 1-unit price 2026-05-07 20:56:03 +00:00
dadaloop82 705e1f2d95 fix: price refresh fast + button unlock 2026-05-07 20:43:28 +00:00
dadaloop82 4f98a63414 fix: refresh btn busts only total cache (fast); fix _pricesFetching button lock 2026-05-07 20:43:26 +00:00
dadaloop82 d766786e28 fix: batch price PHP timeout + refresh forces recompute 2026-05-07 20:39:46 +00:00
dadaloop82 d2e5eea05b fix: extend PHP timeout for batch price fetch; refresh btn forces recompute 2026-05-07 20:39:44 +00:00
dadaloop82 f1237ed271 fix: prices always fetched from server, no stale client cache 2026-05-07 20:35:40 +00:00
dadaloop82 b412cc0ebe fix: server is single source of truth for prices — no sessionStorage preload 2026-05-07 20:35:37 +00:00
dadaloop82 c28195b250 perf: batch price fetch 2026-05-07 20:29:00 +00:00
dadaloop82 7a51a44b86 perf: batch Gemini price fetch — 1 call for all missing items instead of N 2026-05-07 20:28:58 +00:00
dadaloop82 bc36c93c08 feat: screensaver shows shopping total 2026-05-07 19:29:55 +00:00
dadaloop82 c02a2fc632 feat: screensaver shopping panel with item count and estimated total 2026-05-07 19:29:53 +00:00
dadaloop82 7fd2da1d67 fix: price cache timestamp prevents stale totals across clients 2026-05-07 18:58:13 +00:00
dadaloop82 dfbdbc6efb fix: use timestamp-based price cache validity; invalidate stale per-item cache 2026-05-07 18:58:11 +00:00
dadaloop82 12560dd4c1 release: v1.7.4 — server-side centralized price totals 2026-05-07 18:55:40 +00:00
dadaloop82 6c342a412b fix: centralize price totals server-side; batch API call; 5-min total cache 2026-05-07 18:55:37 +00:00
dadaloop82 12934a045c release: v1.7.4 patch — skip price reload on tab open 2026-05-07 18:50:07 +00:00
dadaloop82 a01ca583ea fix: skip price fetch on first render when smart data empty; bump header to v1.7.4 2026-05-07 18:50:04 +00:00
dadaloop82 47fe51148f Merge branch 'main' of github-evershelf:dadaloop82/EverShelf 2026-05-07 17:55:33 +00:00
dadaloop82 acd6ddb140 release: v1.7.4 — AI price estimation for shopping list 2026-05-07 17:55:18 +00:00
dadaloop82 13b55104a1 chore: release v1.7.4 — AI price estimation, dashboard badge, real-time total 2026-05-07 17:55:05 +00:00
github-actions[bot] 5d9eadf691 chore: auto-merge develop → main
Triggered by: bcd7580 fix: show price total on dashboard via sessionStorage fallback
2026-05-07 17:50:15 +00:00
github-actions[bot] ffa3daba0e chore: auto-merge develop → main
Triggered by: 1584d40 fix: replace stat-urgent with green price total badge top-right
2026-05-07 17:48:23 +00:00
dadaloop82 bcd7580729 fix: show price total on dashboard via sessionStorage fallback 2026-05-07 17:48:18 +00:00
github-actions[bot] 6c11c0105a chore: auto-merge develop → main
Triggered by: 20192f9 fix: prices cached on tab switch; background price fetch every 2min; stat-price-total bigger
2026-05-07 17:47:11 +00:00
dadaloop82 1584d402e4 fix: replace stat-urgent with green price total badge top-right 2026-05-07 17:46:20 +00:00
dadaloop82 20192f902d fix: prices cached on tab switch; background price fetch every 2min; stat-price-total bigger 2026-05-07 17:44:56 +00:00
github-actions[bot] e06d2d506a chore: auto-merge develop → main
Triggered by: b9082ea fix: log.title emoji; add price estimate total to shopping stat card
2026-05-07 17:43:27 +00:00
dadaloop82 b9082eae52 fix: log.title emoji; add price estimate total to shopping stat card 2026-05-07 17:41:41 +00:00
github-actions[bot] 60da4e6989 chore: auto-merge develop → main
Triggered by: 0de9a62 fix: price estimate for all items, including manually-added ones
2026-05-07 17:39:56 +00:00
dadaloop82 0de9a62058 fix: price estimate for all items, including manually-added ones
- AI prompt: always return a best-guess price (never null/price_not_found)
  for unrecognised items returns generic package estimate with '~' prefix
- Cache key bumped to v3 to invalidate old null-returning cache entries
- JS: manually-added items (no smart match, no spec) default to qty=1/conf
  instead of qty=1/pz so _calcEstimatedTotal treats them as a single pack
- Price badge: shows '~€X.XX' prefix when source_note starts with '~'
  so user knows the price is a rough estimate
2026-05-07 17:38:05 +00:00
github-actions[bot] 3aabaeccb7 chore: auto-merge develop → main
Triggered by: 3a9f0cc fix: bump asset versions to force cache bust; price rate limit own bucket
2026-05-07 17:35:50 +00:00
dadaloop82 3a9f0ccf79 fix: bump asset versions to force cache bust; price rate limit own bucket
- app.js and style.css versioned to 20260507a so browsers load new code
- get_shopping_price / get_all_shopping_prices moved to dedicated 'price'
  rate-limit bucket (60 req/min) separate from general (120 req/min)
  to avoid false 429s during sequential per-item price loading
2026-05-07 17:34:04 +00:00
github-actions[bot] dfe14c1f34 chore: auto-merge develop → main
Triggered by: 5f510c0 feat: AI price estimation for shopping list with per-item real-time display
2026-05-07 17:33:14 +00:00
dadaloop82 5f510c0451 feat: AI price estimation for shopping list with per-item real-time display
- Add get_shopping_price / get_all_shopping_prices API endpoints
- AI (Gemini) estimates retail price per natural unit (pack, piece, bunch)
  instead of always per-kg — avoids absurd totals like €1609
- _calcEstimatedTotal: proper g/ml→package conversion using defQty + regex
  on unit_label; only 'kg'/'l' labels trigger weight/volume math
- Cache key bumped to v2 to invalidate old per-kg cached entries
- Suggested quantity cap lowered from 20 to 10 conf/pz
- Unit mismatch guard: if totalUsed >> buyCount*5 for unit=conf, use
  purchase frequency instead of raw consumption rate
- JS _buildPricePayload: use smartShoppingItems for qty/unit (not Bring! spec)
- JS _cachedPrices: persist in sessionStorage (survives navigation);
  validated by _qty/_unit metadata so stale totals auto-invalidate
- Price display redesigned: right-side column per row (price-col-main +
  price-col-unit) instead of small inline badge
- fetchAllPrices: buttons disabled immediately before guard check;
  running total uses only current shoppingItems (not Object.values cache)
- Background refresh: always silent (removed 90s interaction condition)
- visibilitychange: sets _bgCall=true for shopping before refreshCurrentPage
- .gitignore: add runtime data files (bring_migrate_ts, shopping_price_cache,
  anomaly_dismissed, opened_shelf_cache, shopping_name_cache)
- Remove bring_catalog.json and bring_migrate_ts.json from tracking
2026-05-07 17:31:23 +00:00
github-actions[bot] 7005708e95 chore: auto-merge develop → main
Triggered by: 4196130 feat: AI suggestions, smart shopping qty, shelf life fixes, UX polish
2026-05-07 06:20:38 +00:00
dadaloop82 4196130835 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)
2026-05-07 06:19:07 +00:00
dadaloop82 eeb2b512ad merge: screensaver timeout setting + gitignore kiosk build artifacts 2026-05-06 15:00:17 +00:00
dadaloop82 ffb0341eb6 feat: screensaver configurable timeout + fix gitignore (exclude kiosk build artifacts) 2026-05-06 15:00:04 +00:00
dadaloop82 459766fa80 merge develop → main: kiosk v1.7.0 OTA + signing + CI + nutrition dashboard + error reporting 2026-05-06 14:53:17 +00:00
dadaloop82 725e2ee5ee docs: update README with kiosk v1.7.0 features, OTA signing fix, Actions CI, nutrition dashboard 2026-05-06 14:53:07 +00:00
dadaloop82 709a8c769b merge: fix false update warning + Actions auto-publish kiosk APK with semver tag 2026-05-06 14:41:41 +00:00
dadaloop82 8535f4d4b9 fix: update check ignores non-semver tags + GitHub Actions builds versioned releases 2026-05-06 14:41:36 +00:00
dadaloop82 6c9478f09d merge: fix APK signing with project keystore 2026-05-06 14:26:04 +00:00
dadaloop82 cbb3f6b288 fix: use project keystore for consistent APK signing (fixes OTA update signature conflict) 2026-05-06 14:25:59 +00:00
dadaloop82 d793682362 merge develop: kiosk update old APK fallback fix 2026-05-06 14:22:05 +00:00
dadaloop82 484b378be9 fix: kiosk update button works in old APK, shows manual steps if installUpdate missing 2026-05-06 14:22:01 +00:00
dadaloop82 f93c5bf111 merge develop: kiosk update fallback message fix 2026-05-06 14:18:33 +00:00