A focused iOS 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.
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, log sessions, hit protein targets, and count down to show day. It grew into a full training companion for iPhone, 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).
An Android version is in active development — Kotlin 2.0, Jetpack Compose, Material 3 expressive, Room + DataStore, Wear Compose, Glance widgets. Same product, native idioms (predictive back, dynamic color, Quick Settings tiles, Health Connect), same on-device privacy story. Architecture, feature-parity, and build/test plans are written down and under construction; no release date promised yet.
Build templated routines, log multi-set sessions with weight, reps, and notes. Rest timers, plate calculator, 1RM estimator, and celebration screens after a PR.
Daily intake against calorie/protein/carb/fat targets, streaks, meal-name history, and a calorie-ring widget. Built for cuts, bulks, and contest prep.
Custom icons, colors, and photos with crop/pan editor (rect/square/circle). Progress bars and percent displays for show day, deadlines, or any milestone.
Native watchOS 10 companion with Workouts, Macros, and Countdowns. Smart Stack widget surfaces your next event automatically. Crown-driven macro entry.
Automatic sync with merge-or-replace import. No account creation, no server-side data. Your training history is yours.
One-tap import for splits sent by link. Session recap cards for messaging or social. Countdown event sharing.
Localized via Swift String Catalogs with auto-extraction. Tested across right-to-left, declension-heavy, and CJK scripts.
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.
Reorder features. Toggle units (lbs/kg). Move the nav top or bottom. Swap accent colors and contrast modes. Bring-your-own logging style.
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.
@MainActor isolationTab(); iOS 26 readyMulti-module Gradle layout, Kotlin 2.0 / Jetpack Compose / Material 3 expressive, Room ↔ SwiftData parity, Wear Compose, Glance widgets. Feature-parity matrix and build/test infrastructure documented end-to-end before code lands.
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.
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.
String Catalogs auto-extraction, RTL/CJK polish, pluralization rules across en + ar, bn, de, es, fr, hi, id, pt-BR, ru, ur, zh-Hans. Translator pass on every UI string added between 1.2.0 and the latest cut — zero state=new, zero missing translations. App Store metadata refreshed across all 10 storefronts via fastlane.
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.
Extension surfaces the next countdown event in Apple's Smart Stack with battery-friendlier AlwaysOn timeline refresh.
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.