Tech-Free Wind Down Routine Planner

Tech-Free Wind Down Routine Planner

Create a personalized evening routine to relax your mind and improve your sleep.

Step 1: What's your primary sleep goal?

Step 2: Which tech-free activities do you enjoy?

Select a few you'd like to include in your routine.

Step 3: How much time can you dedicate?

45 minutes

Your Personalized Wind-Down Plan

${activity.name}

${activity.duration} minutes

` + timelineHTML; }); timelineHTML += `

${formatTime(bedtimeDate)}

Bedtime

Time for sleep. Good night!

`; elements.routineResult.innerHTML = timelineHTML; routineData.routine = routine; // Save for PDF }; const downloadPDF = () => { if (typeof window.jspdf === 'undefined') { alert('Could not generate PDF. The required library is missing.'); return; } const { jsPDF } = window.jspdf; const doc = new jsPDF(); const colors = { primary: '#6d28d9', secondary: '#8b5cf6', textPrimary: '#1f2937', textSecondary: '#6b7280', bgLight: '#f5f3ff' }; doc.setFillColor(colors.primary); doc.rect(0, 0, 210, 28, 'F'); doc.setFont('helvetica', 'bold'); doc.setFontSize(20); doc.setTextColor('#FFFFFF'); doc.text('Your Tech-Free Wind-Down Routine', 105, 18, { align: 'center' }); let yPos = 40; const goalText = { fall_asleep_faster: "to help you fall asleep faster.", reduce_awakenings: "to help you sleep more soundly.", feel_rested: "to help you wake up feeling more rested." }; doc.setFontSize(12); doc.setFont('helvetica', 'normal'); doc.setTextColor(colors.textPrimary); doc.text(`Here is a personalized ${routineData.duration}-minute routine designed ${goalText[routineData.goal] || ''}`, 105, yPos, { align: 'center' }); yPos += 15; const [bedtimeHour, bedtimeMinute] = routineData.bedtime.split(':').map(Number); let bedtimeDate = new Date(); bedtimeDate.setHours(bedtimeHour, bedtimeMinute, 0, 0); let currentTime = new Date(bedtimeDate.getTime()); const reversedRoutine = [...routineData.routine].reverse(); reversedRoutine.forEach(activity => { const endTime = new Date(currentTime.getTime()); currentTime.setMinutes(currentTime.getMinutes() - activity.duration); const startTime = new Date(currentTime.getTime()); doc.setFont('helvetica', 'bold'); doc.setFontSize(12); doc.setTextColor(colors.primary); doc.text(formatTime(startTime), 20, yPos); doc.setFont('helvetica', 'bold'); doc.setFontSize(12); doc.setTextColor(colors.textPrimary); doc.text(activity.name, 50, yPos); doc.setFont('helvetica', 'normal'); doc.setFontSize(10); doc.setTextColor(colors.textSecondary); doc.text(`(${activity.duration} minutes)`, 50, yPos + 5); yPos += 15; }); doc.setFont('helvetica', 'bold'); doc.setFontSize(12); doc.setTextColor(colors.primary); doc.text(formatTime(bedtimeDate), 20, yPos); doc.setFont('helvetica', 'bold'); doc.setFontSize(12); doc.setTextColor(colors.textPrimary); doc.text("Bedtime", 50, yPos); yPos = 280; doc.setDrawColor(colors.secondary); doc.line(14, yPos, 196, yPos); doc.setFontSize(9); doc.setFont('helvetica', 'italic'); doc.setTextColor(colors.textSecondary); doc.text('Consistency is key. Try to follow this routine each night to signal to your body that it\'s time to sleep.', 105, yPos + 8, { align: 'center' }); doc.save('My_Wind-Down_Routine.pdf'); }; // --- Event Listeners --- elements.nextBtn.addEventListener('click', nextStep); elements.prevBtn.addEventListener('click', prevStep); elements.downloadPdfBtn.addEventListener('click', downloadPDF); elements.routineDuration.addEventListener('input', () => { elements.routineDurationValue.textContent = elements.routineDuration.value; }); // --- Initialization --- updateFormUI(); });
Scroll to Top