Back to projects

// CASE STUDY — Mobile

ForgeLift

Solo design, build, App Store release, and operation

Workout and macro tracker available on iPhone and Android. Built for quick logging between sets, with local storage and no app account required.

Source code is private.

ForgeLift product website showing a workout logging preview and links to the App Store and Google Play
ForgeLift's product website and workout logging preview.

Problem

Workout logging needs to be quick enough to use between sets without making training and nutrition data a server-side profile.

My Contribution

I owned the app design, native SwiftUI build, domain logic, testing, release pipeline, and ongoing product support.

Key Decisions

Use local storage, the user's iCloud for iOS sync and backups, on-device image processing, and portable JSON/CSV exports.

Results

Released on the App Store and Google Play. The iOS domain logic has a 60+ case unit-test suite and an Xcode Cloud release pipeline.

Behind the Build

ForgeLift is a native SwiftUI iPhone app for logging workouts, macros, water, and body weight — designed around the three seconds you actually have between sets. Every logging field shows what you did last session, so training becomes 'just beat it'; PRs are detected automatically, and a smart next-load suggestion learns each exercise's real-world jump size from your own history instead of assuming textbook plate increments. It's live on the App Store, backed by a marketing site and blog at forgeliftapp.com.

The architecture is deliberately credential-free: there is no account system, no login, no ads, and no backend servers at all. Training and nutrition data is deeply personal — so it never leaves the user's control. Everything lives on-device, syncs through the user's own iCloud via CloudKit with per-day merging, and backs up automatically to their iCloud Drive with one-tap restore. Users can export their full history to JSON or CSV at any time, because data you can't take with you isn't really yours. Even the computer-vision feature — snap a photo of a food and the background is removed for a clean icon — runs entirely on-device with Apple's Vision framework, so photos are never uploaded anywhere.

Shipping it meant owning a real release pipeline: Xcode Cloud CI/CD, TestFlight betas, App Review across multiple releases, and a 60+ case unit-test suite covering the domain logic. When a user reported a macro bug (a food saved as '45 kcal per 100 ml' logging 4,500 kcal), the fix shipped as defence in depth: label-style macro entry in the editors, a sanity-checking migration that heals impossible stored values, and diary-entry repair that only rewrites entries provably affected by the bug — then the same fix was mirrored to the Android implementation under a strict parity contract. ForgeLift is now also available on Google Play.

Published ForgeLift iPhone screenshots showing workout onboarding, daily nutrition and training, and workout history
Actual iPhone app screenshots published on the App Store.View listing (opens in a new tab)

Built With

SwiftSwiftUICloudKitVisionStoreKitXcode Cloud

Highlights

  • Live on the App Store and Google Play as "ForgeLift: Gym & Macro Log". The native SwiftUI iOS app has passed TestFlight, App Review, and multiple production releases.
  • The iOS app stores training data on-device and syncs through the user's iCloud (CloudKit with per-day merging), with iCloud Drive backups and one-tap restore. No app account is required.
  • Smart next-load suggestions that learn each exercise's real jump size from the lifter's own history — machine-swap outliers ignored, assistance exercises inverted — instead of fixed equipment increments.
  • On-device computer vision: food photos get automatic background removal via Apple's Vision framework for clean tile icons — no image ever leaves the phone.
  • 60+ green unit tests on the domain logic, shipped through Xcode Cloud CI/CD, plus an 18-step guided walkthrough that spotlights real controls for new users.
  • Full product operation beyond the code: forgeliftapp.com marketing site with Smart App Banner, automated blog pipeline, ASO iteration, and an in-app rating loop.

Security Considerations

  • No app credentials or server-side training profile are collected. Local storage reduces the data held by the developer; device security, backups, and application correctness remain important.
  • Sync and backups ride the user's own iCloud (CloudKit + iCloud Drive), so trust stays between the user and Apple rather than adding a new party to the threat model.
  • Data-integrity engineering: sanity-bounded healing migrations repair physically impossible macro values, and diary repair only rewrites entries that provably reproduce the bug — hand-entered data is never touched.
  • Full data portability by design — JSON and CSV export of the complete history at any time.

Development Timeline

  1. Web Prototype

    May 2026

    Built gym_tracker, a web-based tracker PWA, to prove the logging flow and macro model — and to find out where a browser app falls short in a gym setting.

  2. Native SwiftUI Rebuild

    Jun 2026

    Rebuilt as a native iPhone app under the ForgeLift brand: local-first storage, CloudKit sync with per-day merging, automatic iCloud backups, and no accounts or servers anywhere in the architecture.

  3. Release Pipeline

    Jun 2026

    Stood up Xcode Cloud CI/CD with a growing unit-test suite, TestFlight distribution, and the forgeliftapp.com site with a Smart App Banner on every page.

  4. App Store Launch

    Jul 2026

    Passed App Review and released publicly on the App Store. Shipped the in-app rating loop and 'Spread the word' sharing to start the organic-growth flywheel.

  5. Learning From Real Lifters

    Jul 2026

    Shipped smart next-load suggestions learned from each user's own history, usage-ranked food grids, camera + on-device background removal for food icons, and an 18-step guided walkthrough — all from device feedback.

  6. Data-Healing Release

    Jul 2026

    Fixed a user-reported 100× macro bug with three layers of defence: label-style macro entry, healing migrations for impossible stored values, and provably-safe diary repair. Mirrored to the in-progress Android port under a parity contract.