Show only the day's docket on the Today board and add ad hoc Now workouts

- Due-filter schedules: daily always, fixed days by weekday, one-offs on
  their date; rest days get an empty state
- Workouts with no due schedule row (ad hoc or off-day starts) now render
  as their own board rows
- The + sheet is now "New Workout" with a "When" picker; "Now" (offered
  when adding on today) skips the schedule and starts the workout directly
- Remove the times-per-week scheduling mode everywhere (enum, document,
  entity, mappers, planner, seeds, tests)
This commit is contained in:
2026-07-11 11:09:11 -04:00
parent 9dc9283b4c
commit 7cb2d6da26
14 changed files with 231 additions and 199 deletions
+5 -5
View File
@@ -66,10 +66,10 @@ enum ScreenshotSeed {
// ---- Schedules (the Today board's rows, spanning two goal groups) -------
let schedulePlans: [(routine: Routine, goal: GoalKind, recurrence: ScheduleRecurrence,
weekdays: [Int]?, timesPerWeek: Int?)] = [
(created[0], .strength, .fixedDays, [2, 5], nil), // Upper Body · Mon & Thu
(created[1], .strength, .frequency, nil, 2), // Lower Body · 2× per week
(created[2], .mobility, .daily, nil, nil), // Core · daily
weekdays: [Int]?)] = [
(created[0], .strength, .fixedDays, [2, 5]), // Upper Body · Mon & Thu
(created[1], .strength, .fixedDays, [3, 7]), // Lower Body · Tue & Sat
(created[2], .mobility, .daily, nil), // Core · daily
]
// Schedules predate the history below, so the Progress tab's adherence
// tracks cover the seeded weeks instead of starting "today".
@@ -78,7 +78,7 @@ enum ScreenshotSeed {
context.insert(Schedule(
id: ULID.make(), routineID: plan.routine.id, routineName: plan.routine.name,
goalRaw: plan.goal.rawValue, recurrenceRaw: plan.recurrence.rawValue,
weekdays: plan.weekdays, timesPerWeek: plan.timesPerWeek, order: i,
weekdays: plan.weekdays, order: i,
createdAt: scheduledSince, updatedAt: scheduledSince, jsonRelativePath: ""))
}