@jjlmoya/utils-sports 1.1.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 (79) hide show
  1. package/package.json +62 -0
  2. package/src/category/i18n/en.ts +108 -0
  3. package/src/category/i18n/es.ts +108 -0
  4. package/src/category/i18n/fr.ts +95 -0
  5. package/src/category/index.ts +21 -0
  6. package/src/category/seo.astro +15 -0
  7. package/src/components/PreviewNavSidebar.astro +116 -0
  8. package/src/components/PreviewToolbar.astro +143 -0
  9. package/src/data.ts +11 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +55 -0
  12. package/src/layouts/PreviewLayout.astro +117 -0
  13. package/src/pages/[locale]/[slug].astro +146 -0
  14. package/src/pages/[locale].astro +251 -0
  15. package/src/pages/index.astro +4 -0
  16. package/src/tests/faq_count.test.ts +19 -0
  17. package/src/tests/locale_completeness.test.ts +42 -0
  18. package/src/tests/mocks/astro_mock.js +2 -0
  19. package/src/tests/no_h1_in_components.test.ts +48 -0
  20. package/src/tests/schemas_fulfillment.test.ts +23 -0
  21. package/src/tests/seo_length.test.ts +22 -0
  22. package/src/tests/title_quality.test.ts +55 -0
  23. package/src/tests/tool_validation.test.ts +17 -0
  24. package/src/tool/gymTracker/bibliography.astro +15 -0
  25. package/src/tool/gymTracker/component.astro +835 -0
  26. package/src/tool/gymTracker/exercises.ts +28 -0
  27. package/src/tool/gymTracker/i18n/en.ts +225 -0
  28. package/src/tool/gymTracker/i18n/es.ts +225 -0
  29. package/src/tool/gymTracker/i18n/fr.ts +225 -0
  30. package/src/tool/gymTracker/index.ts +34 -0
  31. package/src/tool/gymTracker/logic.ts +169 -0
  32. package/src/tool/gymTracker/seo.astro +15 -0
  33. package/src/tool/gymTracker/storage.ts +43 -0
  34. package/src/tool/gymTracker/timer.ts +126 -0
  35. package/src/tool/gymTracker/types.ts +11 -0
  36. package/src/tool/gymTracker/ui-utils.ts +59 -0
  37. package/src/tool/gymTracker/ui.ts +27 -0
  38. package/src/tool/reactionTester/bibliography.astro +2 -0
  39. package/src/tool/reactionTester/component.astro +1074 -0
  40. package/src/tool/reactionTester/i18n/en.ts +144 -0
  41. package/src/tool/reactionTester/i18n/es.ts +144 -0
  42. package/src/tool/reactionTester/i18n/fr.ts +144 -0
  43. package/src/tool/reactionTester/index.ts +34 -0
  44. package/src/tool/reactionTester/seo.astro +12 -0
  45. package/src/tool/reactionTester/ui.ts +43 -0
  46. package/src/tool/scoreKeeper/bibliography.astro +14 -0
  47. package/src/tool/scoreKeeper/component.astro +858 -0
  48. package/src/tool/scoreKeeper/i18n/en.ts +207 -0
  49. package/src/tool/scoreKeeper/i18n/es.ts +207 -0
  50. package/src/tool/scoreKeeper/i18n/fr.ts +207 -0
  51. package/src/tool/scoreKeeper/index.ts +35 -0
  52. package/src/tool/scoreKeeper/logic.ts +275 -0
  53. package/src/tool/scoreKeeper/seo.astro +15 -0
  54. package/src/tool/scoreKeeper/sports.ts +70 -0
  55. package/src/tool/scoreKeeper/ui.ts +19 -0
  56. package/src/tool/tournamentBracket/bibliography.astro +10 -0
  57. package/src/tool/tournamentBracket/component.astro +1092 -0
  58. package/src/tool/tournamentBracket/i18n/en.ts +160 -0
  59. package/src/tool/tournamentBracket/i18n/es.ts +178 -0
  60. package/src/tool/tournamentBracket/i18n/fr.ts +160 -0
  61. package/src/tool/tournamentBracket/index.ts +34 -0
  62. package/src/tool/tournamentBracket/logic/active.controller.ts +106 -0
  63. package/src/tool/tournamentBracket/logic/generator.ts +71 -0
  64. package/src/tool/tournamentBracket/logic/manager.ts +165 -0
  65. package/src/tool/tournamentBracket/logic/setup.controller.ts +84 -0
  66. package/src/tool/tournamentBracket/logic/sharing.ts +81 -0
  67. package/src/tool/tournamentBracket/logic/storage.ts +56 -0
  68. package/src/tool/tournamentBracket/models.ts +34 -0
  69. package/src/tool/tournamentBracket/seo.astro +12 -0
  70. package/src/tool/tournamentBracket/tournament.controller.ts +65 -0
  71. package/src/tool/tournamentBracket/tournament.renderer.ts +45 -0
  72. package/src/tool/tournamentBracket/ui/bracket-desktop.ts +143 -0
  73. package/src/tool/tournamentBracket/ui/bracket-mobile.ts +82 -0
  74. package/src/tool/tournamentBracket/ui/mediator.ts +96 -0
  75. package/src/tool/tournamentBracket/ui/navigator.ts +84 -0
  76. package/src/tool/tournamentBracket/ui/setup.ts +120 -0
  77. package/src/tool/tournamentBracket/ui.ts +42 -0
  78. package/src/tools.ts +13 -0
  79. package/src/types.ts +72 -0
@@ -0,0 +1,28 @@
1
+ export interface Exercise {
2
+ id: string;
3
+ nameKey: string;
4
+ categoryKey: 'push' | 'pull' | 'glute';
5
+ }
6
+
7
+ export const defaultExercises: Exercise[] = [
8
+ { id: 'bench-press', nameKey: 'benchPress', categoryKey: 'push' },
9
+ { id: 'overhead-press', nameKey: 'overheadPress', categoryKey: 'push' },
10
+ { id: 'push-press', nameKey: 'pushPress', categoryKey: 'push' },
11
+ { id: 'incline-db-press', nameKey: 'inclineDbPress', categoryKey: 'push' },
12
+ { id: 'dips-triceps', nameKey: 'dipsTriceps', categoryKey: 'push' },
13
+ { id: 'triceps-extensions', nameKey: 'tricepsExtensions', categoryKey: 'push' },
14
+
15
+ { id: 'pull-up', nameKey: 'pullUp', categoryKey: 'pull' },
16
+ { id: 'barbell-row', nameKey: 'barbellRow', categoryKey: 'pull' },
17
+ { id: 'lat-pulldown', nameKey: 'latPulldown', categoryKey: 'pull' },
18
+ { id: 'db-row', nameKey: 'dbRow', categoryKey: 'pull' },
19
+ { id: 'face-pulls', nameKey: 'facePulls', categoryKey: 'pull' },
20
+ { id: 'biceps-curl', nameKey: 'bicepsCurl', categoryKey: 'pull' },
21
+
22
+ { id: 'hip-thrust', nameKey: 'hipThrust', categoryKey: 'glute' },
23
+ { id: 'rdl', nameKey: 'rdl', categoryKey: 'glute' },
24
+ { id: 'lunges', nameKey: 'lunges', categoryKey: 'glute' },
25
+ { id: 'glute-kick', nameKey: 'gluteKick', categoryKey: 'glute' },
26
+ { id: 'hip-abduction', nameKey: 'hipAbduction', categoryKey: 'glute' },
27
+ { id: 'step-up', nameKey: 'stepUp', categoryKey: 'glute' },
28
+ ];
@@ -0,0 +1,225 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { GymTrackerUI } from '../ui';
4
+
5
+ const slug = 'gym-workout-tracker';
6
+ const title = 'Gym Workout Tracker: Progress Charts and Strength Log';
7
+ const description =
8
+ 'Log your lifts, select exercises, and visualize your progress with strength charts. Optimize your progressive overload in the gym.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'What is the purpose of workout tracking?',
13
+ answer:
14
+ 'It serves to apply progressive overload scientifically. By knowing exactly how much you lifted in the previous session, you can try to beat that mark, guaranteeing muscle growth and long-term strength gains.',
15
+ },
16
+ {
17
+ question: 'What data should I record?',
18
+ answer:
19
+ 'The most important thing is the maximum weight (top set) you achieved with good form for a set number of repetitions. Our tool focuses on recording the weight per session to generate your progress chart.',
20
+ },
21
+ {
22
+ question: 'How are the charts interpreted?',
23
+ answer:
24
+ 'An upward line indicates you are progressing. A flat line (plateau) suggests you need to adjust your volume, intensity, or recovery. A persistent downward line may be a sign of overtraining.',
25
+ },
26
+ {
27
+ question: 'Where is my data stored?',
28
+ answer:
29
+ 'Data is stored locally in your browser (Local Storage). This means your privacy is total and you do not need to create an account, but if you clear browser data, the history will be lost.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Select the exercise',
36
+ text: 'Choose from fundamental lifts like Squat, Bench Press, or Deadlift in the dropdown menu.',
37
+ },
38
+ {
39
+ name: 'Enter the weight',
40
+ text: 'After your heaviest set, enter the kilograms/pounds lifted in the corresponding field.',
41
+ },
42
+ {
43
+ name: 'Press Add',
44
+ text: 'Save your mark. The system will automatically update your history and progress chart.',
45
+ },
46
+ {
47
+ name: 'Analyze your evolution',
48
+ text: 'Consult the chart periodically to identify plateaus and motivate yourself by seeing your real growth in strength.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'HealthApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
83
+ inLanguage: 'en',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<GymTrackerUI & Record<string, string>> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faqTitle: 'Frequently Asked Questions',
91
+ faq: faqData,
92
+ bibliographyTitle: 'Scientific References',
93
+ bibliography: [
94
+ {
95
+ name: 'Journal of Strength and Conditioning Research - Progressive Overload Study',
96
+ url: 'https://journals.lww.com/nsca-jscr/Fulltext/2010/10000/The_Mechanisms_of_Muscle_Hypertrophy_and_Their.40.aspx',
97
+ },
98
+ {
99
+ name: 'National Academy of Sports Medicine - Progressive Overload Explained',
100
+ url: 'https://blog.nasm.org/progressive-overload-explained',
101
+ },
102
+ {
103
+ name: 'Science of Strength - Data Tracking in Resistance Training',
104
+ url: 'https://pubmed.ncbi.nlm.nih.gov/30558493/',
105
+ },
106
+ ],
107
+ howTo: howToData,
108
+ schemas: [faqSchema, howToSchema, appSchema],
109
+ seo: [
110
+ {
111
+ type: 'title',
112
+ text: 'Gym Workout Tracking: The Key to Real Progress',
113
+ level: 2,
114
+ },
115
+ {
116
+ type: 'paragraph',
117
+ html: 'In the world of fitness and bodybuilding, there is a fundamental principle that separates those who get amazing results from those who plateau quickly: <strong>progressive overload</strong>. However, it is impossible to apply this principle effectively if you do not keep a detailed record of your lifts. In this guide, we will explore why tracking your workout is vital, how to use our <strong>gym workout tracker</strong> to maximize your gains, and the scientific foundations that support this practice.',
118
+ },
119
+ {
120
+ type: 'title',
121
+ text: 'What is Progressive Overload?',
122
+ level: 3,
123
+ },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'Progressive overload is the gradual increase of stress applied to the body during physical exercise. For a muscle to grow or strengthen, it must be subjected to a stimulus greater than what it is accustomed to. If you go to the gym and always lift the same weight, with the same repetitions and the same rest time, your body will have no biological reason to adapt and grow.',
127
+ },
128
+ {
129
+ type: 'list',
130
+ items: [
131
+ 'Weight increase: Lifting more weight than the previous session.',
132
+ 'Repetition increase: Doing more reps with the same weight.',
133
+ 'Volume increase: Performing more total sets per muscle group.',
134
+ 'Rest reduction: Doing the same work in less time.',
135
+ 'Form improvement: Performing the exercise with superior control and greater range of motion.',
136
+ ],
137
+ },
138
+ {
139
+ type: 'title',
140
+ text: 'Why Manual Logging Superior to Memory',
141
+ level: 3,
142
+ },
143
+ {
144
+ type: 'paragraph',
145
+ html: 'Many athletes make the mistake of trusting their memory to remember how much they lifted last week. However, in a typical workout that includes between 5 and 10 different exercises, it is very easy to forget if you did 180 lbs or 185 lbs on the press, or if you managed 10 reps or 12. This lack of precision leads to mediocrity.',
146
+ },
147
+ {
148
+ type: 'tip',
149
+ title: 'The Power of Visualizing Progress',
150
+ html: 'Seeing an upward line on a chart gives you the boost needed to try that extra rep that marks the difference between stagnation and consistent muscle growth.',
151
+ },
152
+ {
153
+ type: 'title',
154
+ text: 'Fundamental Exercises for Tracking',
155
+ level: 3,
156
+ },
157
+ {
158
+ type: 'paragraph',
159
+ html: 'While all exercises are valuable, certain compound lifts offer the best view of your overall strength and physical development. These are the ones you should prioritize in your tracking: <strong>Bench Press</strong> for horizontal push, <strong>Overhead Press</strong> for vertical push, <strong>Pull-ups</strong> for traction, and <strong>Hip Thrust</strong> for glutes.',
160
+ },
161
+ {
162
+ type: 'title',
163
+ text: 'How to Analyze Your Progress Charts',
164
+ level: 3,
165
+ },
166
+ {
167
+ type: 'paragraph',
168
+ html: 'Once you have recorded several workouts, you will start to see patterns: a <strong>constant upward line</strong> indicates the right path, a <strong>plateau</strong> suggests you need to adjust your volume or rest, and a <strong>downward trend</strong> can be a sign of accumulated fatigue.',
169
+ },
170
+ {
171
+ type: 'title',
172
+ text: 'The Psychology of Success in the Gym',
173
+ level: 3,
174
+ },
175
+ {
176
+ type: 'paragraph',
177
+ html: 'Training is as much a mental challenge as a physical one. By using a visual tool that shows you that today you are 1% stronger than fifteen days ago, you are feeding your dopamine reward system. This creates a positive feedback loop that turns training into a sustainable habit.',
178
+ },
179
+ ],
180
+ ui: {
181
+ exerciseLabel: 'Exercise',
182
+ pushCategory: 'Push',
183
+ pullCategory: 'Pull',
184
+ gluteCategory: 'Glute',
185
+ customExerciseCategory: 'Custom',
186
+ addCustomExerciseTitle: 'Add custom exercise',
187
+ newExerciseLabel: 'New exercise',
188
+ exercisePlaceholder: 'Exercise name...',
189
+ addBtn: 'Add',
190
+ registerWeightLabel: 'Log Weight',
191
+ weightPlaceholder: '00.0',
192
+ startBtn: 'Start',
193
+ resetBtn: 'Reset',
194
+ okBtn: 'OK',
195
+ noData: 'No data',
196
+ recordLabel: 'Record',
197
+ lastLabel: 'Last',
198
+ historyTitle: 'Logs',
199
+ exportBtn: 'Export',
200
+ confirmDeleteTitle: 'Clear history?',
201
+ confirmDeleteText: 'This action cannot be undone. All logs for the selected exercise will be deleted.',
202
+ deleteBtn: 'Delete',
203
+ cancelBtn: 'Cancel',
204
+ units: 'lbs',
205
+
206
+ benchPress: 'Bench Press',
207
+ overheadPress: 'Overhead Press',
208
+ pushPress: 'Push Press',
209
+ inclineDbPress: 'Incline DB Press',
210
+ dipsTriceps: 'Triceps Dips',
211
+ tricepsExtensions: 'Cable Triceps Extensions',
212
+ pullUp: 'Pull-ups',
213
+ barbellRow: 'Barbell Row',
214
+ latPulldown: 'Lat Pulldown',
215
+ dbRow: 'Dumbbell Row',
216
+ facePulls: 'Face Pulls',
217
+ bicepsCurl: 'Barbell Biceps Curl',
218
+ hipThrust: 'Hip Thrust',
219
+ rdl: 'Romanian Deadlift',
220
+ lunges: 'Lunges',
221
+ gluteKick: 'Cable Glute Kickback',
222
+ hipAbduction: 'Machine Hip Abduction',
223
+ stepUp: 'Step Up',
224
+ },
225
+ };
@@ -0,0 +1,225 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { GymTrackerUI } from '../ui';
4
+
5
+ const slug = 'seguimiento-entrenamiento-gym';
6
+ const title = 'Seguimiento de Entrenamiento Gym: Gráficas de Progreso y Fuerza';
7
+ const description =
8
+ 'Registra tus levantamientos, selecciona el ejercicio y visualiza tu avance con gráficas de fuerza. Optimiza tu sobrecarga progresiva en el gimnasio.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '¿Para qué sirve el seguimiento de entrenamiento?',
13
+ answer:
14
+ 'Sirve para aplicar la sobrecarga progresiva de manera científica. Al saber exactamente cuánto levantaste la sesión anterior, puedes intentar superar esa marca, lo que garantiza el crecimiento muscular y la ganancia de fuerza a largo plazo.',
15
+ },
16
+ {
17
+ question: '¿Qué datos debo registrar?',
18
+ answer:
19
+ 'Lo más importante es el peso máximo (top set) que has logrado mover con buena técnica para un número determinado de repeticiones. Nuestra herramienta se enfoca en registrar el peso por sesión para generar tu gráfica de progreso.',
20
+ },
21
+ {
22
+ question: '¿Cómo se interpretan las gráficas?',
23
+ answer:
24
+ 'Una línea ascendente indica que estás progresando. Una línea plana (meseta) sugiere que necesitas ajustar tu volumen, intensidad o recuperación. Una línea descendente persistente puede ser señal de sobreentrenamiento.',
25
+ },
26
+ {
27
+ question: '¿Dónde se guardan mis datos?',
28
+ answer:
29
+ 'Los datos se guardan de forma local en tu navegador (Local Storage). Esto significa que tu privacidad es total y no necesitas crear una cuenta, pero si borras los datos del navegador, el historial se perderá.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Selecciona el ejercicio',
36
+ text: 'Elige entre los levantamientos fundamentales como Sentadilla, Press de Banca o Peso Muerto en el menú desplegable.',
37
+ },
38
+ {
39
+ name: 'Introduce el peso',
40
+ text: 'Después de tu serie más pesada, introduce los kilogramos levantados en el campo correspondiente.',
41
+ },
42
+ {
43
+ name: 'Pulsa Añadir',
44
+ text: 'Guarda tu marca. El sistema actualizará automáticamente tu historial y la gráfica de progreso.',
45
+ },
46
+ {
47
+ name: 'Analiza tu evolución',
48
+ text: 'Consulta la gráfica periódicamente para identificar mesetas y motivarte al ver tu crecimiento real en fuerza.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'HealthApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
83
+ inLanguage: 'es',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<GymTrackerUI & Record<string, string>> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faqTitle: 'Preguntas Frecuentes',
91
+ faq: faqData,
92
+ bibliographyTitle: 'Referencias Científicas',
93
+ bibliography: [
94
+ {
95
+ name: 'Journal of Strength and Conditioning Research - Progressive Overload Study',
96
+ url: 'https://journals.lww.com/nsca-jscr/Fulltext/2010/10000/The_Mechanisms_of_Muscle_Hypertrophy_and_Their.40.aspx',
97
+ },
98
+ {
99
+ name: 'National Academy of Sports Medicine - Progressive Overload Explained',
100
+ url: 'https://blog.nasm.org/progressive-overload-explained',
101
+ },
102
+ {
103
+ name: 'Science of Strength - Data Tracking in Resistance Training',
104
+ url: 'https://pubmed.ncbi.nlm.nih.gov/30558493/',
105
+ },
106
+ ],
107
+ howTo: howToData,
108
+ schemas: [faqSchema, howToSchema, appSchema],
109
+ seo: [
110
+ {
111
+ type: 'title',
112
+ text: 'Seguimiento de Entrenamiento en el Gimnasio: La Clave para el Progreso Real',
113
+ level: 2,
114
+ },
115
+ {
116
+ type: 'paragraph',
117
+ html: 'En el mundo del fitness y el culturismo, existe un principio fundamental que separa a quienes obtienen resultados asombrosos de quienes se estancan rápidamente: la <strong>sobrecarga progresiva</strong>. Sin embargo, es imposible aplicar este principio de manera efectiva si no llevas un registro detallado de tus levantamientos. En esta guía, exploraremos por qué el seguimiento de tu entrenamiento es vital, cómo utilizar nuestra herramienta de <strong>seguimiento de entrenamiento gym</strong> para maximizar tus ganancias y los fundamentos científicos que respaldan esta práctica.',
118
+ },
119
+ {
120
+ type: 'title',
121
+ text: '¿Qué es la Sobrecarga Progresiva?',
122
+ level: 3,
123
+ },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'La sobrecarga progresiva es el aumento gradual del estrés aplicado al cuerpo durante el ejercicio físico. Para que un músculo crezca o se fortalezca, debe ser sometido a un estímulo mayor al que está acostumbrado. Si vas al gimnasio y levantas siempre el mismo peso, con las mismas repeticiones y el mismo tiempo de descanso, tu cuerpo no tendrá ninguna razón biológica para adaptarse y crecer.',
127
+ },
128
+ {
129
+ type: 'list',
130
+ items: [
131
+ 'Aumento del peso: Levantar más kilos que la sesión anterior.',
132
+ 'Aumento de repeticiones: Hacer más repeticiones con el mismo peso.',
133
+ 'Aumento del volumen: Realizar más series totales por grupo muscular.',
134
+ 'Reducción del descanso: Hacer el mismo trabajo en menos tiempo.',
135
+ 'Mejora de la técnica: Realizar el ejercicio con control superior y mayor rango de movimiento.',
136
+ ],
137
+ },
138
+ {
139
+ type: 'title',
140
+ text: 'Por qué el Registro Manual es Superior a la Memoria',
141
+ level: 3,
142
+ },
143
+ {
144
+ type: 'paragraph',
145
+ html: 'Muchos deportistas cometen el error de confiar en su memoria para recordar cuánto levantaron la semana pasada. Sin embargo, en un entrenamiento típico que incluye entre 5 y 10 ejercicios diferentes, es muy fácil olvidar si hiciste 80 kg o 82.5 kg en la prensa, o si lograste 10 repeticiones o 12. Esta falta de precisión conduce a la mediocridad.',
146
+ },
147
+ {
148
+ type: 'tip',
149
+ title: 'El Poder de Visualizar el Progreso',
150
+ html: 'Ver una línea ascendente en un gráfico te da el impulso necesario para intentar esa repetición extra que marca la diferencia entre estancamiento y crecimiento muscular consistente.',
151
+ },
152
+ {
153
+ type: 'title',
154
+ text: 'Los Ejercicios Fundamentales para el Seguimiento',
155
+ level: 3,
156
+ },
157
+ {
158
+ type: 'paragraph',
159
+ html: 'Si bien todos los ejercicios son valiosos, hay ciertos levantamientos compuestos que ofrecen la mejor visión de tu fuerza general y desarrollo físico. Estos son los que deberías priorizar en tu seguimiento: <strong>Press de Banca</strong> para empuje horizontal, <strong>Press Militar</strong> para empuje vertical, <strong>Dominadas</strong> para tracción y <strong>Hip Thrust</strong> para glúteos.',
160
+ },
161
+ {
162
+ type: 'title',
163
+ text: 'Cómo Analizar tus Gráficas de Progreso',
164
+ level: 3,
165
+ },
166
+ {
167
+ type: 'paragraph',
168
+ html: 'Una vez que hayas registrado varios entrenamientos, empezarás a ver patrones: una <strong>línea ascendente constante</strong> indica el camino correcto, una <strong>meseta</strong> sugiere que necesitas ajustar tu volumen o descanso, y una <strong>tendencia a la baja</strong> puede ser señal de fatiga acumulada.',
169
+ },
170
+ {
171
+ type: 'title',
172
+ text: 'La Psicología del Éxito en el Gimnasio',
173
+ level: 3,
174
+ },
175
+ {
176
+ type: 'paragraph',
177
+ html: 'Entrenar es tanto un reto mental como físico. Al usar una herramienta visual que te muestra que hoy eres un 1% más fuerte que hace quince días, estás alimentando tu sistema de recompensa de dopamina. Esto crea un bucle de retroalimentación positiva que convierte el entrenamiento en un hábito sostenible.',
178
+ },
179
+ ],
180
+ ui: {
181
+ exerciseLabel: 'Ejercicio',
182
+ pushCategory: 'Empuje',
183
+ pullCategory: 'Tracción',
184
+ gluteCategory: 'Glúteo',
185
+ customExerciseCategory: 'Personalizados',
186
+ addCustomExerciseTitle: 'Agregar ejercicio personalizado',
187
+ newExerciseLabel: 'Nuevo ejercicio',
188
+ exercisePlaceholder: 'Nombre del ejercicio...',
189
+ addBtn: 'Añadir',
190
+ registerWeightLabel: 'Registrar Peso (KG)',
191
+ weightPlaceholder: '00.0',
192
+ startBtn: 'Empezar',
193
+ resetBtn: 'Reiniciar',
194
+ okBtn: 'OK',
195
+ noData: 'Sin datos',
196
+ recordLabel: 'Récord',
197
+ lastLabel: 'Último',
198
+ historyTitle: 'Logs',
199
+ exportBtn: 'Exportar',
200
+ confirmDeleteTitle: '¿Borrar historial?',
201
+ confirmDeleteText: 'Esta acción no se puede deshacer. Se eliminarán todos los registros del ejercicio seleccionado.',
202
+ deleteBtn: 'Borrar',
203
+ cancelBtn: 'Cancelar',
204
+ units: 'kg',
205
+
206
+ benchPress: 'Press de Banca',
207
+ overheadPress: 'Press Militar',
208
+ pushPress: 'Push Press',
209
+ inclineDbPress: 'Press Inclinado con Mancuernas',
210
+ dipsTriceps: 'Fondos de Tríceps',
211
+ tricepsExtensions: 'Extensiones de Tríceps en Polea',
212
+ pullUp: 'Dominadas',
213
+ barbellRow: 'Remo con Barra',
214
+ latPulldown: 'Jalón al Pecho',
215
+ dbRow: 'Remo con Mancuerna',
216
+ facePulls: 'Face Pulls',
217
+ bicepsCurl: 'Curl de Bíceps con Barra',
218
+ hipThrust: 'Hip Thrust',
219
+ rdl: 'Peso Muerto Rumano',
220
+ lunges: 'Zancadas',
221
+ gluteKick: 'Patada de Glúteo en Polea',
222
+ hipAbduction: 'Abducción de Cadera en Máquina',
223
+ stepUp: 'Step Up',
224
+ },
225
+ };