TraceApps

joined 1 month ago
[–] TraceApps@lemmy.world 1 points 25 minutes ago

Thanks for taking the time to write this out and thank you for the feedback that helped improve the onboarding process.

I completely respect your preference (as well as the community's). LLMs definitely have their flaws, and they aren't for everyone. For me, AI acts as a thoroughly tested extension of my workflow rather than a shortcut, but I know that doesn't fit every project's philosophy.

I really appreciate your mature approach to the "No thank you" mindset. I hope you find a solution that works perfectly for your needs and aligns with your principles!

[–] TraceApps@lemmy.world 4 points 15 hours ago (5 children)

Thanks for asking. Reception of this app has actually been positive overall since my first post here, with upvotes well ahead of downvotes.

Last week I posted about my newer app LiftTrace, which I also build with AI assistance. Once folks realized AI was part of how I work, "AI slop" became the read on that post and the downvotes came fast. I assume some of this week's downvotes here are coming from the same crowd reacting to a familiar name, which is fair. Everyone is entitled to their opinon and I respect that.

I've never hidden the AI involvement, and from what I can tell on the NutriTrace GitHub page real users are getting value out of it: stars are steadily climbing and issues and enhancement requests are coming in. I'll keep posting these updates because I think the apps are genuinely useful, I use them every day myself, and I wouldn't share them if I didn't believe they could help someone with their own health or fitness journey.

Happy to answer any other questions folks have.

[–] TraceApps@lemmy.world 1 points 15 hours ago

Unfortunately there are no demo sites for either of the projects yet, that is planned for the future.

[–] TraceApps@lemmy.world 2 points 16 hours ago* (last edited 16 hours ago)

Understood. The public repo isn't where day-to-day work happens. Active development lives in a private dev repo and the public mirror gets squashed syncs at release time, which is why all you see are "chore: sync from lifttrace-dev (v1.0.0-rc.X)" entries.

Same pattern applies to my sister app NutriTrace. That public repo at TraceApps/nutritrace is at rc.42 right now, similar squashed-sync history, plus a couple of merged external PRs in the open, so the workflow isn't unique to one repo or trying to hide anything.

Reason for the split: the dev repo has a few files (internal planning docs, keystore config, that kind of thing) that aren't part of the shipped product, so I've been keeping it separate.

 

NutriTrace is a self-hosted nutrition + wellness tracker, alternative to MyFitnessPal / Cronometer / LoseIt. Runs entirely on your own server: no telemetry, no analytics, no account hosted by anyone but you. First public release was 26 April 2026; currently at v1.0.0-rc.42.

Repo (AGPL-3.0) · Release notes + APK · CHANGELOG

What's new in this release

  • AI Meal Photos. Attach a meal photo and Trace returns an editable FDA-style Nutrition Facts card. Save as Quick Calories (one-off) or as a reusable Food entry in your library. Estimates cover the full ~30-nutrient profile, not just the headline macros.
  • LiftTrace workout sync. The sister weightlifting app can now push completed workouts to NutriTrace via the federation API. Sessions appear in Workout History alongside Fitbit / Garmin / Health Connect, and feed the dynamic calorie goal.
  • Smart Log Voice Input Language picker. Pick the mic language independently of device locale (useful if your device is set to English but you speak another language at meals).
  • API Tokens panel is now open to single-user installs (was multi-user + env-gated before).
  • Wizard celebration screen on onboarding completion.

Fixes worth calling out

  • Local Open Food Facts mirror search returning empty results despite the backend finding real hits (DuckDB Node v1.x VARCHAR shape regression).
  • Tapping a reminder notification on Android no longer just dismisses without opening the app.
  • Env-locked AI deployments now actually run Trace's tools instead of silently dropping every tool call (this one was invisible: the model would reply in plain text instead of using your real data).

App overview (for anyone new)

  • Diary: calories, ~30 macros / micros, water, body stats, meal photos, per-day notes
  • Food sources: your own foods, Open Food Facts (with optional local DuckDB mirror for offline / air-gap), USDA, Mealie cookbook federation
  • Saved meals + recipes, copy / move / clone across meal slots and dates
  • Wellness sync: Fitbit, Garmin, Withings, Google Health (Health Connect on Android)
  • Calorie goals: fixed, dynamic (target = base + daily burn), or adaptive TDEE
  • Intermittent fasting tracker with schedules and reminders
  • Optional Trace AI Assistant: multi-provider (Claude / OpenAI / Gemini / any OpenAI-compatible endpoint), BYO key, off by default, browser calls the provider directly so the server never sees your key
  • Multi-user with invites, per-user admin, optional OIDC SSO (Authentik / Pocket-ID / Authelia tested)
  • Android app (Capacitor 8): offline-first SQLite + sync, biometric sign-in, native Health Connect, native barcode scanner
  • Backup: full server ZIP + per-user JSON export / import. Nothing leaves your server.

Deployment

services:
  nutritrace:
    image: ghcr.io/traceapps/nutritrace:latest
    ports: ["3000:3000"]
    volumes: ["./data:/data"]
    environment:
      - JWT_SECRET=<long-random-string>

Full docker-compose + env reference in DEPLOY.md. Signed Android APK attached to every GitHub release; in-place upgrades work.

[–] TraceApps@lemmy.world 1 points 18 hours ago

Appreciate the tip. Thanks!

 

Quick update post for the new v1.0.0-rc.4 release.

LiftTrace is a self-hosted lifting tracker I posted here a few days ago. It's an open, AGPL-3.0 alternative to subscription apps like Strong ($5/mo), Hevy ($6/mo Pro), Jefit ($7/mo Pro), Fitbod (~$80/yr), and the coaching tier of Trainerize / Caliber. Single Docker container, PWA plus a signed Android APK.

Repo: https://github.com/TraceApps/lifttrace Image: ghcr.io/traceapps/lifttrace Latest release (with APK): https://github.com/TraceApps/lifttrace/releases/latest Full changelog: https://github.com/TraceApps/lifttrace/blob/main/CHANGELOG.md

What's new in v1.0.0-rc.4

  • NutriTrace federation: if you also self-host my sister app (NutriTrace), each completed workout's estimated calories burned auto-logs to your NutriTrace diary. Wearable data (Fitbit / Garmin / Health Connect) still wins for overlap so you don't double-count. Set up in Settings → Integrations → NutriTrace with a personal access token.
  • Editable workout duration on the completion summary: the Duration tile is now a button. Tap to pick from quick presets (30 / 45 / 60 / 75 / 90 / 120 min) or enter a custom value. Useful for the "forgot to start the timer" case, and the kcal estimate updates live.
  • Fallback kcal estimate when no duration was tracked, derived from completed set count and badged "rough" so you know it's less precise than a timed session.
  • Persistent "Connected" pill on the federation card so you can tell at a glance the integration is still healthy, plus a shared loading spinner across Diary, Programs, Coaching, Exercise detail, Statistics, and the Workout editor.
  • Polish pass: stronger affordance on the editable Duration tile, title-case sweep across about 20 button and menu labels, better error surfacing for Settings → Backup and Radio when the upstream isn't reachable, and a small wizard celebration screen at the end of first-run setup.
  • Fixed: workout-complete notification firing on every set toggle when re-opening a completed workout's summary (rc.3 caught the main flow; this patches the toggle edge case).

What's in it (full feature list)

  • Diary with sets, reps, weights, RPE, persistent rest timer that survives navigation, supersets, warm-up generator, and natural-language Smart Add (e.g. "bench 3x5 @ 225, A1: curls 3x12 @ 30").
  • Programs: build mesocycles, assign templates by day, progress through weeks.
  • Exercises: full library from wger, free-exercise-db, and exercisedb, plus your own custom entries with images, GIFs, or YouTube links.
  • Statistics: volume, PRs, frequency, body stats trends, RPE overlays, sparklines.
  • Coaching: trainers can prescribe workouts to athletes, leave per-set feedback, two-way reply threads. Replaces a Trainerize or Caliber subscription for small training rosters.
  • Trace AI: optional chat coach, multi-provider (Claude, OpenAI, Gemini, or any OpenAI-compatible endpoint like Ollama, LM Studio, DeepSeek, Groq). BYOK, opt-in, disabled by default.
  • Radio: built-in music player for Subsonic, Jellyfin, Plex, and Emby libraries plus Icecast, Shoutcast, and HLS streaming stations. Lockscreen controls, now-playing metadata, frequency visualizer on the FAB.
  • OIDC SSO: Authentik, Keycloak, Pocket ID, Authelia, Auth0, Google, anything OIDC 1.0. Multi-provider supported.
  • Import from Strong, Hevy, FitNotes, and Jefit CSV exports so you can leave your existing app in about a minute.
  • Android: local SQLite mirror with optional server sync, native ExoPlayer for radio, biometric sign-in, signed release APK on every release.

Deployment

services:
  lifttrace:
    image: ghcr.io/traceapps/lifttrace:latest
    ports:
      - "3002:3003"
    volumes:
      - ./data:/data
    environment:
      JWT_SECRET: ${JWT_SECRET}        # required in production
      INSECURE_COOKIES: "1"            # only if not terminating TLS

docker compose up -d, browse to http://localhost:3002/, finish the first-run wizard. Full env-var reference, reverse-proxy examples (Caddy, nginx), OIDC setup, SMTP setup, and the four supported "connecting from Android" paths are in DEPLOY.md.

Signed APK SHA-256 is published with each GitHub Release for verification. Debug APK (accepts HTTP and self-signed certs) is npm run android:debug for LAN-only setups.

No telemetry, no analytics, no anonymous usage pings. The app phones home only to your own server, or doesn't phone home at all in Android local mode.

 

NutriTrace is a self-hosted nutrition + wellness tracker, alternative to MyFitnessPal / Cronometer / LoseIt. Runs entirely on your own server: no telemetry, no analytics, no account hosted by anyone but you. First public release was 26 April 2026; currently at v1.0.0-rc.42.

Repo (AGPL-3.0) · Release notes + APK · CHANGELOG

What's new in this release

  • AI Meal Photos. Attach a meal photo and Trace returns an editable FDA-style Nutrition Facts card. Save as Quick Calories (one-off) or as a reusable Food entry in your library. Estimates cover the full ~30-nutrient profile, not just the headline macros.
  • LiftTrace workout sync. The sister weightlifting app can now push completed workouts to NutriTrace via the federation API. Sessions appear in Workout History alongside Fitbit / Garmin / Health Connect, and feed the dynamic calorie goal.
  • Smart Log Voice Input Language picker. Pick the mic language independently of device locale (useful if your device is set to English but you speak another language at meals).
  • API Tokens panel is now open to single-user installs (was multi-user + env-gated before).
  • Wizard celebration screen on onboarding completion.

Fixes worth calling out

  • Local Open Food Facts mirror search returning empty results despite the backend finding real hits (DuckDB Node v1.x VARCHAR shape regression).
  • Tapping a reminder notification on Android no longer just dismisses without opening the app.
  • Env-locked AI deployments now actually run Trace's tools instead of silently dropping every tool call (this one was invisible: the model would reply in plain text instead of using your real data).

App overview (for anyone new)

  • Diary: calories, ~30 macros / micros, water, body stats, meal photos, per-day notes
  • Food sources: your own foods, Open Food Facts (with optional local DuckDB mirror for offline / air-gap), USDA, Mealie cookbook federation
  • Saved meals + recipes, copy / move / clone across meal slots and dates
  • Wellness sync: Fitbit, Garmin, Withings, Google Health (Health Connect on Android)
  • Calorie goals: fixed, dynamic (target = base + daily burn), or adaptive TDEE
  • Intermittent fasting tracker with schedules and reminders
  • Optional Trace AI Assistant: multi-provider (Claude / OpenAI / Gemini / any OpenAI-compatible endpoint), BYO key, off by default, browser calls the provider directly so the server never sees your key
  • Multi-user with invites, per-user admin, optional OIDC SSO (Authentik / Pocket-ID / Authelia tested)
  • Android app (Capacitor 8): offline-first SQLite + sync, biometric sign-in, native Health Connect, native barcode scanner
  • Backup: full server ZIP + per-user JSON export / import. Nothing leaves your server.

Deployment

services:
  nutritrace:
    image: ghcr.io/traceapps/nutritrace:latest
    ports: ["3000:3000"]
    volumes: ["./data:/data"]
    environment:
      - JWT_SECRET=<long-random-string>

Full docker-compose + env reference in DEPLOY.md. Signed Android APK attached to every GitHub release; in-place upgrades work.

 

Quick update post for the new v1.0.0-rc.4 release.

LiftTrace is a self-hosted lifting tracker I posted here a few days ago. It's an open, AGPL-3.0 alternative to subscription apps like Strong ($5/mo), Hevy ($6/mo Pro), Jefit ($7/mo Pro), Fitbod (~$80/yr), and the coaching tier of Trainerize / Caliber. Single Docker container, PWA plus a signed Android APK.

Repo: https://github.com/TraceApps/lifttrace Image: ghcr.io/traceapps/lifttrace Latest release (with APK): https://github.com/TraceApps/lifttrace/releases/latest Full changelog: https://github.com/TraceApps/lifttrace/blob/main/CHANGELOG.md

What's new in v1.0.0-rc.4

  • NutriTrace federation: if you also self-host my sister app (NutriTrace), each completed workout's estimated calories burned auto-logs to your NutriTrace diary. Wearable data (Fitbit / Garmin / Health Connect) still wins for overlap so you don't double-count. Set up in Settings → Integrations → NutriTrace with a personal access token.
  • Editable workout duration on the completion summary: the Duration tile is now a button. Tap to pick from quick presets (30 / 45 / 60 / 75 / 90 / 120 min) or enter a custom value. Useful for the "forgot to start the timer" case, and the kcal estimate updates live.
  • Fallback kcal estimate when no duration was tracked, derived from completed set count and badged "rough" so you know it's less precise than a timed session.
  • Persistent "Connected" pill on the federation card so you can tell at a glance the integration is still healthy, plus a shared loading spinner across Diary, Programs, Coaching, Exercise detail, Statistics, and the Workout editor.
  • Polish pass: stronger affordance on the editable Duration tile, title-case sweep across about 20 button and menu labels, better error surfacing for Settings → Backup and Radio when the upstream isn't reachable, and a small wizard celebration screen at the end of first-run setup.
  • Fixed: workout-complete notification firing on every set toggle when re-opening a completed workout's summary (rc.3 caught the main flow; this patches the toggle edge case).

What's in it (full feature list)

  • Diary with sets, reps, weights, RPE, persistent rest timer that survives navigation, supersets, warm-up generator, and natural-language Smart Add (e.g. "bench 3x5 @ 225, A1: curls 3x12 @ 30").
  • Programs: build mesocycles, assign templates by day, progress through weeks.
  • Exercises: full library from wger, free-exercise-db, and exercisedb, plus your own custom entries with images, GIFs, or YouTube links.
  • Statistics: volume, PRs, frequency, body stats trends, RPE overlays, sparklines.
  • Coaching: trainers can prescribe workouts to athletes, leave per-set feedback, two-way reply threads. Replaces a Trainerize or Caliber subscription for small training rosters.
  • Trace AI: optional chat coach, multi-provider (Claude, OpenAI, Gemini, or any OpenAI-compatible endpoint like Ollama, LM Studio, DeepSeek, Groq). BYOK, opt-in, disabled by default.
  • Radio: built-in music player for Subsonic, Jellyfin, Plex, and Emby libraries plus Icecast, Shoutcast, and HLS streaming stations. Lockscreen controls, now-playing metadata, frequency visualizer on the FAB.
  • OIDC SSO: Authentik, Keycloak, Pocket ID, Authelia, Auth0, Google, anything OIDC 1.0. Multi-provider supported.
  • Import from Strong, Hevy, FitNotes, and Jefit CSV exports so you can leave your existing app in about a minute.
  • Android: local SQLite mirror with optional server sync, native ExoPlayer for radio, biometric sign-in, signed release APK on every release.

Deployment

services:
  lifttrace:
    image: ghcr.io/traceapps/lifttrace:latest
    ports:
      - "3002:3003"
    volumes:
      - ./data:/data
    environment:
      JWT_SECRET: ${JWT_SECRET}        # required in production
      INSECURE_COOKIES: "1"            # only if not terminating TLS

docker compose up -d, browse to http://localhost:3002/, finish the first-run wizard. Full env-var reference, reverse-proxy examples (Caddy, nginx), OIDC setup, SMTP setup, and the four supported "connecting from Android" paths are in DEPLOY.md.

Signed APK SHA-256 is published with each GitHub Release for verification. Debug APK (accepts HTTP and self-signed certs) is npm run android:debug for LAN-only setups.

No telemetry, no analytics, no anonymous usage pings. The app phones home only to your own server, or doesn't phone home at all in Android local mode.

 

Just made LiftTrace public after months of development. It's a self-hosted weightlifting / training log that runs in a single Docker container on your own hardware, with a PWA frontend and a signed Android APK. Sister app to NutriTrace under the same TraceApps umbrella.

LiftTrace Diary

What it does:

  • Diary with sets, reps, RPE, warm-up flagging, supersets, rest timer
  • Smart Add — type or speak your workout ("bench 3x5 @ 225, A1: curls 3x12, A2: pushdowns 3x12") and the AI parses it into structured sets
  • Programs with mesocycles, weekly templates, coach prescriptions for trainer / athlete pairs
  • Exercise library seeded from wger + Free Exercise DB (~1,500 exercises with images), plus your own custom uploads
  • Statistics: volume, PRs, frequency heatmap, body weight trends
  • OIDC SSO for Authentik, Keycloak, Pocket ID, Authelia, Auth0, Google, etc.
  • Workout History Import from Strong, Hevy, FitNotes, and Jefit CSVs (so you don't lose your history switching over)
  • Radio player built in for Subsonic / Jellyfin / Plex / Emby plus internet stations (because lifting and lockscreen media controls > switching apps mid-set)
  • AI coach with live workout context — bring your own Claude / OpenAI / Gemini key, or point it at Ollama / LM Studio / any OpenAI-compatible endpoint
  • Android app with offline-first SQLite, biometric sign-in, native ExoPlayer, optional WorkManager reminders

Self-hosted principles:

  • AGPL-3.0, source is open, no telemetry, no central server, no analytics, no cloud sync to anybody else
  • Single Docker container + bind-mounted volumes for DB and uploads
  • Your data stays on your hardware. Back up with cp, restore with cp.

Quick start:

services:
  lifttrace:
    image: ghcr.io/traceapps/lifttrace:latest
    ports: ["3002:3003"]
    volumes:
      - ./data/db:/data/db
      - ./data/uploads:/data/uploads
    environment:
      - DB_PATH=/data/db/lifttrace.db
      - UPLOADS_PATH=/data/uploads
      - JWT_SECRET=change-me
[–] TraceApps@lemmy.world 1 points 1 week ago

Cookidoo has no public API and their ToS prohibits scraping, so a direct integration would be both legally fragile and maintenance-heavy (the scraper breaks on every UI change Vorwerk pushes). The indirect path that works today: Mealie is a self-hosted recipe manager that imports Cookidoo URLs as one of its many recipe sources, and NutriTrace has Mealie integration built in (Settings → Mealie). Your wife adds recipes from Cookidoo into Mealie once, and they show up as searchable foods in NutriTrace with full nutrition.

Also worth mentioning: I've got a sister app called CookTrace (may not be final name) in development as a purpose-built self-hosted recipe manager that pairs natively with NutriTrace (same UI patterns, same AI assistant, federation already wired between them). It has a schema.org Recipe scraper for URL imports, though Cookidoo itself is gated content so it'd still need either a Mealie middle layer or manual entry. Currently private; aiming for a public release in the next month or so.

[–] TraceApps@lemmy.world 9 points 1 week ago

That is correct, and it is called out in the README under Apps → iOS and in the Support section at the bottom. iOS needs a Mac, an iPhone, and a paid Apple Developer account, none of which I currently have. The Support section is where I mention that donations go toward exactly that. Apple Health sync specifically needs a native iOS wrapper since the data isn't exposed to PWAs, so it has to wait on the same blocker. I hope to someday get this out to the community.

 

Features

  • Bulk Food Import via paste JSON or upload CSV (Settings → Import & Export)
  • Live nutrition preview on the Add to Diary sheet (macros update with portion / unit / servings)
  • Mass-aware unit conversion when scaling nutrition (g ↔ oz ↔ lb, ml ↔ cup, tsp ↔ tbsp)
  • Custom Units in Settings ("shot", "scoop", "stick", etc.)
  • Scan Label: snap a photo of a nutrition label and the AI Assistant fills in the values
  • Smart Share / View on OFF: existing Open Food Facts products link straight to their wiki page for editing; new ones get a Share button to contribute back
  • Connection status banners across every integration with one-tap Test / Sync / Disconnect
  • Settings auto-save by default; no Save button to remember
  • Day rollover at midnight when the app stays open overnight
  • Barcode scanner now fully on-device on Android, no Google Play Services required (works on GrapheneOS / CalyxOS / e/OS)
  • Custom nutriment order from Settings is reflected everywhere (food editor, meal editor, diary nutrition bar)
  • Vitamin D, Calcium, Iron, and Potassium visible by default on new installs (FDA Nutrition Facts label mandatory fields)
  • Svelte 5 + Vite 6 + Express 5 + bcryptjs 3 framework upgrade (main bundle ~22% smaller)

Fixes

  • Disabling user management no longer triggers the setup wizard on every reload (#34)
  • Data APIs in single-user mode no longer return 503 "Setup required" on every call (#34 part 2)
  • Single-user mode: only the first food item added each day was visible in the UI. SQLite quirk on null user_id. Includes a one-time migration that recovers items already in the database (#37)
  • Food saves on Android no longer duplicate the previous food (#32)
  • "Most Used" / "Recently Used" food sort on Android now reflects real usage
  • MyFitnessPal Reports → Export CSV imports cleanly now (aggregate-per-meal shape)
  • Wellness scores refresh if today's sleep finishes syncing after the morning snapshot
  • Import Nutrition History action row no longer overlaps the duplicate-date radios (#33)
  • Barcode scanner no longer gets stuck re-opening the camera after a scan
  • Barcodes that don't match anything in OFF now drop you in the food editor with the code prefilled instead of a dead-end toast, so you can contribute the product back
  • Open Food Facts contribution now sends correct per-serving values and uploads your product image (both were silently broken)
  • AI Assistant respects AI_ENABLED=true and the full AI_* env-var set; toggle, settings card, and chat all honour the proxy (#36)
  • kcal / kJ values are consistent everywhere now: food editor, diary footer, meal totals, statistics, goals, weekly summary email, push notifications (#38)
  • AI Assistant Gemini models updated to 2.5 Flash + Lite (Google retired 2.0 Flash and 1.5 Flash)
  • nodemailer updated to 8.0.7 (patches an SMTP command-injection advisory)
  • Several smaller things, see the full changelog

Signed APK + docker image on the release page.

Self-hosted, AGPL-3.0, no telemetry, no account needed. docker compose up and go.

[–] TraceApps@lemmy.world 0 points 1 week ago (2 children)

Nice work, exactly the kind of bridge that makes leaving MFP a lot less painful for self-hosters. Would you be OK with me linking the gist from the NutriTrace README (under Foods & Meals) and from inside the Bulk Food Import modal? Happy to credit it as your script with a link back to the gist.

Either way, thanks for putting it together.

[–] TraceApps@lemmy.world 0 points 1 week ago

thank you, appreciate it!

[–] TraceApps@lemmy.world 0 points 1 week ago

Let me know your issues and post server/browser console/app logs, and ill do my best to assist. You can also create an issue if you feel that this is a bug in the repo. Outside of this i do want to mention, im working on a suite of "Trace" apps. One of which is a Recipe app. I love Mealie, but wanted a bit more for myself, and have created something that i think will be special. It also allows for direct api integration to and from NutriTrace. Will hopefully have a beta that will be publicly available in the next month or so if interested.

[–] TraceApps@lemmy.world 0 points 1 week ago (2 children)

latest update has been released!

 

Self-hosted nutrition + wellness tracker. Latest release rolls up two weeks of work.

New features (rc.21 → rc.26):

  • Recipe yields — declare "this makes N servings" and per-serving math flows through the diary
  • Intermittent fasting tracker — custom presets, history, recurring schedule that auto-starts at a chosen time on chosen days
  • Adaptive TDEE — learns your true daily expenditure from a rolling 35-day window of weight + diary instead of a static estimate
  • Android biometric sign-in — fingerprint / face unlock in server-connected mode
  • Per-serving Open Food Facts import — when a barcode-scanned product has serving data, prefill nutrition per-serving instead of per-100g
  • Health Connect → web — Android-synced Health Connect data now reaches the server and renders on the web Wellness page
  • Sharing rework — per-category sharing form, source filter on Meals/Recipes, zxcvbn-backed password-strength policy

Bug fixes: cross-pollinated food images on diary entries, duplicate foods on rapid barcode scans, scheduler crash, Mealie Test button.

Repo: https://github.com/TraceApps/nutritrace Release: https://github.com/TraceApps/nutritrace/releases/tag/v1.0.0-rc.26

Single docker compose, SQLite, signed APK on the release page.

 

NutriTrace is a self-hosted nutrition tracker (Docker on the server, PWA in the browser, native Android app). AGPL-3.0, no telemetry, no accounts on external services, your data stays on your hardware.

This release is the biggest one since the Android app shipped: the Wellness layer moves off the legacy Fitbit Web API (which Google is sunsetting in September 2026) onto the new Google Health API, the numeric Stress Score becomes Resilience (Optimal / Balanced / Low), Fitbit's new Sleep Quality sub-metrics show up under Sleep, and the Diary gets a Cronometer-style Split Recipe action.

What's new

Google Health migration — Wellness data now flows through Google Health instead of the deprecated Fitbit Web API. Existing Fitbit data still comes from the same device; only the connection method changes. Fitbit users will see a "Re-link required" notice in Settings → Wellness with the migration steps. Old tokens keep working through a transition window.

Resilience replaces the numeric Stress Score — Fitbit retired the 0-to-100 score and renamed it Resilience with three buckets (Optimal / Balanced / Low). The Wellness page reflects the change with a category badge, a one-line interpretation, and a breakdown of the three pillars Fitbit uses (Physical Calmness, Activity Balance, Sleep Patterns). Historical Stress values stay in the database for reference.

Sleep Quality sub-metrics — Time to Sound Sleep, Sound Sleep, Restlessness, and Interruptions appear under the Sleep tab when data is available. Restlessness under-counts vs Fitbit because Google Health doesn't expose the raw motion data Fitbit's app uses internally; the others track within a few minutes on most nights.

Split Recipe on the Diary — Long-press a saved recipe in your diary and tap Split Recipe to break it into its component ingredients in place. The recipe stays as the parent (so totals are preserved); a chevron expands to reveal each ingredient scaled by however much of the recipe was logged. Each child is editable (adjust portion, remove one) without touching the saved recipe in your library.

Info button on saved meals and recipes in the Foods picker — tap the i on any meal or recipe row to see the full ingredient list with portions and per-item energy before logging it. Mirrors the existing yesterday-meals expand pattern

Issues, feature requests, and integration test reports are all welcome on GitHub.

 

Quick update for anyone following the project. NutriTrace is a self-hosted nutrition tracker I've been building. Single Docker container, your data stays on your hardware, no external accounts.

This release ships the first native Android app alongside the existing PWA. Signed APK is attached to the GitHub release.

What you get on Android:

  • Standalone, or connect it to a NutriTrace server for sync
  • Health Connect for steps, sleep, heart rate, body weight
  • Native barcode scanning
  • Native notifications for water reminders, meal prompts, weigh-ins, and goal celebrations
  • OIDC SSO via deep link if you run Authentik, Keycloak, Pocket ID, etc.

Release: https://github.com/TraceApps/nutritrace/releases/tag/v1.0.0-rc.14 Repo: https://github.com/TraceApps/nutritrace

Still on the v1.0 release-candidate cadence so there will be be bugs. Please feel free to post issues here or on Github.

Thanks to everyone who's tried it, provided suggestions and filed bugs along the way. If you find it useful, a star on the repo or a mention to someone looking for a self-hosted nutrition/fitness alternative helps a lot.

 

EDIT 2026-05-03: v1.0.0-rc.14 is out and adds a native Android app.

Full announcement: https://lemmy.world/post/46382994

(original post below)


Hey all, sharing what I've been working on. NutriTrace is a self-hosted nutrition and wellness tracker that runs entirely on your own server in a single Docker container.

I built it because every commercial nutrition app has the same shape. You hand them years of food data, body measurements, and biometrics, and your data is held hostage when they pivot or paywall. I wanted to track macros and pull in my Fitbit data without participating in that.

Daily food diary with multi-ingredient meals, recipes, body stats, water tracking, day-level notes. Personal food database, barcode scanner, imports from Open Food Facts and USDA, plus optional Mealie integration. Statistics with trend charts, full backup, exports as CSV / JSON / full ZIP.

Optional wellness device sync from Fitbit, Withings, Garmin, and Android Health Connect. Sleep / readiness / stress scores computed from your data.

Optional AI assistant where you bring your own Claude / OpenAI / Gemini key. It queries your real data via tool use so it can answer things like "what was my average protein this month" without making numbers up. There's a voice food logger too. Both fully optional, off by default.

Tech: Svelte 4 + Express + better-sqlite3, multi-stage Dockerfile, AGPL-3.0. Native Android app is in active development; PWA installs to home screen on any modern browser today.

Repo and docker-compose example: https://github.com/TraceApps/nutritrace

Happy to answer questions.

view more: next ›