{
  "schemaVersion": 1,
  "updatedAt": "2026-11-07T20:20:31.385Z",
  "about": "Origin training system. Goals, scorecard, todos and a 52-week plan. Public by choice. A personal log, not medical advice. No sales tie: nothing here is a funnel for Origin Endurance, and fuel keeps its disclosure wherever it appears on the site.",
  "flagship": "Hybrid Ogopogo finish: finish Ogopogo on Sep 5, 2027 healthy and lean, with strength, team sport and room for life protected.",
  "botContract": {
    "canonicalFile": "training-data.json",
    "configFile": "training/plan-config.json",
    "api": "/api/training",
    "mcp": "node mcp/server.mjs",
    "rules": [
      "Never invent a measured value. Scorecard current stays null until the protocol was actually done.",
      "Weekly weight and week number live in site-data.js only. Update them there or through the admin week API.",
      "Set a week locked: true before rebuilding if a human hand-tweaked it and wants it kept.",
      "Garmin is a handoff: take workouts from /api/training/garmin?week=N, write results back with the scorecard and todo endpoints."
    ]
  },
  "equipment": {
    "home": [
      "Stationary bike",
      "Road bike",
      "Treadmill, basic, fine for easy runs and incline walks",
      "Rower",
      "Adjustable dumbbells to 85 lb each and a bench"
    ],
    "memberships": [
      "Orange Theory",
      "Community center with lap pool and full gym, no Hyrox-specific kit"
    ],
    "recurring": [
      "Sunday morning pickup soccer, slower in winter"
    ],
    "adHoc": [
      "Football tournaments and leagues, timing less reliable"
    ],
    "notes": [
      "Orange Theory counts as the hard conditioning day. Never stack a second hard day on top of it.",
      "If Sunday soccer is off, the slot becomes an easy trail run or a home rower and bike mix.",
      "Hyrox swaps at the community gym: rower for SkiErg, dumbbell thrusters for wall balls, farmer carries and walking lunges for sled work.",
      "Football tournaments replace the long session that week, they do not get added to it."
    ]
  },
  "goals": [
    {
      "id": "goal-joy",
      "name": "Joy",
      "statement": "Play team sport most weeks. Sunday pickup soccer is protected, football fills in when it runs.",
      "measure": "Weeks with a team session",
      "target": "40 of the next 52 weeks",
      "cadence": "Weekly"
    },
    {
      "id": "goal-health",
      "name": "Health",
      "statement": "Use the season as the carrot for sleep, limited drinking and a waist that keeps shrinking.",
      "measure": "Alcohol days, sleep average, waist",
      "target": "Rules kept, waist down 4 in from baseline",
      "cadence": "Weekly, waist monthly"
    },
    {
      "id": "goal-performance",
      "name": "Performance",
      "statement": "Strong and durable first. Carry heavy things, play with the kids, still move well late in a long day.",
      "measure": "Deadlift, carries, pull-ups, mile",
      "target": "Scorecard targets below",
      "cadence": "Retest at checkpoints"
    },
    {
      "id": "goal-aesthetics",
      "name": "Aesthetics",
      "statement": "Lean and muscular, closer to a Hyrox build than a climber build. Muscle stays while fat goes.",
      "measure": "Monthly photo, waist, bench and deadlift holding up",
      "target": "Waist down 4 in with strength up",
      "cadence": "Monthly"
    },
    {
      "id": "goal-pride",
      "name": "Pride",
      "statement": "Finish the Ogopogo Extreme Triathlon on Sep 5, 2027, healthy enough to enjoy the week after.",
      "measure": "Finish, inside the 19 hour clock",
      "target": "Finish healthy",
      "cadence": "Race day"
    }
  ],
  "scorecard": [
    {
      "id": "metric-weight",
      "label": "Body weight",
      "unit": "lb",
      "current": null,
      "source": "site-data.js",
      "target": "Race goal in site-data.js",
      "targetValue": null,
      "direction": "down",
      "protocol": "Same scale, morning, weekly average in site-data.js. This row points there, it does not hold a second copy.",
      "cadence": "Weekly",
      "lastTested": null,
      "history": []
    },
    {
      "id": "metric-waist",
      "label": "Waist",
      "unit": "in",
      "current": null,
      "target": "Down 4 in from baseline",
      "targetValue": null,
      "direction": "down",
      "protocol": "Tape at the navel, relaxed, first Sunday of the month. Same light for the monthly photo.",
      "cadence": "Monthly",
      "lastTested": null,
      "history": []
    },
    {
      "id": "metric-mile",
      "label": "Mile run",
      "unit": "min:sec",
      "current": null,
      "target": "Set after baseline, then chase 30 sec off it",
      "targetValue": null,
      "direction": "down",
      "protocol": "Flat loop or track, full warm-up, one hard mile. Not on the home treadmill, it is not built for this.",
      "cadence": "Checkpoints",
      "lastTested": null,
      "history": []
    },
    {
      "id": "metric-bench",
      "label": "Bench press, top set",
      "unit": "lb x reps",
      "current": null,
      "target": "Bodyweight for 5 clean reps",
      "targetValue": null,
      "direction": "up",
      "protocol": "Best honest set of 5 with a spotter or safeties at the community gym. Log weight and reps, skip true 1 rep max attempts alone at home.",
      "cadence": "Checkpoints",
      "lastTested": null,
      "history": []
    },
    {
      "id": "metric-deadlift",
      "label": "Trap bar deadlift, top set",
      "unit": "lb x reps",
      "current": null,
      "target": "1.75 x bodyweight for 5 reps",
      "targetValue": null,
      "direction": "up",
      "protocol": "Best set of 5, full reset each rep, at the community gym. Home dumbbells top out below this.",
      "cadence": "Checkpoints",
      "lastTested": null,
      "history": []
    },
    {
      "id": "metric-pullups",
      "label": "Strict pull-ups",
      "unit": "reps",
      "current": null,
      "target": "10 strict reps",
      "targetValue": 10,
      "direction": "up",
      "protocol": "Dead hang start, chin over the bar, no kip. One max set.",
      "cadence": "Checkpoints",
      "lastTested": null,
      "history": []
    },
    {
      "id": "metric-carry",
      "label": "Farmer carry",
      "unit": "sec",
      "current": null,
      "target": "Bodyweight total for 60 sec",
      "targetValue": 60,
      "direction": "up",
      "protocol": "Heaviest pair you can hold and walk with for up to 60 sec. Home dumbbells go to 85 lb each, log the load with the time.",
      "cadence": "Checkpoints",
      "lastTested": null,
      "history": []
    },
    {
      "id": "metric-hang",
      "label": "Dead hang",
      "unit": "sec",
      "current": null,
      "target": "120 sec",
      "targetValue": 120,
      "direction": "up",
      "protocol": "Overhand grip, straight arms, clock stops when a hand leaves the bar.",
      "cadence": "Checkpoints",
      "lastTested": null,
      "history": []
    },
    {
      "id": "metric-swim",
      "label": "Swim, 1500 m",
      "unit": "min:sec",
      "current": null,
      "target": "Set after baseline, then chase 5 percent",
      "targetValue": null,
      "direction": "down",
      "protocol": "Community lap pool, steady hard 1500 m, note the pace per 100 m.",
      "cadence": "Checkpoints",
      "lastTested": null,
      "history": []
    },
    {
      "id": "metric-bike",
      "label": "Bike, 20 min average power",
      "unit": "watts",
      "current": null,
      "target": "Set after baseline, then chase 10 percent",
      "targetValue": null,
      "direction": "up",
      "protocol": "Stationary bike, 20 min as hard as you can hold evenly. Log average watts. Illustrative until the same test repeats on the same bike.",
      "cadence": "Checkpoints",
      "lastTested": null,
      "history": []
    }
  ],
  "todos": [
    {
      "id": "todo-baseline-1",
      "title": "Baseline week 1: bench, pull-ups, deadlift, carry, hang and the mile",
      "goalId": "goal-performance",
      "due": "Week 1",
      "done": false,
      "notes": "Space them out. Log real numbers only, ugly is fine."
    },
    {
      "id": "todo-baseline-2",
      "title": "Baseline week 2: 1500 m swim, 20 min bike, waist and photo",
      "goalId": "goal-performance",
      "due": "Week 2",
      "done": false,
      "notes": "Then set numeric scorecard targets with Grok from the baseline, not from a wish."
    },
    {
      "id": "todo-doctor",
      "title": "Doctor check and labs before hard blocks",
      "goalId": "goal-health",
      "due": "Before week 10",
      "done": false,
      "notes": "This site is a personal log, not medical advice. Hard training gets cleared first."
    },
    {
      "id": "todo-soccer",
      "title": "Confirm the Sunday soccer winter plan",
      "goalId": "goal-joy",
      "due": "Week 2",
      "done": false,
      "notes": "If pickup dies in winter, the slot becomes an easy trail run or a rower and bike mix."
    },
    {
      "id": "todo-alcohol",
      "title": "Write the alcohol rule in numbers and log it weekly",
      "goalId": "goal-health",
      "due": "Week 1",
      "done": false,
      "notes": "Limited is not a number. Pick the rule, then the Sunday post reports alcohol days."
    },
    {
      "id": "todo-garmin",
      "title": "Decide how Grok pushes workouts to Garmin",
      "goalId": "goal-performance",
      "due": "Week 3",
      "done": false,
      "notes": "The site exports a week as calendar and workout JSON. Grok does the Garmin side and writes results back here."
    },
    {
      "id": "todo-wetsuit",
      "title": "Wetsuit that fits big shoulders, tested in cold water",
      "goalId": "goal-pride",
      "due": "Before week 27",
      "done": false,
      "notes": "Skaha Lake at 5 am is not the place to learn it does not fit."
    },
    {
      "id": "todo-gearing",
      "title": "Check climbing gears for Apex at current weight",
      "goalId": "goal-pride",
      "due": "Before week 27",
      "done": false,
      "notes": "Road bike as it will race, on a real climb."
    },
    {
      "id": "todo-race-logistics",
      "title": "Race entry, crew, lodging and travel to Penticton",
      "goalId": "goal-pride",
      "due": "Before week 40",
      "done": false,
      "notes": "Re-check course facts at ogopogoextremetri.com before booking around them."
    },
    {
      "id": "todo-sunday-posts",
      "title": "Eight straight Sunday posts with the five numbers",
      "goalId": "goal-health",
      "due": "Weeks 1 to 8",
      "done": false,
      "notes": "Weight trend, hours, team sport yes or no, alcohol days, one honest line."
    }
  ],
  "weeks": [
    {
      "week": 1,
      "startDate": "2026-11-02",
      "phase": "baseline-rebuild",
      "phaseName": "Baseline and rebuild",
      "focus": "Baseline. Measure everything on the scorecard before chasing any of it.",
      "targetHours": 7.3,
      "deload": false,
      "checkpoint": true,
      "locked": false,
      "sessions": [
        {
          "id": "w1-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength baseline A: bench top set and max strict pull-ups",
          "durationMin": 60,
          "detail": "Best honest set of 5 on bench with safeties, then one max set of strict pull-ups. Log both on the scorecard.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w1-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 45,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w1-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w1-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength baseline B: trap bar deadlift, farmer carry, dead hang",
          "durationMin": 45,
          "detail": "Best set of 5 on the trap bar, heaviest 60 sec carry, one max dead hang. Log all three.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w1-bike-5",
          "day": "Thu",
          "sport": "bike",
          "title": "Stationary bike or rower, easy only",
          "durationMin": 40,
          "detail": "Baseline week. The mile test is tomorrow, so Orange Theory sits this one out.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w1-run-6",
          "day": "Fri",
          "sport": "run",
          "title": "Mile baseline",
          "durationMin": 40,
          "detail": "Full warm-up, one hard flat mile, easy cool down. Log the time, ugly or not.",
          "place": "Track or flat loop",
          "target": "as written"
        },
        {
          "id": "w1-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 90,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w1-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Scorecard checkpoint week. Retest, then update the numbers here, not from memory"
      ]
    },
    {
      "week": 2,
      "startDate": "2026-11-09",
      "phase": "baseline-rebuild",
      "phaseName": "Baseline and rebuild",
      "focus": "Baseline. Measure everything on the scorecard before chasing any of it.",
      "targetHours": 7.7,
      "deload": false,
      "checkpoint": true,
      "locked": false,
      "sessions": [
        {
          "id": "w2-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w2-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Bike baseline: 20 min even and hard",
          "durationMin": 45,
          "detail": "Warm up, then 20 min as hard as you can hold evenly on the stationary bike. Log average watts.",
          "place": "Home, stationary bike",
          "target": "as written"
        },
        {
          "id": "w2-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool, easy technique",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w2-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w2-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w2-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w2-swim-7",
          "day": "Sat",
          "sport": "swim",
          "title": "Swim baseline: 1500 m steady hard",
          "durationMin": 60,
          "detail": "Lap pool, even effort, note total time and pace per 100 m.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w2-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        },
        {
          "id": "w2-test-9",
          "day": "Sun",
          "sport": "test",
          "title": "Waist, monthly photo and set scorecard targets",
          "durationMin": 20,
          "detail": "Tape, photo, then sit with Grok and turn baseline numbers into numeric targets.",
          "place": "Home",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Scorecard checkpoint week. Retest, then update the numbers here, not from memory"
      ]
    },
    {
      "week": 3,
      "startDate": "2026-11-16",
      "phase": "baseline-rebuild",
      "phaseName": "Baseline and rebuild",
      "focus": "Measure the scorecard, train easy, lift three times a week, play once a week.",
      "targetHours": 8.1,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w3-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w3-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 53,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w3-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w3-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w3-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w3-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w3-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 98,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w3-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 4,
      "startDate": "2026-11-23",
      "phase": "baseline-rebuild",
      "phaseName": "Baseline and rebuild",
      "focus": "Deload. Measure the scorecard, train easy, lift three times a week, play once a week.",
      "targetHours": 6.6,
      "deload": true,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w4-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w4-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 37,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w4-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 29,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w4-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w4-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory, green zone only, or easy rower",
          "durationMin": 60,
          "detail": "Deload week. Keep it easy or swap in 40 min easy on the rower at home.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w4-rest-6",
          "day": "Fri",
          "sport": "rest",
          "title": "Rest or 20 min mobility",
          "durationMin": 20,
          "detail": "Deload week. The adaptation is the point.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w4-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 71,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w4-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Deload week. Sleep is a session"
      ]
    },
    {
      "week": 5,
      "startDate": "2026-11-30",
      "phase": "baseline-rebuild",
      "phaseName": "Baseline and rebuild",
      "focus": "Measure the scorecard, train easy, lift three times a week, play once a week.",
      "targetHours": 8.3,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w5-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w5-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 60,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w5-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w5-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w5-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w5-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w5-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 105,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w5-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 6,
      "startDate": "2026-12-07",
      "phase": "baseline-rebuild",
      "phaseName": "Baseline and rebuild",
      "focus": "Measure the scorecard, train easy, lift three times a week, play once a week.",
      "targetHours": 8.5,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w6-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w6-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 64,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w6-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w6-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w6-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w6-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w6-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 109,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w6-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 7,
      "startDate": "2026-12-14",
      "phase": "baseline-rebuild",
      "phaseName": "Baseline and rebuild",
      "focus": "Measure the scorecard, train easy, lift three times a week, play once a week.",
      "targetHours": 8.6,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w7-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w7-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 68,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w7-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w7-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w7-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w7-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w7-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 113,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w7-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 8,
      "startDate": "2026-12-21",
      "phase": "baseline-rebuild",
      "phaseName": "Baseline and rebuild",
      "focus": "Deload. Measure the scorecard, train easy, lift three times a week, play once a week.",
      "targetHours": 6.9,
      "deload": true,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w8-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w8-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 46,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w8-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 29,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w8-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w8-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory, green zone only, or easy rower",
          "durationMin": 60,
          "detail": "Deload week. Keep it easy or swap in 40 min easy on the rower at home.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w8-rest-6",
          "day": "Fri",
          "sport": "rest",
          "title": "Rest or 20 min mobility",
          "durationMin": 20,
          "detail": "Deload week. The adaptation is the point.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w8-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 81,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w8-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Deload week. Sleep is a session"
      ]
    },
    {
      "week": 9,
      "startDate": "2026-12-28",
      "phase": "baseline-rebuild",
      "phaseName": "Baseline and rebuild",
      "focus": "Measure the scorecard, train easy, lift three times a week, play once a week.",
      "targetHours": 8.8,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w9-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w9-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 75,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w9-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w9-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w9-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w9-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w9-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 120,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w9-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 10,
      "startDate": "2027-01-04",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Get leaner and stronger while the easy engine grows.",
      "targetHours": 8.3,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w10-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w10-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 45,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w10-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w10-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w10-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w10-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w10-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 120,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w10-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 11,
      "startDate": "2027-01-11",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Get leaner and stronger while the easy engine grows.",
      "targetHours": 8.4,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w11-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w11-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 47,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w11-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w11-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w11-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w11-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w11-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 124,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w11-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 12,
      "startDate": "2027-01-18",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Deload. Get leaner and stronger while the easy engine grows.",
      "targetHours": 7.5,
      "deload": true,
      "checkpoint": true,
      "locked": false,
      "sessions": [
        {
          "id": "w12-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w12-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 32,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w12-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 29,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w12-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w12-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory, green zone only, or easy rower",
          "durationMin": 60,
          "detail": "Deload week. Keep it easy or swap in 40 min easy on the rower at home.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w12-test-6",
          "day": "Fri",
          "sport": "test",
          "title": "Scorecard retest session",
          "durationMin": 60,
          "detail": "Retest two or three scorecard rows at most, same protocols as baseline. Grok writes the results back through the API.",
          "place": "Community gym",
          "target": "as written"
        },
        {
          "id": "w12-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 89,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w12-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Scorecard checkpoint week. Retest, then update the numbers here, not from memory",
        "Deload week. Sleep is a session"
      ]
    },
    {
      "week": 13,
      "startDate": "2027-01-25",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Get leaner and stronger while the easy engine grows.",
      "targetHours": 8.6,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w13-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w13-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 51,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w13-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w13-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w13-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w13-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w13-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 131,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w13-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 14,
      "startDate": "2027-02-01",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Get leaner and stronger while the easy engine grows.",
      "targetHours": 8.7,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w14-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w14-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 53,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w14-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w14-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w14-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w14-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w14-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 135,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w14-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 15,
      "startDate": "2027-02-08",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Get leaner and stronger while the easy engine grows.",
      "targetHours": 8.8,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w15-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w15-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 54,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w15-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w15-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w15-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w15-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w15-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 139,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w15-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 16,
      "startDate": "2027-02-15",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Deload. Get leaner and stronger while the easy engine grows.",
      "targetHours": 7.1,
      "deload": true,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w16-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w16-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 37,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w16-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 29,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w16-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w16-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory, green zone only, or easy rower",
          "durationMin": 60,
          "detail": "Deload week. Keep it easy or swap in 40 min easy on the rower at home.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w16-rest-6",
          "day": "Fri",
          "sport": "rest",
          "title": "Rest or 20 min mobility",
          "durationMin": 20,
          "detail": "Deload week. The adaptation is the point.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w16-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 100,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w16-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Deload week. Sleep is a session"
      ]
    },
    {
      "week": 17,
      "startDate": "2027-02-22",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Get leaner and stronger while the easy engine grows.",
      "targetHours": 9,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w17-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w17-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 58,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w17-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w17-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w17-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w17-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w17-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 146,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w17-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 18,
      "startDate": "2027-03-01",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Get leaner and stronger while the easy engine grows.",
      "targetHours": 9.1,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w18-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w18-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 60,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w18-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w18-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w18-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w18-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w18-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 150,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w18-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 19,
      "startDate": "2027-03-08",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Get leaner and stronger while the easy engine grows.",
      "targetHours": 9.2,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w19-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w19-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 62,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w19-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w19-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w19-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w19-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w19-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 154,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w19-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 20,
      "startDate": "2027-03-15",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Deload. Get leaner and stronger while the easy engine grows.",
      "targetHours": 7.3,
      "deload": true,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w20-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w20-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 41,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w20-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 29,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w20-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w20-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory, green zone only, or easy rower",
          "durationMin": 60,
          "detail": "Deload week. Keep it easy or swap in 40 min easy on the rower at home.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w20-rest-6",
          "day": "Fri",
          "sport": "rest",
          "title": "Rest or 20 min mobility",
          "durationMin": 20,
          "detail": "Deload week. The adaptation is the point.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w20-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 110,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w20-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Deload week. Sleep is a session"
      ]
    },
    {
      "week": 21,
      "startDate": "2027-03-22",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Get leaner and stronger while the easy engine grows.",
      "targetHours": 9.4,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w21-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w21-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 66,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w21-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w21-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w21-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w21-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w21-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 161,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w21-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 22,
      "startDate": "2027-03-29",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Get leaner and stronger while the easy engine grows.",
      "targetHours": 9.5,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w22-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w22-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 68,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w22-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w22-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w22-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w22-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w22-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 165,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w22-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 23,
      "startDate": "2027-04-05",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Get leaner and stronger while the easy engine grows.",
      "targetHours": 9.6,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w23-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w23-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 69,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w23-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w23-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w23-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w23-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w23-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 169,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w23-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 24,
      "startDate": "2027-04-12",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Deload. Get leaner and stronger while the easy engine grows.",
      "targetHours": 7.6,
      "deload": true,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w24-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w24-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 46,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w24-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 29,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w24-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w24-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory, green zone only, or easy rower",
          "durationMin": 60,
          "detail": "Deload week. Keep it easy or swap in 40 min easy on the rower at home.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w24-rest-6",
          "day": "Fri",
          "sport": "rest",
          "title": "Rest or 20 min mobility",
          "durationMin": 20,
          "detail": "Deload week. The adaptation is the point.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w24-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 121,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w24-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Deload week. Sleep is a session"
      ]
    },
    {
      "week": 25,
      "startDate": "2027-04-19",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Get leaner and stronger while the easy engine grows.",
      "targetHours": 9.7,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w25-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w25-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 73,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w25-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w25-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w25-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w25-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w25-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 176,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w25-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 26,
      "startDate": "2027-04-26",
      "phase": "build",
      "phaseName": "Build strength and base",
      "focus": "Get leaner and stronger while the easy engine grows.",
      "targetHours": 10,
      "deload": false,
      "checkpoint": true,
      "locked": false,
      "sessions": [
        {
          "id": "w26-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w26-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 75,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w26-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w26-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w26-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w26-test-6",
          "day": "Fri",
          "sport": "test",
          "title": "Scorecard retest session",
          "durationMin": 60,
          "detail": "Retest two or three scorecard rows at most, same protocols as baseline. Grok writes the results back through the API.",
          "place": "Community gym",
          "target": "as written"
        },
        {
          "id": "w26-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike",
          "durationMin": 180,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w26-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Scorecard checkpoint week. Retest, then update the numbers here, not from memory"
      ]
    },
    {
      "week": 27,
      "startDate": "2027-05-03",
      "phase": "specific",
      "phaseName": "Get specific",
      "focus": "Climbing bike, trail run, open water and race fuel practice.",
      "targetHours": 10.3,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w27-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w27-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 45,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w27-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 60,
          "detail": "Longer steady sets and sighting practice. Open water when it is warm and safe.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w27-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w27-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w27-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w27-swim-7",
          "day": "Fri",
          "sport": "swim",
          "title": "Second swim, steady",
          "durationMin": 45,
          "detail": "Steady laps, race-day breathing rhythm.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w27-bike-8",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 180,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w27-team-9",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 28,
      "startDate": "2027-05-10",
      "phase": "specific",
      "phaseName": "Get specific",
      "focus": "Deload. Climbing bike, trail run, open water and race fuel practice.",
      "targetHours": 7.7,
      "deload": true,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w28-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w28-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 31,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w28-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 39,
          "detail": "Longer steady sets and sighting practice. Open water when it is warm and safe.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w28-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w28-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory, green zone only, or easy rower",
          "durationMin": 60,
          "detail": "Deload week. Keep it easy or swap in 40 min easy on the rower at home.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w28-rest-6",
          "day": "Fri",
          "sport": "rest",
          "title": "Rest or 20 min mobility",
          "durationMin": 20,
          "detail": "Deload week. The adaptation is the point.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w28-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 133,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w28-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Deload week. Sleep is a session"
      ]
    },
    {
      "week": 29,
      "startDate": "2027-05-17",
      "phase": "specific",
      "phaseName": "Get specific",
      "focus": "Climbing bike, trail run, open water and race fuel practice.",
      "targetHours": 10.8,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w29-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w29-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 50,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w29-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 60,
          "detail": "Longer steady sets and sighting practice. Open water when it is warm and safe.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w29-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w29-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w29-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w29-swim-7",
          "day": "Fri",
          "sport": "swim",
          "title": "Second swim, steady",
          "durationMin": 45,
          "detail": "Steady laps, race-day breathing rhythm.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w29-bike-8",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 200,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w29-team-9",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 30,
      "startDate": "2027-05-24",
      "phase": "specific",
      "phaseName": "Get specific",
      "focus": "Climbing bike, trail run, open water and race fuel practice.",
      "targetHours": 9.4,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w30-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w30-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 53,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w30-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 60,
          "detail": "Longer steady sets and sighting practice. Open water when it is warm and safe.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w30-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w30-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w30-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w30-swim-7",
          "day": "Fri",
          "sport": "swim",
          "title": "Second swim, steady",
          "durationMin": 45,
          "detail": "Steady laps, race-day breathing rhythm.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w30-run-8",
          "day": "Sat",
          "sport": "run",
          "title": "Long trail run",
          "durationMin": 116,
          "detail": "Hilly trail, race shoes, walk the steep parts without apologizing. Fuel practice counts more than pace.",
          "place": "Trail",
          "target": "as written"
        },
        {
          "id": "w30-team-9",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 31,
      "startDate": "2027-05-31",
      "phase": "specific",
      "phaseName": "Get specific",
      "focus": "Climbing bike, trail run, open water and race fuel practice.",
      "targetHours": 11.2,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w31-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w31-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 55,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w31-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 60,
          "detail": "Longer steady sets and sighting practice. Open water when it is warm and safe.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w31-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w31-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w31-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w31-swim-7",
          "day": "Fri",
          "sport": "swim",
          "title": "Second swim, steady",
          "durationMin": 45,
          "detail": "Steady laps, race-day breathing rhythm.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w31-bike-8",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 220,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w31-team-9",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 32,
      "startDate": "2027-06-07",
      "phase": "specific",
      "phaseName": "Get specific",
      "focus": "Deload. Climbing bike, trail run, open water and race fuel practice.",
      "targetHours": 8.3,
      "deload": true,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w32-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w32-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 37,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w32-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 39,
          "detail": "Longer steady sets and sighting practice. Open water when it is warm and safe.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w32-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w32-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory, green zone only, or easy rower",
          "durationMin": 60,
          "detail": "Deload week. Keep it easy or swap in 40 min easy on the rower at home.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w32-rest-6",
          "day": "Fri",
          "sport": "rest",
          "title": "Rest or 20 min mobility",
          "durationMin": 20,
          "detail": "Deload week. The adaptation is the point.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w32-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 161,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w32-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Deload week. Sleep is a session"
      ]
    },
    {
      "week": 33,
      "startDate": "2027-06-14",
      "phase": "specific",
      "phaseName": "Get specific",
      "focus": "Climbing bike, trail run, open water and race fuel practice.",
      "targetHours": 11.6,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w33-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w33-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 60,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w33-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 60,
          "detail": "Longer steady sets and sighting practice. Open water when it is warm and safe.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w33-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w33-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w33-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w33-swim-7",
          "day": "Fri",
          "sport": "swim",
          "title": "Second swim, steady",
          "durationMin": 45,
          "detail": "Steady laps, race-day breathing rhythm.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w33-bike-8",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 240,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w33-team-9",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 34,
      "startDate": "2027-06-21",
      "phase": "specific",
      "phaseName": "Get specific",
      "focus": "Climbing bike, trail run, open water and race fuel practice.",
      "targetHours": 9.9,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w34-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w34-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 63,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w34-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 60,
          "detail": "Longer steady sets and sighting practice. Open water when it is warm and safe.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w34-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w34-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w34-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w34-swim-7",
          "day": "Fri",
          "sport": "swim",
          "title": "Second swim, steady",
          "durationMin": 45,
          "detail": "Steady laps, race-day breathing rhythm.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w34-run-8",
          "day": "Sat",
          "sport": "run",
          "title": "Long trail run",
          "durationMin": 138,
          "detail": "Hilly trail, race shoes, walk the steep parts without apologizing. Fuel practice counts more than pace.",
          "place": "Trail",
          "target": "as written"
        },
        {
          "id": "w34-team-9",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 35,
      "startDate": "2027-06-28",
      "phase": "specific",
      "phaseName": "Get specific",
      "focus": "Climbing bike, trail run, open water and race fuel practice.",
      "targetHours": 12,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w35-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w35-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 65,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w35-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 60,
          "detail": "Longer steady sets and sighting practice. Open water when it is warm and safe.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w35-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w35-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w35-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w35-swim-7",
          "day": "Fri",
          "sport": "swim",
          "title": "Second swim, steady",
          "durationMin": 45,
          "detail": "Steady laps, race-day breathing rhythm.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w35-bike-8",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 260,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w35-team-9",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 36,
      "startDate": "2027-07-05",
      "phase": "specific",
      "phaseName": "Get specific",
      "focus": "Deload. Climbing bike, trail run, open water and race fuel practice.",
      "targetHours": 8.9,
      "deload": true,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w36-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w36-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 44,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w36-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 39,
          "detail": "Longer steady sets and sighting practice. Open water when it is warm and safe.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w36-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w36-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory, green zone only, or easy rower",
          "durationMin": 60,
          "detail": "Deload week. Keep it easy or swap in 40 min easy on the rower at home.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w36-rest-6",
          "day": "Fri",
          "sport": "rest",
          "title": "Rest or 20 min mobility",
          "durationMin": 20,
          "detail": "Deload week. The adaptation is the point.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w36-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 189,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w36-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Deload week. Sleep is a session"
      ]
    },
    {
      "week": 37,
      "startDate": "2027-07-12",
      "phase": "specific",
      "phaseName": "Get specific",
      "focus": "Climbing bike, trail run, open water and race fuel practice.",
      "targetHours": 12.4,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w37-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w37-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 70,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w37-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 60,
          "detail": "Longer steady sets and sighting practice. Open water when it is warm and safe.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w37-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w37-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w37-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w37-swim-7",
          "day": "Fri",
          "sport": "swim",
          "title": "Second swim, steady",
          "durationMin": 45,
          "detail": "Steady laps, race-day breathing rhythm.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w37-bike-8",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 280,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w37-team-9",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 38,
      "startDate": "2027-07-19",
      "phase": "specific",
      "phaseName": "Get specific",
      "focus": "Climbing bike, trail run, open water and race fuel practice.",
      "targetHours": 10.5,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w38-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w38-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 73,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w38-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 60,
          "detail": "Longer steady sets and sighting practice. Open water when it is warm and safe.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w38-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w38-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w38-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w38-swim-7",
          "day": "Fri",
          "sport": "swim",
          "title": "Second swim, steady",
          "durationMin": 45,
          "detail": "Steady laps, race-day breathing rhythm.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w38-run-8",
          "day": "Sat",
          "sport": "run",
          "title": "Long trail run",
          "durationMin": 160,
          "detail": "Hilly trail, race shoes, walk the steep parts without apologizing. Fuel practice counts more than pace.",
          "place": "Trail",
          "target": "as written"
        },
        {
          "id": "w38-team-9",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 39,
      "startDate": "2027-07-26",
      "phase": "specific",
      "phaseName": "Get specific",
      "focus": "Climbing bike, trail run, open water and race fuel practice.",
      "targetHours": 12.3,
      "deload": false,
      "checkpoint": true,
      "locked": false,
      "sessions": [
        {
          "id": "w39-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w39-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 75,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w39-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 60,
          "detail": "Longer steady sets and sighting practice. Open water when it is warm and safe.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w39-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w39-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w39-test-6",
          "day": "Fri",
          "sport": "test",
          "title": "Scorecard retest session",
          "durationMin": 60,
          "detail": "Retest two or three scorecard rows at most, same protocols as baseline. Grok writes the results back through the API.",
          "place": "Community gym",
          "target": "as written"
        },
        {
          "id": "w39-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 300,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w39-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Scorecard checkpoint week. Retest, then update the numbers here, not from memory"
      ]
    },
    {
      "week": 40,
      "startDate": "2027-08-02",
      "phase": "peak-taper",
      "phaseName": "Peak and taper",
      "focus": "Deload. Two big weeks, then freshen up for Sep 5, 2027.",
      "targetHours": 8.8,
      "deload": true,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w40-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w40-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 29,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w40-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 29,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w40-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w40-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory, green zone only, or easy rower",
          "durationMin": 60,
          "detail": "Deload week. Keep it easy or swap in 40 min easy on the rower at home.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w40-rest-6",
          "day": "Fri",
          "sport": "rest",
          "title": "Rest or 20 min mobility",
          "durationMin": 20,
          "detail": "Deload week. The adaptation is the point.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w40-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 210,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w40-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Deload week. Sleep is a session"
      ]
    },
    {
      "week": 41,
      "startDate": "2027-08-09",
      "phase": "peak-taper",
      "phaseName": "Peak and taper",
      "focus": "Two big weeks, then freshen up for Sep 5, 2027.",
      "targetHours": 11.5,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w41-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w41-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 53,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w41-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w41-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w41-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w41-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w41-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 300,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w41-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 42,
      "startDate": "2027-08-16",
      "phase": "peak-taper",
      "phaseName": "Peak and taper",
      "focus": "Two big weeks, then freshen up for Sep 5, 2027.",
      "targetHours": 11.6,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w42-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w42-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Rower and stationary bike, easy mix",
          "durationMin": 60,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w42-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w42-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w42-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w42-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w42-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 300,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w42-team-8",
          "day": "Sun",
          "sport": "team",
          "title": "Pickup soccer",
          "durationMin": 75,
          "detail": "Sunday morning pickup. In winter, if soccer is off, this becomes an easy trail run or a rower and bike mix at home. A football tournament replaces the Saturday long session, it does not add to it.",
          "place": "Pickup field",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 43,
      "startDate": "2027-08-23",
      "phase": "peak-taper",
      "phaseName": "Peak and taper",
      "focus": "Two big weeks, then freshen up for Sep 5, 2027.",
      "targetHours": 8,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w43-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w43-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Stationary bike, easy aerobic",
          "durationMin": 68,
          "detail": "Conversational the whole way. Treadmill incline walk is the bad-weather swap, not a harder session.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w43-swim-3",
          "day": "Wed",
          "sport": "swim",
          "title": "Lap pool swim",
          "durationMin": 45,
          "detail": "Easy laps and drills. Skill first, fitness is being built elsewhere.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w43-strength-4",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 45,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w43-conditioning-5",
          "day": "Thu",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The one hard conditioning day. Nothing else hard gets stacked on this week because of it.",
          "place": "Orange Theory or home",
          "target": "as written"
        },
        {
          "id": "w43-strength-6",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: press, single-leg, carry",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w43-bike-7",
          "day": "Sat",
          "sport": "bike",
          "title": "Long road bike with climbing, 20 min run off",
          "durationMin": 150,
          "detail": "Road bike outside when weather allows, stationary bike when it does not. Fuel every long session like it matters, because on race day it will.",
          "place": "Road or home",
          "target": "as written"
        },
        {
          "id": "w43-rest-8",
          "day": "Sun",
          "sport": "rest",
          "title": "Rest. No soccer in taper",
          "durationMin": 0,
          "detail": "One twisted ankle ends the season. The team will forgive two Sundays.",
          "place": "Home",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 44,
      "startDate": "2027-08-30",
      "phase": "peak-taper",
      "phaseName": "Peak and taper",
      "focus": "Two big weeks, then freshen up for Sep 5, 2027.",
      "targetHours": 20.8,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w44-swim-1",
          "day": "Mon",
          "sport": "swim",
          "title": "Easy swim and gear check",
          "durationMin": 30,
          "detail": "Short and easy. Wetsuit on and off once, calmly.",
          "place": "Community lap pool",
          "target": "as written"
        },
        {
          "id": "w44-bike-2",
          "day": "Tue",
          "sport": "bike",
          "title": "Easy spin, race wheels and gears check",
          "durationMin": 45,
          "detail": "Stationary bike or flat road. Nothing to prove this week.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w44-run-3",
          "day": "Wed",
          "sport": "run",
          "title": "Easy run with 4 short pickups",
          "durationMin": 30,
          "detail": "Flat and easy. Trail shoes as raced.",
          "place": "Outside",
          "target": "as written"
        },
        {
          "id": "w44-rest-4",
          "day": "Thu",
          "sport": "rest",
          "title": "Travel and early night",
          "durationMin": 0,
          "detail": "Pack, eat, sleep. No Orange Theory, no make-up sessions.",
          "place": "Travel to Penticton",
          "target": "as written"
        },
        {
          "id": "w44-rest-5",
          "day": "Fri",
          "sport": "rest",
          "title": "Race check-in and rest",
          "durationMin": 0,
          "detail": "Feet up. Re-check the official course notes.",
          "place": "Penticton",
          "target": "as written"
        },
        {
          "id": "w44-rest-6",
          "day": "Sat",
          "sport": "rest",
          "title": "Rest, early night, kit laid out",
          "durationMin": 0,
          "detail": "Tomorrow starts at 5 am in the dark. Write down tonight what a good day looks like, in one line.",
          "place": "Penticton",
          "target": "as written"
        },
        {
          "id": "w44-triathlon-7",
          "day": "Sun",
          "sport": "triathlon",
          "title": "Ogopogo Extreme Triathlon, race day",
          "durationMin": 1140,
          "detail": "Duration is the 19 hour race clock, not a predicted finish. 3.8 km swim from a 5 am dark start, 183.4 km bike with 3,100 m, 43 km trail with 1,675 m. Course facts checked Oct 2026, re-check before the race.",
          "place": "Penticton, BC",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Race week. Crew plan, lights charged, early nights"
      ]
    },
    {
      "week": 45,
      "startDate": "2027-09-06",
      "phase": "after",
      "phaseName": "Recover, then Hyrox and team sport",
      "focus": "Rest first. Then find out if Hyrox and team sport are the next flagship.",
      "targetHours": 1,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w45-walk-1",
          "day": "Tue",
          "sport": "walk",
          "title": "Walk, easy",
          "durationMin": 30,
          "detail": "Flat, with the family if they want in.",
          "place": "Outside",
          "target": "as written"
        },
        {
          "id": "w45-walk-2",
          "day": "Thu",
          "sport": "walk",
          "title": "Walk or very easy stationary bike",
          "durationMin": 30,
          "detail": "Only if it feels good. Skipping is also the plan.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w45-rest-3",
          "day": "Sun",
          "sport": "rest",
          "title": "No soccer. Sleep and eat",
          "durationMin": 0,
          "detail": "The season is banked. Do not spend it in week 45.",
          "place": "Home",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 46,
      "startDate": "2027-09-13",
      "phase": "after",
      "phaseName": "Recover, then Hyrox and team sport",
      "focus": "Rest first. Then find out if Hyrox and team sport are the next flagship.",
      "targetHours": 4.8,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w46-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w46-conditioning-2",
          "day": "Tue",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The hard conditioning day. If a football tournament lands this week, this is the session it replaces.",
          "place": "Orange Theory",
          "target": "as written"
        },
        {
          "id": "w46-strength-3",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 55,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w46-strength-4",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: arms, core, carries",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w46-hyrox-5",
          "day": "Sat",
          "sport": "hyrox",
          "title": "Hyrox engine, gym swaps",
          "durationMin": 60,
          "detail": "Rounds of rower, dumbbell thrusters, farmer carries, walking lunges and short easy runs. No sled at this gym, so carries and lunges carry the load.",
          "place": "Community gym",
          "target": "as written"
        },
        {
          "id": "w46-rest-6",
          "day": "Sun",
          "sport": "rest",
          "title": "Rest. No soccer in taper",
          "durationMin": 0,
          "detail": "One twisted ankle ends the season. The team will forgive two Sundays.",
          "place": "Home",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 47,
      "startDate": "2027-09-20",
      "phase": "after",
      "phaseName": "Recover, then Hyrox and team sport",
      "focus": "Rest first. Then find out if Hyrox and team sport are the next flagship.",
      "targetHours": 4.8,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w47-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w47-conditioning-2",
          "day": "Tue",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The hard conditioning day. If a football tournament lands this week, this is the session it replaces.",
          "place": "Orange Theory",
          "target": "as written"
        },
        {
          "id": "w47-strength-3",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 55,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w47-strength-4",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: arms, core, carries",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w47-hyrox-5",
          "day": "Sat",
          "sport": "hyrox",
          "title": "Hyrox engine, gym swaps",
          "durationMin": 60,
          "detail": "Rounds of rower, dumbbell thrusters, farmer carries, walking lunges and short easy runs. No sled at this gym, so carries and lunges carry the load.",
          "place": "Community gym",
          "target": "as written"
        },
        {
          "id": "w47-rest-6",
          "day": "Sun",
          "sport": "rest",
          "title": "Rest. No soccer in taper",
          "durationMin": 0,
          "detail": "One twisted ankle ends the season. The team will forgive two Sundays.",
          "place": "Home",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 48,
      "startDate": "2027-09-27",
      "phase": "after",
      "phaseName": "Recover, then Hyrox and team sport",
      "focus": "Rest first. Then find out if Hyrox and team sport are the next flagship.",
      "targetHours": 4.8,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w48-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w48-conditioning-2",
          "day": "Tue",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The hard conditioning day. If a football tournament lands this week, this is the session it replaces.",
          "place": "Orange Theory",
          "target": "as written"
        },
        {
          "id": "w48-strength-3",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 55,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w48-strength-4",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: arms, core, carries",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w48-hyrox-5",
          "day": "Sat",
          "sport": "hyrox",
          "title": "Hyrox engine, gym swaps",
          "durationMin": 60,
          "detail": "Rounds of rower, dumbbell thrusters, farmer carries, walking lunges and short easy runs. No sled at this gym, so carries and lunges carry the load.",
          "place": "Community gym",
          "target": "as written"
        },
        {
          "id": "w48-rest-6",
          "day": "Sun",
          "sport": "rest",
          "title": "Rest. No soccer in taper",
          "durationMin": 0,
          "detail": "One twisted ankle ends the season. The team will forgive two Sundays.",
          "place": "Home",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 49,
      "startDate": "2027-10-04",
      "phase": "after",
      "phaseName": "Recover, then Hyrox and team sport",
      "focus": "Rest first. Then find out if Hyrox and team sport are the next flagship.",
      "targetHours": 4.8,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w49-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w49-conditioning-2",
          "day": "Tue",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The hard conditioning day. If a football tournament lands this week, this is the session it replaces.",
          "place": "Orange Theory",
          "target": "as written"
        },
        {
          "id": "w49-strength-3",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 55,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w49-strength-4",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: arms, core, carries",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w49-hyrox-5",
          "day": "Sat",
          "sport": "hyrox",
          "title": "Hyrox engine, gym swaps",
          "durationMin": 60,
          "detail": "Rounds of rower, dumbbell thrusters, farmer carries, walking lunges and short easy runs. No sled at this gym, so carries and lunges carry the load.",
          "place": "Community gym",
          "target": "as written"
        },
        {
          "id": "w49-rest-6",
          "day": "Sun",
          "sport": "rest",
          "title": "Rest. No soccer in taper",
          "durationMin": 0,
          "detail": "One twisted ankle ends the season. The team will forgive two Sundays.",
          "place": "Home",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 50,
      "startDate": "2027-10-11",
      "phase": "after",
      "phaseName": "Recover, then Hyrox and team sport",
      "focus": "Rest first. Then find out if Hyrox and team sport are the next flagship.",
      "targetHours": 4.8,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w50-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w50-conditioning-2",
          "day": "Tue",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The hard conditioning day. If a football tournament lands this week, this is the session it replaces.",
          "place": "Orange Theory",
          "target": "as written"
        },
        {
          "id": "w50-strength-3",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 55,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w50-strength-4",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: arms, core, carries",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w50-hyrox-5",
          "day": "Sat",
          "sport": "hyrox",
          "title": "Hyrox engine, gym swaps",
          "durationMin": 60,
          "detail": "Rounds of rower, dumbbell thrusters, farmer carries, walking lunges and short easy runs. No sled at this gym, so carries and lunges carry the load.",
          "place": "Community gym",
          "target": "as written"
        },
        {
          "id": "w50-rest-6",
          "day": "Sun",
          "sport": "rest",
          "title": "Rest. No soccer in taper",
          "durationMin": 0,
          "detail": "One twisted ankle ends the season. The team will forgive two Sundays.",
          "place": "Home",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 51,
      "startDate": "2027-10-18",
      "phase": "after",
      "phaseName": "Recover, then Hyrox and team sport",
      "focus": "Rest first. Then find out if Hyrox and team sport are the next flagship.",
      "targetHours": 4.8,
      "deload": false,
      "checkpoint": false,
      "locked": false,
      "sessions": [
        {
          "id": "w51-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w51-conditioning-2",
          "day": "Tue",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The hard conditioning day. If a football tournament lands this week, this is the session it replaces.",
          "place": "Orange Theory",
          "target": "as written"
        },
        {
          "id": "w51-strength-3",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 55,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w51-strength-4",
          "day": "Fri",
          "sport": "strength",
          "title": "Strength C: arms, core, carries",
          "durationMin": 50,
          "detail": "Dumbbells and bench at home cover this one. Leave a rep in the tank.",
          "place": "Home",
          "target": "as written"
        },
        {
          "id": "w51-hyrox-5",
          "day": "Sat",
          "sport": "hyrox",
          "title": "Hyrox engine, gym swaps",
          "durationMin": 60,
          "detail": "Rounds of rower, dumbbell thrusters, farmer carries, walking lunges and short easy runs. No sled at this gym, so carries and lunges carry the load.",
          "place": "Community gym",
          "target": "as written"
        },
        {
          "id": "w51-rest-6",
          "day": "Sun",
          "sport": "rest",
          "title": "Rest. No soccer in taper",
          "durationMin": 0,
          "detail": "One twisted ankle ends the season. The team will forgive two Sundays.",
          "place": "Home",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line"
      ]
    },
    {
      "week": 52,
      "startDate": "2027-10-25",
      "phase": "after",
      "phaseName": "Recover, then Hyrox and team sport",
      "focus": "Rest first. Then find out if Hyrox and team sport are the next flagship.",
      "targetHours": 4.9,
      "deload": false,
      "checkpoint": true,
      "locked": false,
      "sessions": [
        {
          "id": "w52-strength-1",
          "day": "Mon",
          "sport": "strength",
          "title": "Strength A: squat pattern, bench, row",
          "durationMin": 60,
          "detail": "Four big moves, progressive. Bar work at the community gym, or dumbbells to 85 lb and the bench at home.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w52-conditioning-2",
          "day": "Tue",
          "sport": "conditioning",
          "title": "Orange Theory",
          "durationMin": 60,
          "detail": "The hard conditioning day. If a football tournament lands this week, this is the session it replaces.",
          "place": "Orange Theory",
          "target": "as written"
        },
        {
          "id": "w52-strength-3",
          "day": "Wed",
          "sport": "strength",
          "title": "Strength B: hinge, pull, carry",
          "durationMin": 55,
          "detail": "Deadlift pattern, rows or pull-ups, then heavy carries to finish.",
          "place": "Community gym or home",
          "target": "as written"
        },
        {
          "id": "w52-test-4",
          "day": "Fri",
          "sport": "test",
          "title": "Scorecard retest session",
          "durationMin": 60,
          "detail": "Retest two or three scorecard rows at most, same protocols as baseline. Grok writes the results back through the API.",
          "place": "Community gym",
          "target": "as written"
        },
        {
          "id": "w52-hyrox-5",
          "day": "Sat",
          "sport": "hyrox",
          "title": "Hyrox engine, gym swaps",
          "durationMin": 60,
          "detail": "Rounds of rower, dumbbell thrusters, farmer carries, walking lunges and short easy runs. No sled at this gym, so carries and lunges carry the load.",
          "place": "Community gym",
          "target": "as written"
        },
        {
          "id": "w52-rest-6",
          "day": "Sun",
          "sport": "rest",
          "title": "Rest. No soccer in taper",
          "durationMin": 0,
          "detail": "One twisted ankle ends the season. The team will forgive two Sundays.",
          "place": "Home",
          "target": "as written"
        }
      ],
      "todos": [
        "Sunday log: weight trend, hours, team sport yes or no, alcohol days, one honest line",
        "Scorecard checkpoint week. Retest, then update the numbers here, not from memory"
      ]
    }
  ]
}
