endurance-coach 0.1.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +3 -0
  2. package/dist/cli.js +318 -35
  3. package/dist/expander/expander.d.ts +20 -0
  4. package/dist/expander/expander.js +339 -0
  5. package/dist/expander/index.d.ts +8 -0
  6. package/dist/expander/index.js +9 -0
  7. package/dist/expander/types.d.ts +169 -0
  8. package/dist/expander/types.js +6 -0
  9. package/dist/expander/zones.d.ts +50 -0
  10. package/dist/expander/zones.js +159 -0
  11. package/dist/index.d.ts +4 -0
  12. package/dist/index.js +9 -1
  13. package/dist/schema/compact-plan.d.ts +175 -0
  14. package/dist/schema/compact-plan.js +64 -0
  15. package/dist/schema/compact-plan.schema.d.ts +277 -0
  16. package/dist/schema/compact-plan.schema.js +205 -0
  17. package/dist/templates/index.d.ts +10 -0
  18. package/dist/templates/index.js +13 -0
  19. package/dist/templates/interpolate.d.ts +51 -0
  20. package/dist/templates/interpolate.js +204 -0
  21. package/dist/templates/loader.d.ts +19 -0
  22. package/dist/templates/loader.js +129 -0
  23. package/dist/templates/template.schema.d.ts +401 -0
  24. package/dist/templates/template.schema.js +101 -0
  25. package/dist/templates/template.types.d.ts +155 -0
  26. package/dist/templates/template.types.js +7 -0
  27. package/dist/templates/yaml-parser.d.ts +15 -0
  28. package/dist/templates/yaml-parser.js +18 -0
  29. package/package.json +2 -1
  30. package/templates/bike/CLAUDE.md +7 -0
  31. package/templates/bike/easy.yaml +38 -0
  32. package/templates/bike/endurance.yaml +42 -0
  33. package/templates/bike/hills.yaml +80 -0
  34. package/templates/bike/overunders.yaml +81 -0
  35. package/templates/bike/rest.yaml +16 -0
  36. package/templates/bike/sweetspot.yaml +80 -0
  37. package/templates/bike/tempo.yaml +79 -0
  38. package/templates/bike/threshold.yaml +83 -0
  39. package/templates/bike/vo2max.yaml +84 -0
  40. package/templates/brick/CLAUDE.md +7 -0
  41. package/templates/brick/halfironman.yaml +72 -0
  42. package/templates/brick/ironman.yaml +72 -0
  43. package/templates/brick/olympic.yaml +70 -0
  44. package/templates/brick/sprint.yaml +70 -0
  45. package/templates/plan-viewer.html +22 -22
  46. package/templates/run/CLAUDE.md +7 -0
  47. package/templates/run/easy.yaml +36 -0
  48. package/templates/run/fartlek.yaml +40 -0
  49. package/templates/run/hills.yaml +36 -0
  50. package/templates/run/intervals.1k.yaml +63 -0
  51. package/templates/run/intervals.400.yaml +63 -0
  52. package/templates/run/intervals.800.yaml +63 -0
  53. package/templates/run/intervals.mile.yaml +64 -0
  54. package/templates/run/long.yaml +41 -0
  55. package/templates/run/progression.yaml +49 -0
  56. package/templates/run/race.5k.yaml +36 -0
  57. package/templates/run/recovery.yaml +36 -0
  58. package/templates/run/rest.yaml +16 -0
  59. package/templates/run/strides.yaml +49 -0
  60. package/templates/run/tempo.yaml +56 -0
  61. package/templates/run/threshold.yaml +56 -0
  62. package/templates/strength/CLAUDE.md +7 -0
  63. package/templates/strength/core.yaml +56 -0
  64. package/templates/strength/foundation.yaml +65 -0
  65. package/templates/strength/full.yaml +73 -0
  66. package/templates/strength/maintenance.yaml +62 -0
  67. package/templates/swim/CLAUDE.md +7 -0
  68. package/templates/swim/aerobic.yaml +67 -0
  69. package/templates/swim/easy.yaml +51 -0
  70. package/templates/swim/openwater.yaml +60 -0
  71. package/templates/swim/rest.yaml +16 -0
  72. package/templates/swim/technique.yaml +67 -0
  73. package/templates/swim/threshold.yaml +75 -0
  74. package/templates/swim/vo2max.yaml +88 -0
@@ -0,0 +1,72 @@
1
+ id: brick.ironman
2
+ name: Ironman Brick
3
+ sport: brick
4
+ type: brick
5
+ category: race
6
+
7
+ params:
8
+ bike_hrs:
9
+ type: number
10
+ required: true
11
+ default: 5
12
+ min: 4
13
+ max: 6
14
+ description: Bike duration in hours
15
+ run_mins:
16
+ type: int
17
+ required: true
18
+ default: 60
19
+ min: 30
20
+ max: 75
21
+ description: Run duration in minutes
22
+
23
+ structure:
24
+ main:
25
+ - type: work
26
+ name: Bike - Endurance
27
+ duration: "${(bike_hrs - 1.5) * 60}min"
28
+ power: "56-70% FTP"
29
+ intensity: Zone 2
30
+ - type: work
31
+ name: Bike - Race simulation
32
+ duration: 90min
33
+ power: "65-75% FTP"
34
+ intensity: Zone 2
35
+ description: "Final 90min at race effort"
36
+ - type: rest
37
+ name: T2
38
+ duration: 5min
39
+ description: "Transition - change clothes if needed"
40
+ - type: work
41
+ name: Run - Easy
42
+ duration: "${run_mins}min"
43
+ pace: "${paces.easy} or easier"
44
+ intensity: Zone 1-2
45
+
46
+ humanReadable: |
47
+ IRONMAN BRICK
48
+
49
+ BIKE: ${bike_hrs} hours total
50
+ - ${bike_hrs - 1.5} hr Zone 2 endurance
51
+ - 90 min @ race effort (65-75% FTP)
52
+
53
+ T2: Full transition practice (may include clothes change)
54
+
55
+ RUN: ${run_mins} min easy
56
+ Pace: ${paces.easy} or easier
57
+
58
+ Purpose: Pacing and nutrition practice for Ironman.
59
+ This is NOT about going hard - it's about:
60
+ - Practicing race nutrition (80g carbs/hour)
61
+ - Learning your sustainable bike power
62
+ - Running on extremely fatigued legs
63
+
64
+ You should feel tired but controlled.
65
+ If you can't run after - bike was too hard.
66
+
67
+ Total: ~${bike_hrs * 60 + run_mins + 5} min
68
+
69
+ estimatedDuration: "${bike_hrs * 60 + run_mins + 5}"
70
+ targetZone: Z2
71
+ rpe: "5"
72
+ notes: Ironman race simulation - pacing and nutrition
@@ -0,0 +1,70 @@
1
+ id: brick.olympic
2
+ name: Olympic Brick
3
+ sport: brick
4
+ type: brick
5
+ category: race
6
+
7
+ params:
8
+ bike_mins:
9
+ type: int
10
+ required: true
11
+ default: 90
12
+ min: 60
13
+ max: 120
14
+ description: Bike duration in minutes
15
+ run_mins:
16
+ type: int
17
+ required: true
18
+ default: 30
19
+ min: 15
20
+ max: 45
21
+ description: Run duration in minutes
22
+ race_effort_mins:
23
+ type: int
24
+ default: 30
25
+ description: Minutes at race effort on bike
26
+
27
+ structure:
28
+ main:
29
+ - type: work
30
+ name: Bike - Warmup/Endurance
31
+ duration: "${bike_mins - race_effort_mins}min"
32
+ power: "56-75% FTP"
33
+ intensity: Zone 2
34
+ - type: work
35
+ name: Bike - Race effort
36
+ duration: "${race_effort_mins}min"
37
+ power: "76-90% FTP"
38
+ intensity: Zone 3-4
39
+ - type: rest
40
+ name: T2
41
+ duration: 2min
42
+ description: "Quick transition practice"
43
+ - type: work
44
+ name: Run - Race pace
45
+ duration: "${run_mins}min"
46
+ pace: "${paces.tempo} to ${paces.threshold}"
47
+ intensity: Zone 3-4
48
+
49
+ humanReadable: |
50
+ OLYMPIC BRICK
51
+
52
+ BIKE: ${bike_mins} min total
53
+ - ${bike_mins - race_effort_mins} min Zone 2 warmup/endurance
54
+ - ${race_effort_mins} min @ race effort (76-90% FTP)
55
+
56
+ T2: Quick transition practice
57
+
58
+ RUN: ${run_mins} min @ race pace
59
+ Pace: ${paces.tempo} to ${paces.threshold}
60
+
61
+ Purpose: Pace calibration for Olympic distance.
62
+ Practice race nutrition during bike portion.
63
+ Run should feel "comfortably hard."
64
+
65
+ Total: ~${bike_mins + run_mins + 2} min
66
+
67
+ estimatedDuration: "${bike_mins + run_mins + 2}"
68
+ targetZone: Z3-Z4
69
+ rpe: "6-7"
70
+ notes: Olympic triathlon race simulation and pacing
@@ -0,0 +1,70 @@
1
+ id: brick.sprint
2
+ name: Sprint Brick
3
+ sport: brick
4
+ type: brick
5
+ category: race
6
+
7
+ params:
8
+ bike_mins:
9
+ type: int
10
+ required: true
11
+ default: 45
12
+ min: 30
13
+ max: 60
14
+ description: Bike duration in minutes
15
+ run_mins:
16
+ type: int
17
+ required: true
18
+ default: 15
19
+ min: 10
20
+ max: 25
21
+ description: Run duration in minutes
22
+ race_effort_mins:
23
+ type: int
24
+ default: 10
25
+ description: Minutes at race effort on bike
26
+
27
+ structure:
28
+ main:
29
+ - type: work
30
+ name: Bike - Warmup
31
+ duration: "${bike_mins - race_effort_mins}min"
32
+ power: "56-75% FTP"
33
+ intensity: Zone 2
34
+ - type: work
35
+ name: Bike - Race effort
36
+ duration: "${race_effort_mins}min"
37
+ power: "Race pace"
38
+ intensity: Zone 4
39
+ - type: rest
40
+ name: T2
41
+ duration: 2min
42
+ description: "Quick transition practice"
43
+ - type: work
44
+ name: Run - Race pace
45
+ duration: "${run_mins}min"
46
+ pace: "${paces.threshold}"
47
+ intensity: Zone 4
48
+
49
+ humanReadable: |
50
+ SPRINT BRICK
51
+
52
+ BIKE: ${bike_mins} min total
53
+ - ${bike_mins - race_effort_mins} min Zone 2
54
+ - ${race_effort_mins} min @ race effort (Zone 4)
55
+
56
+ T2: Quick transition - practice speed!
57
+
58
+ RUN: ${run_mins} min @ race pace
59
+ Pace: ${paces.threshold}
60
+
61
+ Purpose: Practice running off the bike at race pace.
62
+ Legs will feel heavy initially - that's normal.
63
+ Focus on quick cadence to find your run legs.
64
+
65
+ Total: ~${bike_mins + run_mins + 2} min
66
+
67
+ estimatedDuration: "${bike_mins + run_mins + 2}"
68
+ targetZone: Z4
69
+ rpe: "7"
70
+ notes: Sprint triathlon race simulation