Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Arete (iOS)

A paper-and-ink "field notebook" SwiftUI workout logger (Poppins type, hairline rules, four color schemes) with per-set tracking, drop sets, previous-lift ghosts, a rest timer, muscle-recovery visualization, routines, and progression statistics. Built with SwiftData (all data stays on device).

Arete is open source under the MIT license, built by Rayze.

Requires Xcode 15+ and targets iOS 17+.

Getting it running (on a Mac)

Option A — plain Xcode (no extra tools)

  1. Open Xcode → File → New → Project → iOS → App.
  2. Name it Arete, Interface: SwiftUI, Language: Swift, Storage: None (we set up SwiftData in code).
  3. Delete the generated ContentView.swift and AreteApp.swift.
  4. Drag the entire Arete/ source folder from this repo into the project navigator (check "Copy items if needed" and add to the app target).
  5. Build & run on a simulator or your iPhone.

Option B — XcodeGen

brew install xcodegen
cd <repo root>   # the folder containing project.yml
xcodegen generate
open Arete.xcodeproj

App tour

Tab What it does
Home Body Freshness meter + Train Next recommendation, muscle-readiness body diagram (green = fresh, red = fatigued), last-7-days calendar (dot color shows how hard each day was, green → red; purple = cardio-only), recent workouts, and the + to start a freestyle workout or one from a routine.
Routines Build named routines (exercises + set counts, reorderable). "Start This Workout" pre-logs everything with empty sets.
Stats Pick any exercise → best lift, top-set weight progression chart, session volume chart, and a full log of every past session.
More Add/Edit Exercises (assign primary/secondary muscle groups, which drive search, categorization, and recovery; ⋯ menu has Reset to Default), Train Next Settings (recommendation style + per-muscle bias/exclude preferences), Enable App Features (toggle Body Freshness, Train Next, Muscle Readiness, DD/MM dates; an Effort section with RPE/RIR options; and Experimental Features gating Minor Muscle Groups + Developer Mode), Change UI (four notebook color schemes), and Wipe All Workouts (double-confirmed).

Logging a workout

  • Tap + on Home → name the workout and add notes → Start Logging.
  • The + Add Exercise bar opens the picker — a pale-blue Add Cardio button at the top leads to the time-based cardio menu, and below it you can search lifts by name or muscle ("triceps" finds all your triceps work); recently used exercises come first.
  • Each exercise card starts with one set. The PREV column shows what you lifted last time for that same working-set position (warm-ups excluded; drop sets show their initial portion; 0×0 if there's no history). Tap the ghost to autofill.
  • Per set: weight, reps, Effort, and notes. The menu marks a set as a Warm-up or Drop Set — drop sets get a subset list where you log each drop's weight and reps.
  • The clock button on an exercise shows every past session for that exercise.
  • Reorder (toolbar) lets you drag exercises into a new order.
  • The Rest Timer button opens the countdown: 1/2/3-minute presets, ±15s nudges, free-form entry ("1:30" or "90"), and a ★ to save any custom time as a favorite.

Recovery system

Every filled-in working set adds fatigue to the muscles that exercise hits (planned sets left at 0×0 don't count), scaled by the set's Effort — RPE or RIR, whichever style is active — on an exponential curve (sets with no Effort logged assume ~8 RPE). Per-muscle sets past ~6 in one workout count sublinearly. Fatigue decays back to zero over each muscle's recovery window — legs/back ~4 days, chest ~3, shoulders/arms ~2, calves/forearms/abs ~1.5 — so freshness (0–100) regenerates each day you don't train the muscle. Cardio bleeds a little fatigue into the legs.

A separate Body Freshness score (0–100 on the Home tab, 100 = fully recovered) is a linear recovery budget: each workout deposits a cost from its per-set Effort (damped past ~15 sets), tonnage relative to your recent median (capped 0.75–1.25×), and cardio, and the budget drains at a fixed rate per day. A small chronic term accumulated over ~4 weeks tightens the cycle during long training streaks. The Today card turns this into a recommendation — rest once freshness hits 50% or below, otherwise the freshest muscle groups (with bias/exclude preferences and a nudge toward long-untrained muscles) or the best-fit routine. More → Train Next Settings picks the style and preferences.

All tuning knobs live in Models/RecoveryEngine.swift (maxFatiguePerSet, rpeFalloff, acuteRecoveryPerDay, acuteScale, chronicHalfLife, restThreshold, …) and Models/Models.swift (recoveryDays, cardio intensity per activity).

Versioning

Arete uses semantic versioning. Every release is tagged and published on the Releases page, with changes documented in CHANGELOG.md.

Current version: v0.2.0

Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md.

Privacy

Arete has no accounts, no analytics, and makes no network calls — every workout is stored on-device with SwiftData and never leaves your phone. The privacy policy is published at rayzecompany.github.io/arete/privacy.html.

License

MIT © 2026 Rayze

The bundled Poppins fonts are licensed separately under the SIL Open Font License 1.1.

Source layout

Arete/
├── AreteApp.swift               — app entry, SwiftData container
├── Theme.swift                  — paper/ink palette, Poppins fonts, freshness colors
├── Models/
│   ├── Models.swift             — SwiftData models (Workout, Exercise, Set, Drop, Routine, RestPreset)
│   ├── RecoveryEngine.swift     — freshness/fatigue math + previous-lift lookup
│   └── SeedData.swift           — starter catalog (80+ lifts) + routines, versioned migrations
└── Views/
    ├── RootTabView.swift        — tab bar, More menu, Train Next + App Features screens
    ├── HomeView.swift           — readiness, 7-day calendar, start workout, founder note
    ├── BodyDiagramView.swift    — front/back human figure heatmap
    ├── WorkoutLogView.swift     — active workout log, reorder, rest/add-lift bar
    ├── ExerciseCardView.swift   — sets, prev ghosts, warm-up/drop menus
    ├── ExercisePickerView.swift — search by name/muscle, recents first
    ├── RestTimerView.swift      — countdown, presets, favorites
    ├── ExerciseHistoryView.swift— past lifts per exercise
    ├── ExercisesManageView.swift— exercise CRUD + muscle categories
    ├── RoutinesView.swift       — routine builder + start
    ├── StatsView.swift          — dashboard pages, charts, lifetime logs
    ├── WorkoutHistoryView.swift — full workout log (View All)
    └── Components.swift         — numeric fields, muscle tags, ruled panels

About

A fitness tracking app. I found that the options for workout trackers were a) shitty, b) expensive, or c) both, so I made my own. Arete is the app I made for myself to be better than those other apps. Download the app for iOS with the TestFlight link.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages