Daily Wellness & Productivity Log
Weekly Overview & Insights
Overview for Week:
Weekly Averages (1-5 Scale):
Average Productivity Level: N/A
Average Scores Visualized:
Reflections on Your Week:
Daily Logs for the Week:
No logs found for this week.
Select a week and click "Analyze Week" to view your overview.
Log for ${new Date(dateKey+'T00:00:00Z').toLocaleDateString()} loaded. You can edit and re-save.
`; } else { mpbTodayLogDisplayEl.innerHTML = `No log for ${new Date(dateKey+'T00:00:00Z').toLocaleDateString()} yet. Fill the form to save.
`; } if(mpbDailyLogSavedMessageEl) mpbDailyLogSavedMessageEl.style.display = 'none'; } function mpbHandleDailyLogSubmit(e) { e.preventDefault(); const dateKey = mpbLogDateEl.value; if (!dateKey) { alert("Please select a date."); return; } const wellnessScores = {}; mpbWellnessFactorDefs.forEach(factor => { wellnessScores[factor.id] = parseInt(document.getElementById(`factor-${factor.id}`).value); }); mpbDailyLogs[dateKey] = { date: dateKey, wellnessScores: wellnessScores, productivityLevel: parseInt(mpbProductivityLevelEl.value), notes: mpbContextualNotesEl.value.trim() }; mpbSaveDailyLogs(); if(mpbDailyLogSavedMessageEl){ mpbDailyLogSavedMessageEl.textContent = `Log for ${new Date(dateKey+'T00:00:00Z').toLocaleDateString()} saved!`; mpbDailyLogSavedMessageEl.style.display = 'block'; setTimeout(() => { if(mpbDailyLogSavedMessageEl) mpbDailyLogSavedMessageEl.style.display = 'none'; }, 3000); } mpbLoadLogForDate(); } function mpbGetWeekDates(selectedDateStr) { const d = new Date(selectedDateStr + 'T00:00:00'); d.setHours(0,0,0,0); const day = d.getDay(); const diffToMonday = day === 0 ? -6 : 1 - day; const monday = new Date(d); monday.setDate(d.getDate() + diffToMonday); const sunday = new Date(monday); sunday.setDate(monday.getDate() + 6); return { start: monday, end: sunday }; } function mpbGenerateWeeklyOverview() { if (!mpbReviewWeekDateEl || !mpbSelectedReviewWeekDisplayEl || !mpbWeeklyOverviewAreaEl || !mpbLogHistoryTableBodyEl || !mpbNoLogsForWeekMessageEl || !mpbNoOverviewDataMessageEl || !mpbWeeklyAveragesDisplayEl || !mpbAvgProdValueEl || !mpbCorrelationInsightsEl || !mpbDownloadReportBtnEl || !mpbFactorAverageScoresChartEl) return; const selectedDateStr = mpbReviewWeekDateEl.value; if (!selectedDateStr) { mpbNoOverviewDataMessageEl.textContent = "Please select a date for the week to review."; mpbNoOverviewDataMessageEl.style.display = 'block'; mpbWeeklyOverviewAreaEl.style.display = 'none'; return; } const weekDates = mpbGetWeekDates(selectedDateStr); mpbSelectedReviewWeekDisplayEl.textContent = `${weekDates.start.toLocaleDateString()} - ${weekDates.end.toLocaleDateString()}`; const logsForWeek = []; let currentDateIter = new Date(weekDates.start); while (currentDateIter <= weekDates.end) { const dateKey = currentDateIter.toISOString().slice(0,10); if (mpbDailyLogs[dateKey]) { logsForWeek.push(mpbDailyLogs[dateKey]); } currentDateIter.setDate(currentDateIter.getDate() + 1); } while(mpbLogHistoryTableBodyEl.firstChild) mpbLogHistoryTableBodyEl.removeChild(mpbLogHistoryTableBodyEl.firstChild); if(mpbLogHistoryTableHeaderRowEl) { mpbLogHistoryTableHeaderRowEl.innerHTML = ''; let th = mpbLogHistoryTableHeaderRowEl.insertCell(); th.textContent = "Date"; mpbWellnessFactorDefs.forEach(f => { th = mpbLogHistoryTableHeaderRowEl.insertCell(); th.textContent = f.label.split('/')[0].split(' ')[0]; }); th = mpbLogHistoryTableHeaderRowEl.insertCell(); th.textContent = "Productivity"; th = mpbLogHistoryTableHeaderRowEl.insertCell(); th.textContent = "Notes"; } if (logsForWeek.length === 0) { mpbNoLogsForWeekMessageEl.style.display = 'block'; mpbWeeklyAveragesDisplayEl.innerHTML = 'N/A
'; mpbAvgProdValueEl.textContent = 'N/A'; mpbFactorAverageScoresChartEl.innerHTML = 'No data for chart.
'; mpbCorrelationInsightsEl.innerHTML = 'No daily logs found for this week to generate insights.
'; mpbWeeklyOverviewAreaEl.style.display = 'block'; mpbDownloadReportBtnEl.style.display = 'none'; return; } mpbNoLogsForWeekMessageEl.style.display = 'none'; const weeklyAverages = {}; mpbWellnessFactorDefs.forEach(f => weeklyAverages[f.id] = { sum: 0, count: 0 }); let totalProductivitySum = 0, productivityCount = 0; logsForWeek.sort((a,b) => new Date(a.date) - new Date(b.date)).forEach(log => { const row = mpbLogHistoryTableBodyEl.insertRow(); row.insertCell().textContent = new Date(log.date+'T00:00:00Z').toLocaleDateString(); mpbWellnessFactorDefs.forEach(factor => { const score = log.wellnessScores[factor.id] !== undefined ? log.wellnessScores[factor.id] : 0; row.insertCell().textContent = score; weeklyAverages[factor.id].sum += score; weeklyAverages[factor.id].count++; }); row.insertCell().textContent = log.productivityLevel; const notesCell = row.insertCell(); notesCell.textContent = log.notes.substring(0,25)+(log.notes.length>25?'...':''); notesCell.title = log.notes; notesCell.classList.add('notes-cell'); totalProductivitySum += log.productivityLevel; productivityCount++; }); let avgWellnessHTML = ''; const factorAveragesForChart = []; mpbWellnessFactorDefs.forEach(f => { const avg = weeklyAverages[f.id].count > 0 ? (weeklyAverages[f.id].sum / weeklyAverages[f.id].count) : 0; avgWellnessHTML += `${f.label}: ${avg.toFixed(1)}
- ';
const avgProdNum = parseFloat(avgProd);
let wellnessFactorsAboveAverage = 0;
let wellnessFactorsBelowAverage = 0;
mpbWellnessFactorDefs.forEach(f => {
const avgFactorScore = weeklyAverages[f.id].count > 0 ? (weeklyAverages[f.id].sum / weeklyAverages[f.id].count) : null;
if (avgFactorScore !== null) {
if (avgFactorScore >= 3.5) wellnessFactorsAboveAverage++;
if (avgFactorScore < 2.5) wellnessFactorsBelowAverage++;
}
if(avgFactorScore !== null && !isNaN(avgProdNum) && logsForWeek.length >= 2) {
let highWellnessHighProdDays = 0; let lowWellnessLowProdDays = 0;
logsForWeek.forEach(log => {
if(log.wellnessScores[f.id] >= 4 && log.productivityLevel >=4) highWellnessHighProdDays++;
if(log.wellnessScores[f.id] <= 2 && log.productivityLevel <=2) lowWellnessLowProdDays++;
});
if (highWellnessHighProdDays >= 1 && highWellnessHighProdDays >= logsForWeek.length * 0.3) {
insightsHTML += `
- A number of days this week showed high '${f.label}' coinciding with high 'Productivity'. What elements contributed to these positive instances? `; } if (lowWellnessLowProdDays >= 1 && lowWellnessLowProdDays >= logsForWeek.length * 0.3) { insightsHTML += `
- On some days, lower '${f.label}' appeared with lower 'Productivity'. Exploring the notes for these days might offer insights into contributing factors. `; } } }); if (avgProdNum >= 3.5 && wellnessFactorsAboveAverage >= 3) { insightsHTML += `
- This week shows a trend of good overall productivity often aligning with positive wellness indicators. What helped maintain this balance? `; } else if (avgProdNum < 2.5 && wellnessFactorsBelowAverage >= 2) { insightsHTML += `
- Productivity appeared lower this week, alongside several lower-rated wellness factors. Which areas felt most challenging, and what support might be beneficial? `; } if(logsForWeek.filter(log => log.notes && (log.notes.toLowerCase().includes("stress") || log.notes.toLowerCase().includes("pressure") || log.notes.toLowerCase().includes("overwhelm"))).length >=1){ insightsHTML += `
- Your notes mentioned terms related to stress or pressure. Consider how these days correlated with your self-rated wellness and productivity scores. `; } if(insightsHTML === '
- Reflect on your daily entries. What connections do you see between your wellness scores, productivity levels, and the day\'s events or notes? '; insightsHTML += '
- ') insightsHTML += '
