Restructure into a three-tab app with Progress, goals, and Meditation

The UX redesign's first landing (spec in UX-REDESIGN.md): ContentView
becomes a Today / Progress / Settings TabView, "Routine" replaces
"Split" in every user-facing string and view name (code-level types
keep their names), and workout starting moves to shared
WorkoutStarter / StartedWorkoutNavigator plumbing.

- New Progress tab: weekly goal streaks, workout trends, per-exercise
  weight progression, achievements, and the full history list
  (WorkoutLogsView -> WorkoutHistoryView).
- Goals: stable categories workouts roll up to, managed from Settings.
- New Meditation exercise + starter routine; timed sits record to
  Apple Health as Mind & Body sessions.

Claude-Session: https://claude.ai/code/session_012qw2itfzKyEJ1HpsFt8Ex4
This commit is contained in:
2026-07-11 07:53:01 -04:00
parent 5c201289fb
commit 6e440317c4
97 changed files with 5354 additions and 1291 deletions
@@ -0,0 +1,41 @@
# Meditation
Sit tall with the legs crossed, rest the hands on the knees, and follow the
breath. A timed stillness practice that lowers stress, settles the nervous
system, and closes a session — or a day — with focus.
- **Category:** Mindfulness
- **Type:** Seated meditation (timed hold)
- **Targets:** Breath, focus, posture
- **Prescription:** Sit 510 min, attention on the breath, returning to it whenever the mind wanders
- **Defaults:** 1 × 300 s
## Setup
Sit on the floor (or a cushion) with the legs crossed — lotus, half-lotus, or a
simple cross, whatever the hips allow. Stack the spine tall, rest the hands on
the knees, and soften the gaze or close the eyes.
## Execution
1. Lengthen up through the crown of the head, letting the shoulders drop.
2. Breathe slowly through the nose — a long inhale, a longer exhale.
3. Rest the attention on the breath moving in and out.
4. When the mind wanders, notice it without judgment and return to the breath.
## Cues
- Sit on the front edge of a cushion to tilt the pelvis and free the spine.
- Let the breath deepen on its own — observe it rather than forcing it.
- Keep the face, jaw, and hands soft; effort lives only in the tall spine.
## Common Mistakes
- Slumping through the lower back as the sit goes on.
- Chasing every thought instead of letting it pass.
- Straining into a full lotus the hips aren't ready for — a simple cross works.
## Progression
A few minutes seated comfortably → longer sits with a steady tall spine →
half-lotus or full lotus as hip mobility allows.
@@ -0,0 +1,30 @@
{
"name": "Meditation",
"primary": 1,
"camera": {"yaw": 45},
"working": ["spine"],
"frames": [
{
"hold": 1.2, "tween": 2.6,
"root": {"pos": [160, 143], "pitch": 2},
"spine": [6, 2],
"neck": 4, "head": -8,
"shoulder_r": {"flexion": 30, "abduction": 8, "rotation": -25}, "elbow_r": 100,
"shoulder_l": {"flexion": 30, "abduction": 8, "rotation": -25}, "elbow_l": 100,
"hip_r": {"flexion": 88, "abduction": 45, "rotation": 50}, "knee_r": 146, "ankle_r": 0,
"hip_l": {"flexion": 88, "abduction": 45, "rotation": 50}, "knee_l": 146, "ankle_l": 0,
"pins": {"hand_r": [174, 95], "hand_l": [176, 96]}
},
{
"hold": 0.8, "tween": 2.8,
"root": {"pos": [160, 142], "pitch": 1},
"spine": [3, -2],
"neck": 2, "head": -6,
"shoulder_r": {"flexion": 33, "abduction": 8, "rotation": -25}, "elbow_r": 96,
"shoulder_l": {"flexion": 33, "abduction": 8, "rotation": -25}, "elbow_l": 96,
"hip_r": {"flexion": 88, "abduction": 45, "rotation": 50}, "knee_r": 146, "ankle_r": 0,
"hip_l": {"flexion": 88, "abduction": 45, "rotation": 50}, "knee_l": 146, "ankle_l": 0,
"pins": {"hand_r": [174, 93], "hand_l": [176, 94]}
}
]
}
@@ -0,0 +1,23 @@
{
"activityType" : 8,
"color" : "purple",
"createdAt" : "2020-01-01T00:00:00Z",
"exercises" : [
{
"durationSeconds" : 300,
"id" : "01DXF6DT00SNZFGBWZ6JACASCQ",
"loadType" : 2,
"name" : "Meditation",
"order" : 0,
"reps" : 0,
"sets" : 1,
"weight" : 0
}
],
"id" : "01DXF6DT00ANFJR7GX9G808G4M",
"name" : "Meditation",
"order" : 13,
"schemaVersion" : 3,
"systemImage" : "figure.mind.and.body",
"updatedAt" : "2020-01-01T00:00:00Z"
}