NutriTrace
Self-hosted personal nutrition and calorie tracker
Alternative to: myfitnesspal, cronometer, lose it, waistline

v1.1.2-dev02
2026-08-08Fixes seven code-review findings against v1.1.2-dev01. Signed APK attached, Docker :dev tag will update via CI.
What was wrong in dev01
- OFF tap-hydration silently no-op’d. The hydration call was written against the wrong API surface (
NtApi.fetchProductByCodeinstead ofAPI.fetchProductByCode), throwing a swallowed TypeError. Net effect: every OFF search-result tap in dev01 skipped the hydration step, so serving-size / per-serving nutriments never loaded, and the Import Portion As setting silently didn’t apply. Fixed in dev02: hydration actually runs now. - kJ-mode users lost visibility of their Calories/Kilojoules goal on the Goals page. The #146 storage alias (Kilojoules row reads/writes through
$goals.calories) was applied in the read/write helpers but not in the row-visibility filters. So the Kilojoules row read as “no goal” even after saving, and users with a set goal saw an empty Goals list. Fixed: all$goals[stat.id]sites now go through the alias helper. - Barcode scan from Foods+pickMode silently discarded pickDate / pickMeal context. Adding a scanned food from the meal-editor / URL-picker flow logged it to today + first meal instead of the caller’s target. Fixed: pickMode routes through pickFood so the caller’s context is preserved.
- OFF v3 barcode lookups returned “not found” for products with data warnings. The v3 status check only accepted
successliteral; real products returningsuccess_with_warningswere dropped. Fixed: accepts everysuccess*variant, falls back to product presence. - Dynamic-mode helper text was hardcoded English. Weblate couldn’t translate it. Fixed: extracted to
settings_goals.dynamic_needs_wearable*keys in en.json.
Anyone who installed dev01 should upgrade
Not all the dev01 behaviors were actually working the way its release notes claimed. dev02 is what dev01 was supposed to be.
docker compose pull && docker compose up -d