The problem
Every serious lifter keeps a log, because progressive overload only works if you know what you did last time. But the apps in this space have drifted into subscription products: history capped behind a paywall, charts behind a paywall, your own training data held hostage for $80 a year. The actual job — write down weight and reps, show me last time, tell me if I beat it — is small, personal, and needs no cloud.
What I built
Kusog (Cebuano for "strength") is a workout log for iPhone that does that job completely and keeps everything on your phone. Start a session, add your exercises, fill in the sets. Kusog puts what you did last time next to every set and pre-fills the fields from it, so logging a repeated set is one tap. When you finish, it tells you what you beat.
Screenshots
Core features
- 873 exercises built in, searchable by name, muscle group, or equipment, with instructions — plus your own custom ones
- Sets logged as weight × reps, or as time for cardio and stretches
- Tap a set number to tag it a warm-up, drop set, or failure; warm-ups stay out of your totals and records
- A rest timer that starts the moment you tick a set off — per-exercise durations, ±15 seconds, and a notification when it's up, so it works with the phone in your pocket
- Routines that save your plan and start the next session from it. If the session goes differently, Kusog offers to update the routine — and leaves the logged workout alone either way
- Four records per exercise — heaviest weight, best estimated 1RM, best set volume, best session volume — plus a table of the heaviest you've ever lifted at each rep count
- Charts with no history limit: estimated 1RM, top weight, volume, and total reps over time; volume by week; sets by muscle group
- A weekly goal ring and a streak counted in weeks, not days — a rest day should not cost you anything
- Finished workouts save to Apple Health as strength training, so they count toward your rings
Free, with nothing held back
No subscription, no trial, no ads. Unlimited routines, unlimited custom exercises, full history in every chart. And nothing leaves your phone: no account, no server, no analytics. The exercise catalogue is derived from free-exercise-db, released into the public domain.
Tech stack
| Layer | Technology | Why |
|---|---|---|
| Framework | SwiftUI + Swift 6 | Native iOS with modern concurrency |
| Persistence | SwiftData | Local storage, @Observable + @Query |
| Health | HealthKit | Writes finished workouts as strength training |
| Build | XcodeGen | Reproducible project generation from project.yml |
| Testing | Swift Testing | Unit tests plus a UI screenshot sweep |
| Release | fastlane | Metadata, screenshots, and submission from the repo |
What building this taught me
1. The pre-fill is the product
Every design decision came back to one moment: you just finished a set, you're breathing hard, and the app is asking for input. Showing last time's numbers next to the row and pre-filling from them turns data entry into confirmation. That single interaction is why the app feels fast, and it's also why the records engine matters — "previous" has to be the right previous, with warm-ups excluded.
2. Streaks should forgive what training requires
Day-based streaks punish rest days, which lifting requires. Counting the streak in weeks against a weekly goal keeps the motivational loop without teaching users to train when they shouldn't. Small mechanic, different message.
3. Records are a data-modeling problem before a UI one
"Did you beat anything?" sounds like a query, but it's really a set of definitions: which set types count, how estimated 1RM is derived, what session volume means. Writing those definitions down first — warm-ups out, four named records, a per-rep-count table — made both the code and the end-of-workout moment simple.
4. An offline app still has release infrastructure
There's no backend, but there is a pipeline: XcodeGen for the project, a screenshot sweep in UI tests, fastlane metadata under version control, and a state file that tracks every release gate. The repo can rebuild the entire App Store presence from scratch.
Status
Version 1.0 is submitted and waiting on App Store review. The companion site is live at kusog.pastelero.ph.
Links
- Website: kusog.pastelero.ph
