← All projects

Kusog: A Workout Log That Remembers For You

Cover Image for Kusog: A Workout Log That Remembers For You

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

Today view with weekly goal ring and streak Active workout: previous values shown and pre-filled on every set row Records: four records per exercise plus heaviest-per-rep-count table Progress charts with no history limit Exercise library: 873 exercises searchable by name, muscle, or equipment

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

Let's build something together.

Got an idea? I'm always up for a new challenge, whether it's a side project, a startup, or something in between.

© 2026 Cyrus David Pastelero. All rights reserved.

Built with Next.js, TypeScript & Tailwind CSS