LIFT
A nutrition and training tracker for Android. Works offline, keeps your data on your device, and has no accounts, ads, or analytics.
Built for dugcanlift.com, and matched to the macro calculator on that site so the app and the website give the same answers.
Status: pre-release. Not yet published to any app store. Usable, but expect rough edges and occasional breaking changes to stored data.
What it does
Dashboard
Opens on today: calories and macros against your goal, what you've eaten so far, and what you trained. Below that, a week of stats and charts.
- Calories and macros remaining, with progress bars per macro
- Today's steps against a daily goal (10,000 recommended, editable), read live from Health Connect
- Today's training summary — exercises, sets, volume
- Last 7 days: days logged, average calories, workouts, total volume
- Line charts for calories and macros across the week
- Per-exercise progression: pick a lift, see top weight and estimated 1RM across your last ten sessions of it
- Send to Coach, save or restore a backup file, and choose System, Light or Dark appearance (see below)
Days you didn't log show as gaps rather than zeros, and the weekly calorie average divides by days actually logged — not tracking shouldn't look like eating less.
Calculator
Mifflin-St Jeor BMR, scaled by activity level, adjusted for your goal.
- Sex, age, weight (lb), height (ft/in)
- Five activity levels, from sedentary to very active
- Lose (−500 kcal), maintain, or gain (+300 kcal)
- Selectable protein target: 0.7, 0.8, or 1.0 g per lb of bodyweight
- Selectable fat target: 20%, 25%, 30%, or 35% of calories
- Carbs fill the remainder; fiber at 14 g per 1000 kcal
Save the result as your goal and everything else tracks against it.
Food log
- Entries grouped by meal — breakfast, lunch, dinner, snack — with per-meal calorie subtotals
- Meal defaults to the current time of day
- Search Open Food Facts by name
- Scan a barcode to pull nutrition straight off the packet
- One-tap re-log of anything you've eaten before
- Manual entry for anything not in the database
- Tap a logged entry to change its name, meal, amount or macros
- Fiber tracked alongside protein, fat and carbs
- Saturated fat, sugar and sodium, optional under "More nutrients" and read from Open Food Facts when a product lists them. Tracked with no goal: each day's total counts only the foods that recorded it, and says so ("Sodium 1,840 mg · from 3 of 5 foods")
- Browse back through previous days
Cook
- Recipes — write one, or paste a recipe's text (a blog post or a social video's caption) and edit the split into ingredients and method
- A recipe's macros per serving, with labelled fields (saturated fat, sugar and sodium too, all optional), and the finished dish's weight in grams or ounces so a portion can be logged by weight
- Plan — put recipes on the days and meals of the week, then log a planned meal to the food log in one tap
- Shopping — the week's ingredients added up into one list, with ticks
Workout log
- Sessions contain exercises; exercises contain sets
- Equipment is tracked separately from the exercise name, so "Lat Pulldown (Cable)" and "Lat Pulldown (Machine)" keep separate histories
- Each set records weight, reps, RPE, time, and distance — all optional
- A training focus decides which of those fields you see: Bodybuilding, Powerlifting, CrossFit, Hyrox, Endurance, or everything. Switching focus never discards data; every field is always stored
- Shows what you lifted last time, right under the exercise name
- New sets prefill from the previous one
- An exercise library of 873 movements, bundled, so it works offline and names match what a coach prescribes
- Save any workout as a reusable routine, optionally grouped into folders
- Starter routines to add in one tap: Push, Pull, Legs, Upper, Lower, Full Body, Mobility, Active Rest, Short Run, and Long Run
- Start a routine and its target sets are laid out ready to overwrite
- Sessions a coach schedules arrive from a plan link and can be started from Train
- What you were asked to do, and what you did: a week card on Train, under
the coach's card for the day, putting what a plan booked beside what the log
holds —
Mon 12 Oct · Lower A · logged, the asked sets above the logged ones,L 3/3 · R 2/3where a lift is done a limb at a time, andto dofor a day still ahead. A week rather than a marker on the day screen because Train shows one day at a time and cannot be moved past today, so a booked Wednesday is invisible on Thursday and a booked Friday can be read nowhere else. Its arrows skip to weeks a coach actually booked. Nobody is graded: no score, no percentage, no streak, no colour on a day nothing was logged against, and nothing carried from one week to the next. No card at all when no plan books a day in the week on screen. Signed with the coach's own name when the plan link carried one (From Doug), andFrom your coachwhen it did not — once, above the head, and nowhere else on the card. Starting a booked session records which session it became, so a day holding a booked session and a second one of your own compares the right half and the other reads asAlso logged; a booking nobody started, or one whose session was deleted, is compared against the whole day as before
Time accepts mm:ss or plain seconds, so a 90-second sled push and a 22-minute
row both read naturally.
Outdoor
- Record a Run, Walk, or Hike with GPS: time, distance, pace, elevation gain, and the route, drawn as you go
- Keeps recording with the screen off or another app open, with an ongoing notification while it does
- Review a finished activity, and export it to Health Connect with its route
- Under Outdoor: your last route and personal bests per activity type — farthest, longest, and fastest pace (only from activities of 1 km or more, so a burst of GPS drift can't set a record)
Coach
- Send to Coach writes an email to your coach with your log in a link: pick 4, 8, or 12 weeks or 6 months, daily food totals or every item (saturated fat, sugar and sodium go with either, when you recorded them), and whether to include your last route. The route is off until you turn it on, and goes with its first and last 200 m cut off so it never shows where you start
- A coach's plan link (training sessions and meals) opens in the app for you to preview, then accept or decline
Your data
- Save a backup file and restore it on this phone or another; restoring only adds what the device doesn't already have. The file holds your food, training, recipes and meal plan, and your runs, walks and hikes with their full GPS routes, so keep it somewhere private. The format is shared with LIFT for iOS and the browser version
- Appearance: System (the default), Light, or Dark
Privacy
Your goal, your food log, your workouts, and everything else you enter stay on your device. No accounts, no analytics, no ads, no cloud sync.
Two things leave the phone, both only when you use them:
- Food lookup sends your search term or barcode to Open Food Facts. Enter foods by hand and the app never touches the network.
- Send to Coach puts your log in a link and opens your own email app to send it. The app uploads nothing itself. GPS routes are left out unless you turn on your last route, and that one is trimmed at both ends.
See PRIVACY.md for the full detail.
Building
Requires Android Studio and JDK 17+.
./gradlew installDebug
Minimum Android version: 8.0 (API 26) — raised from 7.0 for Health Connect, whose client library requires it.
Storage is plain JSON in the app's private directory — no database, no annotation processing. On a debug build you can inspect it:
adb shell run-as com.dugcanlift.macrocalc ls -l files/
Built with
- Jetpack Compose — UI
- Health Connect — reads your step count; writes an outdoor activity and its route only when you tap Export
- dugcanlift-kit-android — the share-link and plan-link formats, ingredient parsing, and the brand palette, shared with LIFT Coach for Android
- Open Food Facts — food and barcode data, an open database maintained by volunteers
- ZXing Android Embedded — barcode scanning (Apache 2.0), chosen over ML Kit so the app needs no Google Play Services
Charts and routes are drawn directly on a Compose Canvas; there's no plotting
or maps dependency.
Not built yet
- Saturated fat, sugars, and sodium tracking
License
Licensed under the GNU Affero General Public License v3.0. See LICENSE.
Anyone who modifies this code and distributes it — or runs it as a network service — must make their source available under the same terms.