A personal strength-training coach that turns performance and recovery into a clear next action.
Inside the app · Design language · Architecture · Run the apps
Lead with the next action: the Workout tab opens on what you're about to do.
BetterFit is a calm, dark-first training surface for iPhone and Apple Watch. It helps you decide what to train, move through a session with less friction, understand recovery, and keep building momentum. It speaks like a knowledgeable training partner standing nearby: short, direct, and useful. Never a drill sergeant, influencer, clinical dashboard, or neon fitness game.
The interface is built around a single rule: lead with the next action or conclusion. Stats are context, never the headline. Recovery is colour and text, never colour alone. Identity yellow is reserved for brand moments; ordinary product screens use ember for the one primary action.
|
|
- Plan your week and see what's sore. Today's exercises carry sets and target weight; the body-map companion pairs recovery colour with a written headline.
- Read your health overview in one glance. BMI, strength score, resting heart rate, and active calories lead with the value and a short label.
- Identity: BetterFit yellow
#FFD60A+ black. Reserved for high-impact brand moments, launch surfaces, and achievements. - Product: near-black
#0B0B0D+ ember#FF5A3C. Calm training screens with one clear primary action. - Recovery: blue to green to amber to red. Semantic status, always paired with a written label.
Yellow gives BetterFit its identity, but it does not flood every screen. The product stays dark and focused so workout information remains easy to scan between sets. Ember marks the action to take next.
- Decide what to train. Recommended sessions pull from your plan, history, equipment, and recovery.
- Run it on your wrist. The watchOS companion ships big buttons, sets/reps on the wrist, haptics on set completion, and a rest timer that survives the screen-off state.
- Adapt as you go. The AI adaptation engine adjusts volume, intensity, and exercise selection based on what you actually completed.
- See recovery, not just history. A full body-map view of muscle recovery with semantic colour and accessible labels.
- Swap equipment on the fly. Barbell taken? The equipment swap manager suggests equivalents from what you have available.
- Reminders that respect you. Personalised workout reminders with snooze, never shaming, never missable.
Apps/iOS/
BetterFitApp/ # SwiftUI host app (iPhone + iPad)
BetterFitWatchApp/ # SwiftUI watchOS companion
Sources/BetterFit/ # Public SwiftPM library
BetterFit ships as a Swift Package. The same BetterFit library powers the iOS host app, the watchOS companion, and any future embed of the coach experience.
import BetterFit
let betterFit = BetterFit(persistenceService: LocalPersistenceService())
let plan = betterFit.planManager.generatePlan(for: .hypertrophy)
betterFit.startWorkout(plan.workouts[0])
betterFit.completeWorkout(plan.workouts[0])The full API surface is documented in docs/api.md with usage examples in docs/examples.md.
dependencies: [
.package(url: "https://github.com/echohello-dev/betterfit.git", from: "1.0.0")
]mise run ios:open # XcodeGen + open in Xcode
mise run ios:build:dev # CLI build for the iPhone simulatormise run watch:open # open the watch target
mise run watch:buildSee docs/README.md for the full setup, troubleshooting, and pipeline scripts.
mise install # install pinned tools (swift, xcodegen, swiftlint, etc.)
mise run lint # fast style feedback
mise run test # 95 SwiftPM tests
mise run ios:test:ui # XCUITest on the iPhone simulatorSee CONTRIBUTING.md for the contributor guide.
BetterFit is licensed under a BSD 3-Clause License with branding protection. You're free to use, modify, and distribute this code commercially, but must maintain the "BetterFit" branding for deployments over 50 users.
For enterprise white-label licensing, contact: business@echohello.dev
See LICENSE for full terms.



