[AIP] CookTrace v1.1.1: In-App Updates, Full i18n Sweep, Android App-ID Fix
(github.com)
from TraceApps@lemmy.world to selfhosted@lemmy.world on 04 Aug 13:08
https://lemmy.world/post/50289324
from TraceApps@lemmy.world to selfhosted@lemmy.world on 04 Aug 13:08
https://lemmy.world/post/50289324
CookTrace is a self-hosted recipe, pantry, and cook-diary app. Single Docker container, PWA + native Android app, no accounts on external services, no telemetry. Third app in the Trace family alongside NutriTrace and LiftTrace.
v1.1.1 rolls up everything since v1.0.3 (a couple months of work, went straight from 1.0.3 to 1.1.0 to 1.1.1).
Added
- In-app updates. New Settings → Updates panel checks GitHub Releases for a newer version. On Android, downloads the signed APK and hands off to the system installer via FileProvider. One primary button drives the whole flow: Check Now → Download & Install → Downloading X%. Skip This Version link when an update’s available, inline “What’s new” markdown panel, opt-in Stable or Dev channels. Silent shade notification when the OS notification permission is granted; top-of-app banner as fallback.
- Full i18n retrofit across the app. Every hardcoded UI string extracted into
src/i18n/en.jsonand reads viasvelte-i18n. ~460 new keys, Weblate-ready. Covers Settings, Pantry, Recipes, Cook Diary, Shopping, Trace AI, and every shared widget. Chicago-style title case for labels/buttons/headings, sentence case for body prose. Column-aligned values and paired<key>_descsibling keys so translators get inline context. - Pull-to-refresh sync (Android). Swipe down from the top of any page to trigger a manual sync in native server mode.
- Smart connection banner. When sync fails, the banner explains what actually went wrong (no network vs cellular-only vs server unreachable vs HTTP error) with a Retry button, instead of a generic “sync error”.
- Cloud icon in hamburger menu goes red on server disconnect. Previously only lit up when the OS reported offline; now also triggers on server-side outages and cellular-vs-LAN routing mismatches.
- Pantry page: configurable default search source. New setting under Settings → Food Sources → Pantry Search picks which chip the Pantry page opens with (All, My Pantry, OFF, USDA). Sticks across sessions + devices.
- Optional email on Create Admin Account form. Shows up when SMTP is configured via environment variables. Stored on the admin user record for password-reset and invite emails later.
- Accent-tinted browser chrome. The browser tab bar picks up the current accent color via
<meta name=“theme-color”>. Running CookTrace alongside NutriTrace / LiftTrace? Distinct accent per install makes tabs visually distinguishable at a glance. - Docker Hub mirror. Images now publish to both
ghcr.io/traceapps/cooktrace(primary) andtraceapps/cooktraceon Docker Hub. Identical multi-arch tag set on both registries.
Changed
- Bitwarden and other password managers show a real app identifier instead of “localhost” (Android). The Android app used to serve its WebView from
https://localhost/, so autofill entries saved as “localhost” and were indistinguishable from any other localhost app. Now identifies asapp.cooktrace.local, which reads clearly in autofill dialogs and saved-credentials lists. One-time upgrade cost: the origin change orphans locally cached web-only state, so on first launch after upgrading you’ll re-enter your server URL + log in again (server-connected users) or lose theme / accent / display prefs (standalone users). Recipe, pantry, and shopping data is unaffected (that lives in a separate local SQLite DB). - SMTP “Username” field relabeled to “Email or Username”. Most providers want the full email; the label change removes the guesswork.
Fixed
- OFF country filter works again + picker expanded 15 → 30 countries. The Pantry’s Open Food Facts country filter was being passed with the wrong query shape (
countries_tags_en=<slug>), so selecting Norway or any non-World option silently had no effect. Fixed by using search-a-licious’s native inline Lucene syntax. While in there: alphabetized the picker and added Argentina, Austria, Belgium, Chile, Denmark, Finland, Ireland, Netherlands, New Zealand, Norway, Poland, Portugal, Singapore, South Africa, South Korea, Sweden, Switzerland. - App icon no longer shows a white halo. Bundled icon PNGs had ~15px of solid white padding baked into their corners; on tinted browser chrome the halo was visible around the tab favicon. Corners now clear cleanly. Icon URLs cache-busted with the app version so future icon fixes take effect without a browser cache clear.
- Create Admin form password field no longer crushed. The password input on the Enable User Management form was rendering as a colored sliver because of a flex-layout bug. Password + Confirm now sit symmetrically side-by-side, each with its own eye toggle sharing show/hide state.
- Server-connection banner no longer covers the phone’s notification bar (v1.1.1). The red “server unreachable” banner sat edge-to-edge at viewport
top:0, which on Android slid it up over the status bar / clock. Now floats as a rounded card below the status bar and the compact header.
Where to Get It
Docker Compose:
services:
cooktrace:
image: ghcr.io/traceapps/cooktrace:latest # or traceapps/cooktrace:latest on Docker Hub
container_name: cooktrace
ports:
- "3003:3001"
volumes:
- ./data/db:/data/db
- ./data/uploads:/data/uploads
environment:
JWT_SECRET: change-me-to-a-long-random-string
DB_PATH: /data/db/cooktrace.db
UPLOADS_PATH: /data/uploads
restart: unless-stopped
Then docker compose up -d and open http://localhost:3003/.
- GitHub: github.com/traceapps/cooktrace
- Docs: traceapps.github.io/docs/cooktrace/
- v1.1.1 release notes: github.com/traceapps/cooktrace/releases/…/v1.1.1
- Full CHANGELOG: github.com/traceapps/cooktrace/…/CHANGELOG.md
- Android APK: signed, on the Releases page (shared TraceApps keystore, in-place upgrades work)
AGPL-3.0. No accounts, no telemetry, no external cloud unless you opt in (Open Food Facts, USDA, or an AI provider you supply the key for).
AI Disclosure
Per Rule 7 / [AIP] disclosure requirements AI was used during development as a coding assistant. Level per category:
- Design (architecture, system design): Hint — I make the architectural calls; AI suggests trade-offs and edge cases I might have missed.
- Implementation (production code): Pair — roughly 50/50. AI drafts, I review, adjust, test on real hardware, and only commit what I’ve verified. Every commit is manually reviewed before it goes to my dev repo.
- Testing (writing tests, test plans, QA): Assisted — real-device testing is manual (I test on my own PC and mobile devices before every release). AI helps draft test plans and think through edge cases.
- Documentation (docs, comments, README, CHANGELOG): Pair — release notes and changelog entries are drafted with AI then edited for tone; comments and code docs are mostly Pair as well.
- Review (code review, PR feedback): Assisted — I’m the reviewer; AI helps with security sweeps, audit passes on complex changes, and consistency checks.
- Deployment (CI/CD config): Hint — Docker/GitHub Actions/release pipeline is largely conventional; AI-suggested improvements only.
threaded - newest
Onward and upward bro. Good to see you again.
Thank you. Hoping to continue to improve the products in meaningful ways. Always appreciate your continued support!
One thing I wish ai would teach vibe coders is how to use semantic versioning.
Trying to infer state of project from versions in ai-assisted software is an exercise in confusion.