Post-Workout Recovery & Muscle Soreness Tracker

Post-Workout Recovery & Muscle Soreness Tracker

Step 1: Log Your Workouts

${analysisText}

Workout Log

${workoutRows}
DateTypeIntensity

Recovery Log

${recoveryRows}
DateSorenessSleep

This report is a personal tracking tool and is not a substitute for professional medical or fitness advice. Listen to your body and consult a professional for personalized guidance.

`; document.body.appendChild(reportContainer); try { const canvas = await html2canvas(reportContainer, { scale: 2, useCORS: true, logging: false }); const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' }); const pageHeight = pdf.internal.pageSize.getHeight(); const pageWidth = pdf.internal.pageSize.getWidth(); const margin = 15; const contentWidth = pageWidth - (margin * 2); const imgProps = pdf.getImageProperties(imgData); const contentHeight = (imgProps.height * contentWidth) / imgProps.width; let heightLeft = contentHeight; let position = 0; pdf.addImage(imgData, 'PNG', margin, margin, contentWidth, contentHeight); heightLeft -= (pageHeight - (margin * 2)); while (heightLeft > 0) { position -= (pageHeight - (margin * 2)); pdf.addPage(); pdf.addImage(imgData, 'PNG', margin, position + margin, contentWidth, contentHeight); heightLeft -= (pageHeight - (margin * 2)); } pdf.save('Post-Workout-Recovery-Report.pdf'); } catch (error) { console.error("Error generating PDF:", error); alert("Sorry, there was an error creating the PDF report."); } finally { document.body.removeChild(reportContainer); } }; // --- INITIALIZATION --- // This is a placeholder for the Chart.js annotation plugin. // For this self-contained tool, we load it from CDN. // If it fails to load, annotations won't appear, but the chart will still work. if (typeof Chart.Annotation === 'undefined') { console.warn('Chart.js Annotation plugin not loaded. Annotations will not be displayed.'); } switchTab(1); addWorkoutEntry(); addRecoveryEntry(); const today = new Date().toISOString().split('T')[0]; document.querySelector('.workout-date').value = today; document.querySelector('.recovery-date').value = today; // There is no configuration tab for this tool, so this section is removed. });
Scroll to Top