Skip to content

Latest commit

 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

SetWise app icon

SetWise

Train with a plan. Learn from every session.

A private, local-first iPhone & iPad strength-training app that connects planning, set-by-set logging, recovery, progress, and review.

App Store · Website · Privacy · Support · Engineering notes

SwiftUI · SwiftData · WidgetKit · App Intents · StoreKit 2 · local-first

Docs integrity


SetWise 2.0

Version 2.0.0 · build 33 is live on the App Store.

It is the first major expansion beyond the original recovery-focused release and the current production version of SetWise.

Plan
  ↓
Train
  ↓
Finish
  ↓
Review
  ↓
Use the context in the next session

2.0 brings workout planning, freestyle training, richer set logging, history editing, progress analytics, muscle insights, reports, recaps, import/export, recovery, widgets, and the Free/Pro model into one product loop.


why i built it

Most workout apps are good at recording sets. What I wanted was the part around those sets too: what was I supposed to train, what did I actually do, what changed, and what context should I have before the next session?

So SetWise became a simple loop built around completed training:

plan or start freestyle
        ↓
log the sets you actually complete
        ↓
finish the session
        ↓
update history + recovery + progress
        ↓
review what changed
        ↓
come back with context for the next workout

No social feed. No account required to log a workout. No ads. No recurring subscription. No AI coach pretending to know your body.

It is intentionally a private, local-first native iOS product built around the gym session itself.


SetWise 2.0 in screenshots

SetWise 2.0 screenshot 1 SetWise 2.0 screenshot 2 SetWise 2.0 screenshot 3 SetWise 2.0 screenshot 4
01 02 03 04
SetWise 2.0 screenshot 5 SetWise 2.0 screenshot 6 SetWise 2.0 screenshot 7
05 06 07

These are the same current SetWise screenshots used by the portfolio showcase, keeping the public product repo and portfolio presentation aligned.

plan

Build reusable training around the way you actually work out, or skip the plan and start freestyle.

  • saved workout plans and templates
  • fixed-weekday and rotating scheduling
  • exercise prescriptions with target sets and rep ranges
  • one-tap access to the next planned session
  • freestyle workouts when the day does not fit the plan
  • reusable routines that can evolve without rewriting completed history

train

The active workout is designed for the few seconds between sets, not for sitting at a desk filling out a form.

  • previous-performance context beside the current work
  • warm-up, working, back-off, drop, and failure set types
  • flexible load, reps, and optional effort tracking
  • supersets and circuits
  • exercise substitution without rebuilding the session
  • automatic rest timing with quick adjustments
  • plate calculator and training utilities
  • reviewed exercise-guide media when available
  • active-session persistence across app backgrounding and interruptions

finish

A completed workout becomes a snapshot of what actually happened.

That matters because the plan can change tomorrow without rewriting last Tuesday. Completed sets feed the same local history used by recovery, progress, muscle analysis, reports, recaps, widgets, and system actions.

review

The point of logging is to make the next session better informed.

  • unlimited raw workout history
  • rolling 12-month workout calendar
  • exercise progress trends
  • muscle distribution and training insights
  • workout-derived recovery context
  • monthly reports and comparisons
  • yearly training recaps
  • editable completed-session history

Recovery is a training signal, not a medical claim. It is derived from the work you log and is there to provide context, not diagnose injury or guarantee readiness.


useful before you pay

The free app keeps the core training loop genuinely useful.

It includes unlimited workout logging and raw workout history, core recovery context, exercise guides and utilities, local export, a rolling 12-month calendar, limited planning tools, and useful recent progress views.

SetWise Pro is one lifetime purchase. It expands the product with deeper planning capacity, longer progress ranges, exercise and muscle insights, older reports, yearly recaps, widgets, and advanced customization.

No recurring billing. The workout logger is not a subscription trial shell.


import, export, and ownership

SetWise 2.0 adds user-controlled data movement without turning the app into a cloud account product.

  • on-device Hevy CSV import
  • local user-controlled export
  • JSON export/recovery paths
  • delete-all-data controls
  • no SetWise account required

The production app still treats the local SwiftData store as the source of truth.

Private iCloud/CloudKit sync is planned for a separately tested post-2.0 release. It is not part of build 33.


the fun iOS stuff

SetWise was also my excuse to build a product properly around Apple platform features instead of treating iOS as just another deployment target.

SwiftUI               screens + interaction
SwiftData              local plans, workouts, history + training state
WidgetKit              recovery, calendar, streak + next-workout surfaces
App Intents            Shortcuts / system actions
App Groups             lightweight widget snapshot sharing
UserNotifications      local reminders + training notifications
BGTaskScheduler        opportunistic background refresh
StoreKit 2             lifetime Pro purchase + restore flow
XCTest / UI tests      domain + workout-flow verification
TestFlight             release validation
Privacy manifest       explicit platform privacy configuration

The production app has no user account, no workout-data backend, no ads, and no in-app analytics SDK. Training data stays on-device. Exercise demo media is fetched only when needed and remains separate from private workout history.

If you're interested in the implementation choices rather than the product tour, they are documented in docs/engineering.md.


a few decisions i care about

local data is the source of truth
Plans, workouts, set history, settings, and training-derived state live on the device. The app does not need a server round-trip to tell you what you did five minutes ago.

completed workouts are immutable history by default
A finished session describes what actually happened. Editing a template or future plan should not silently rewrite previous training.

recovery is calculated, not stored as fake truth
Recovery is derived from training source data and current time. A percentage can change as time passes; it should not become permanent truth simply because it was once calculated at a particular moment.

analytics project from the same history
Progress, muscle distribution, reports, recaps, calendar state, and recovery all originate from completed training rather than being maintained as unrelated copies of the same truth.

widgets get a snapshot, not the whole app database
The main app writes a small App Group snapshot for the widget extension. That keeps the extension lightweight and leaves authoritative calculations in the main product.

background work is helpful, not required for correctness
iOS decides when background refresh runs. SetWise refreshes important state during deterministic lifecycle events too, so an unpredictable background schedule cannot break the core experience.

Free should be a real workout app
Unlimited logging and raw history remain useful without payment. Pro sells depth and range rather than access to the basic act of recording a workout.


privacy by design

SetWise is deliberately boring about your data:

  • no account
  • no advertising
  • no social feed
  • no tracking pixels or in-app analytics SDK
  • workout history stays on-device
  • local import/export under user control
  • delete-all-data flow in Settings
  • purchases handled by Apple
  • widgets share only a lightweight local snapshot
  • no iCloud training-data sync in 2.0.0 build 33

Full policy: setwise.senithumesha.com/privacy


release status

Marketing version 2.0.0
Build 33
Status Live on the App Store
Minimum OS iOS 17
Purchase model Free core + one-time lifetime SetWise Pro
Primary data model Local-first SwiftData
Cloud sync Planned post-2.0; not included in build 33

The shipped 2.0 binary is treated as frozen. New product work belongs in the next release rather than changing the meaning of a production build after release.


about this repository

This is the public product + engineering showcase for SetWise.

The production application source is kept private. This repo exists so I can share the product, screenshots, architecture decisions, release thinking, and the parts of the build I find interesting without publishing the commercial codebase, signing setup, or release configuration.

If you are here because of my GitHub profile, this is the native-iOS side quest that got a little out of hand.


SetWise: Workout & Recovery
built by Senith Umesha

App Store · setwise.senithumesha.com

About

Native iOS workout tracker for planning, logging, recovery & progress. SwiftUI, SwiftData, WidgetKit.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Contributors