/ home  ›  apps  ›  liftcortex
LiftCortex app icon

LiftCortex

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.

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, 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.

What it does.

📋

Workout Splits

Build templated routines, log multi-set sessions with weight, reps, and notes. Rest timers, plate calculator, 1RM estimator, and celebration screens after a PR.

🥩

Macro Tracking

Daily intake against calorie/protein/carb/fat targets, streaks, meal-name history, and a calorie-ring widget. Built for cuts, bulks, and contest prep.

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 / @MainActor isolation
  • SwiftUI with custom design system
  • iOS 17+ / watchOS 10+; iOS 18 native Tab(); iOS 26 ready

Android (in development)

  • Kotlin 2.0+, K2 compiler
  • Jetpack Compose + Material 3 expressive
  • Room + DataStore (Preferences + Proto)
  • Wear Compose + Glance widgets
  • Hilt DI · Coroutines + Flow · MVI
  • Health Connect · predictive back · dynamic color

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

English Spanish French German Portuguese (BR) Russian Arabic Urdu Hindi Bengali Indonesian Simplified Chinese

What's been shipping.

Android port plan + scaffolding

Multi-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.

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. 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.

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.