LiftCortex
A focused iOS and Android training companion for lifters, athletes, and gym-goers. Plan splits, log sessions, track macros, countdown to show day — and run it all from your wrist.
Built for execution, not subscription churn.
LiftCortex started as a family project: my son Jonathan signed up for his first bodybuilding competition and needed better tooling than what existed — something to plan split routines, run them live, log sessions, hit protein targets, track bodyweight, and count down to show day. It grew into a full training companion for iPhone, Android, Apple Watch, and the home screen — and we still train together on the weekends, which keeps the feedback loop short and honest.
Everything runs on-device. No account. No subscription. iCloud sync handles backup; AppGroup snapshots feed the watch and widgets; share links let you import a friend's split with one tap. The app ships in 12 languages and four iOS product variants (LiftCortex, LiftCortex No Ads, CountdownCortex, and CountdownCortex No Ads — a focused spin-off for users who only want the countdown features).
The Android build is native Kotlin — Jetpack Compose, Material 3 expressive, Room + DataStore, Wear Compose, Glance widgets, Hilt. Same product, native idioms (predictive back, dynamic color, Quick Settings tiles), same on-device privacy story — built to parity with the iOS app and shipped to Google Play.
Logging a meal no longer means typing: point the camera at a nutrition label and on-device text recognition reads the panel, or scan a barcode and the food is looked up for you — either way you review the extraction before it commits. The 190-movement exercise library carries a short form cue on every entry, localized into all 12 languages. An offline Supplement Guide grades 67 compounds S-to-F by the weight of the published research — each with its studied dose and citations, and never a recommendation. Every progress chart expands, scrubs, and exports to CSV or PDF. Both apps ship under Tatzel Labs LLC, the studio I formed in 2026.
What it does.
Workout Splits + Live Sessions
Build templated routines and run them as guided live sessions — progress pinned to the top, skip or swap exercises mid-workout, and each machine remembers its own setting. Multi-set logging with weight, reps, notes, rest timers, plate calculator, and a 1RM estimator.
Macro Tracking
Daily intake against calorie/protein/carb/fat targets, streaks, and a calorie-ring widget. Search a 2,000+ food library that works offline and in every supported language. Built for cuts, bulks, and contest prep.
Label & Barcode Scanning
Point the camera at a nutrition panel and on-device text recognition reads the values straight off it; or scan a barcode and the product is looked up for you. You review what was extracted before anything commits — the camera does the typing, you keep the final say.
190-Exercise Library + Form Cues
A science-based movement library, each entry carrying short coaching cues for the thing people actually get wrong. Cues surface in-session and on long-press, and switch off entirely if you already know what you're doing. The cue text reads in all 12 languages — translated the way a coach actually talks, not word-for-word.
Supplement Guide
An offline reference to 67 supplements, each graded S-to-F by the weight of the published research — not opinion — with its typically studied dose, effects, cautions, and citations down to the PMID. It's generated from the same evidence-graded encyclopedia I maintain and publish on this site, bundled into the app and readable with no network. No brands, no buy links: LiftCortex does not, and will not, recommend a supplement.
Progress, Trends & Export
Bodyweight logged and charted over time, alongside macro history and workout trends. Read the direction the numbers are heading, not just today's figure. Expand any chart to full screen to scrub it, or export your whole log to CSV or PDF — it's your data.
Muscle Map
Anatomical front and back figures show what each exercise trains, with common or Latin names. Tap a muscle to see what's working it.
Countdown Events
Custom icons, colors, and photos with crop/pan editor (rect/square/circle). Progress bars and percent displays for show day, deadlines, or any milestone.
Apple Watch + Smart Stack
Native watchOS 10 companion with Workouts, Macros, and Countdowns. Smart Stack widget surfaces your next event automatically. Crown-driven macro entry.
iCloud Backup & Restore
Automatic sync with merge-or-replace import. No account creation, no server-side data. Your training history is yours.
Share Imports
One-tap import for splits sent by link. Session recap cards for messaging or social. Countdown event sharing.
12 Languages
Localized via Swift String Catalogs with auto-extraction. Tested across right-to-left, declension-heavy, and CJK scripts.
Plate Calculator
Tap plates onto a side-on bar silhouette and watch it fill in real time. Pairs toggle for asymmetric loads. Available inline on the workout screen, as a standalone utility, and as its own Home Screen widget.
Customizable Everything
Reorder features. Toggle units (lbs/kg). Move the nav top or bottom. Swap accent colors and contrast modes. Bring-your-own logging style.
How it's built.
A multi-target Apple monorepo with the iPhone app as the SwiftData source of truth. The watch and widget extensions
receive read-only snapshots through AppGroup files and WatchConnectivity — no server in the loop, no shared write
surface to fight over. XcodeGen generates the project from a single project.yml
so all four product variants stay in lockstep.
Targets
- iPhone app — primary SwiftData container
- Watch extension — companion via WatchConnectivity
- Widget extension — Smart Stack + home-screen widgets
- 4 schemes — Lift / LiftNoAds / Countdown / CountdownNoAds
Data Flow
- SwiftData on-device persistence
- AppGroup snapshots feed widgets
- WatchConnectivity bidirectional sync
- iCloud backup + restore
- Share links import flow
Release Pipeline
- XcodeGen project regeneration
- Bash preflight + release scripts
- Automated marketing screenshots (iPhone 5.5/6.5/6.9", iPad 12.9/13", Watch 40–49mm)
- App Store update check at launch
Tech.
Language & UI
- Swift with strict-concurrency /
@MainActorisolation - SwiftUI with custom design system
- iOS 17+ / watchOS 10+; iOS 18 native
Tab(); iOS 26 ready
Android (on Google Play)
- Kotlin 2.0+, K2 compiler
- Jetpack Compose + Material 3 expressive
- Room + DataStore (Preferences + Proto)
- Wear Compose + Glance widgets
- Hilt DI · Coroutines + Flow · MVI
- predictive back · dynamic color · Quick Settings tiles
Apple Frameworks
- SwiftData
- WidgetKit
- WatchConnectivity
- StoreKit 2 (IAP)
- String Catalogs (.xcstrings)
Monetization
- Google Mobile Ads SDK (AdMob + UMP)
- StoreKit 2 in-app purchase
- No-ads variants for paid users
Build & Ship
- XcodeGen (project.yml as source of truth)
- Bash release pipeline + preflight
- Automated screenshot orchestration
Localized to
Engineering highlights.
Form cues localized into 12 languages, and an evidence-graded supplement guide
Every one of the 190 exercises' form cues — 531 of them — is localized into all 12 languages; the translations use the words lifters actually say in each language rather than literal anatomy, and a hip hinge never becomes "bend over." Alongside them, an offline Supplement Guide: 67 compounds graded S-to-F by the weight of the research, each with its studied dose and full citations, generated from the same encyclopedia I maintain on this site — never a recommendation, no brands, no buy links.
On-device label & barcode scanning for macros
Macro logging got a camera: on-device text recognition reads a nutrition panel directly, and barcode scanning resolves the product against an open food database — with a review step before anything is written, because an OCR guess should never quietly become your data. Built on VisionKit on iOS and the equivalent native path on Android, so the feature landed on both platforms rather than iOS-first.
Exercise library 73 → 190, with form cues
The movement library nearly tripled, rebuilt around what the training literature actually supports, and every one of the 190 entries carries its own short form cues — the correction that matters for that lift. Cues appear in-session, on long-press, and can be turned off completely, and all 531 read in every one of the 12 languages — translated the way a coach talks on the gym floor, not word-for-word.
Charts you can open, scrub, and take with you
Every progress chart expands to full screen for scrubbing and landscape reading, and the whole log — workouts and macro history alike — exports to CSV or PDF. The app holds no account and no server-side copy, so export is the honest way to make the data portable: it's yours, take it.
Live sessions, muscle map, and bodyweight trends
Running a routine became a guided live session — current progress pinned to the top, skip/swap mid-workout, per-machine settings remembered. Added an anatomical muscle map (common or Latin names), a bodyweight log with trend charts, and a searchable 2,000+ food library that works fully offline.
Android shipped to Google Play
Multi-module Gradle layout, Kotlin 2.0 / Jetpack Compose / Material 3 expressive, Room ↔ SwiftData parity, Wear Compose, Glance widgets — now live on the Play Store, built to feature-parity with the iOS app and native idioms throughout.
Plate Calculator (inline, standalone, widget)
Tap plates onto a side-on bar silhouette, watch it fill in real time, long-press to remove. Pairs toggle for asymmetric loads. Surfaces inline on the workout run screen, as a standalone utility with its own Home Screen widget and deep-link scheme, and in Settings.
Onboarding overhaul
Multi-select starter-routines picker on the final page (Push / Pull / Legs / Upper / Full Body) — selections clone into WorkoutRoutine rows on completion. New background-mode and weight-units pickers with sensible system defaults.
Internationalization to 12 languages
String Catalogs auto-extraction, RTL/CJK polish, pluralization rules across en + ar, bn, de, es, fr, hi, id, pt-BR, ru, ur, zh-Hans. A native-speaker translator pass on every UI string — zero state=new, zero missing translations. App Store metadata localized across all 10 storefronts via fastlane.
iOS 26 strict-isolation hardening
Launch-crash fix when the App Store update checker's await resumed off-main and mutated @Published state — marked the relevant TatzelAppUtils protocols and coordinators @MainActor.
watchOS Smart Stack countdown widget
Extension surfaces the next countdown event in Apple's Smart Stack with battery-friendlier AlwaysOn timeline refresh.
App Store update check + review prompts
Polite, non-blocking version check at launch (extracted to reusable TatzelAppUtils Swift package) and a contextual review prompt on positive moments. Send-Feedback entry in Settings → About.