e2295aa287bc18422157de973499a240f3c9b374
Replace the in-workout "+" toolbar button with an ellipsis menu offering "Add Exercise" and "End Workout". Ending opens a Save/Discard action sheet: Save marks the remaining exercises as skipped and resolves the workout to completed (stamping end), which drops it off the watch's active list and ends the watch's HealthKit session; Discard soft-deletes it. Teach the status-from-logs derivation that a skipped log is terminal, and consolidate the three duplicated copies into a single shared WorkoutDocument.recomputeStatusFromLogs() so an ended workout stays finished regardless of which screen the next edit comes from. Claude-Session: https://claude.ai/code/session_01SCv7zvGFcKy47KSTnTLxRe
Workouts
A workout tracking app for iPhone and Apple Watch. Build workout splits, run sessions, and track your progress — with your data stored as plain JSON files in your own iCloud Drive.
Key Features
- Workout splits — organize exercises into reusable routines with custom colors and icons. Start with built-in starter splits (Upper Body / Core / Lower Body) generated from a bundled exercise catalog.
- Exercise library — a bundled catalog of starter exercises (bodyweight and machine-based) to populate your splits.
- Run a workout — start a session from a split, then tap an exercise to run it as a paged flow: a Ready? lead-in, count-up work phases, count-down rests, and a Finish page — mirroring the Apple Watch. Swipe a row to mark it complete, or swipe to edit its plan (sets/reps/weight or duration) and notes. End a workout early from the ⋯ menu — Save keeps your progress (remaining exercises are marked skipped) or Discard removes it.
- Progress tracking — weight-progression charts per exercise across past sessions.
- Apple Watch companion — starting a workout on the iPhone launches the watch app straight into it. The watch lists your in-progress workouts; pick one, pick an exercise, and run it as a paged flow: a Ready? lead-in, count-up work phases, count-down rests with final-three-second haptics and auto-advance, and a Finish page with One More and a Done that auto-completes after a countdown. A phase-dot row (purple work, teal rest) tracks progress. Rest time and the auto-finish countdown are configurable; changes sync back to the phone.
- Two-way live run — prop your iPhone up during an Apple Watch workout and it runs the same Ready → work/rest → Finish flow with live timers, in step with the watch. It's bidirectional: drive from either device — swipe ahead, finish a set, add one — and the other follows. Only human transitions are sent; automatic ones (a rest timer ending) advance both devices independently off shared start times, so they never fight.
- Watch face complication — a launcher complication you can place on any Apple Watch face; tap it to open the app. Available in the circular, corner, inline, and rectangular accessory slots.
- iCloud Drive sync — your data lives as human-readable JSON in your iCloud Drive, synced across devices and visible in the Files app. iCloud is required.
Architecture
iCloud Drive JSON documents are the sole source of truth; a local SwiftData
store is a rebuildable read-through cache populated exclusively by an
NSMetadataQuery observer (one-way flow: files → observer → cache). The phone is
the only device that touches iCloud Drive; the Apple Watch is a thin remote that
round-trips workout changes through the phone via WatchConnectivity.
See REQUIREMENTS.md for the data model and CLAUDE.md for project guidance.
Building
The Xcode project is generated with XcodeGen:
xcodegen generate
open Workouts.xcodeproj
Requires Xcode 26 (iOS 26 / watchOS 26, Swift 6).
Description
Languages
Cython
89.4%
Swift
10.3%
HTML
0.2%
Shell
0.1%