Personal Productivity Blueprint Generator

Tell Us About Yourself & Your Goals

Your Biggest Productivity Challenge(s) (Select all that apply):

Your Preferences & Techniques

Are you interested in or currently using any of these techniques? (Select all that apply)

Your Personal Productivity Blueprint

Your personalized blueprint will appear here once generated.

`; // Section 4: Optimizing Your Work Environment blueprint += "

4. Optimizing Your Work Environment

"; blueprint += `

You primarily work in a ${data.workEnvironment}. `; if (data.workEnvironment.includes("Home (Shared Space)")) blueprint += "Minimize distractions by setting clear boundaries with others, using headphones, or finding a quieter corner if possible. A 'do not disturb' signal can be helpful."; else if (data.workEnvironment.includes("Home Office (Dedicated Room)")) blueprint += "Keep your dedicated workspace organized and optimized for focus. Ensure good ergonomics."; else if (data.workEnvironment.includes("Corporate Office")) blueprint += "If it's an open office, use strategies like noise-canceling headphones or finding quiet zones for deep work. Communicate your focus needs to colleagues."; else if (data.workEnvironment.includes("Hybrid")) blueprint += "Plan your tasks according to your location. For example, deep work might be better at home, while collaborative tasks are suited for the office."; else if (data.workEnvironment.includes("Co-working") || data.workEnvironment.includes("Cafes")) blueprint += "Invest in good noise-canceling headphones. Have a 'go-bag' with all essentials. Be mindful of security and privacy."; blueprint += "

"; // Section 5: Strategic Planning & Techniques blueprint += "

5. Strategic Planning & Techniques

"; blueprint += `

Your preferred planning horizon is ${data.planningHorizon}. Ensure your shorter-term plans align with this broader view.

`; if (data.techniques.length > 0 && !data.techniques.includes("None / Open to suggestions")) { blueprint += "

You're interested in or using: " + data.techniques.join(", ") + ". Here's how some of these can help:

    "; if (data.techniques.includes("Time Blocking")) blueprint += "
  • Time Blocking: Allocate specific blocks of time in your calendar for each task or type of work. This ensures dedicated focus.
  • "; if (data.techniques.includes("Pomodoro Technique")) blueprint += "
  • Pomodoro Technique: Great for focus and managing procrastination. Work in 25-min sprints with short breaks.
  • "; if (data.techniques.includes("Eat The Frog")) blueprint += "
  • Eat The Frog: Tackle your most difficult or important task first thing in the morning. This builds momentum.
  • "; if (data.techniques.includes("GTD principles")) blueprint += "
  • GTD Principles: Focus on capturing all tasks, clarifying them, organizing them, reflecting, and engaging. This helps reduce mental clutter.
  • "; if (data.techniques.includes("Task Batching")) blueprint += "
  • Task Batching: Group similar tasks (e.g., emails, calls, errands) and do them together to minimize context switching.
  • "; if (data.techniques.includes("Eisenhower Matrix")) blueprint += "
  • Eisenhower Matrix: Categorize tasks by Urgency and Importance to decide what to do, schedule, delegate, or delete.
  • "; if (data.techniques.includes("Two-Minute Rule")) blueprint += "
  • Two-Minute Rule: If a task takes less than two minutes, do it immediately. This prevents small tasks from piling up.
  • "; blueprint += "

Explore these further and integrate what works best for your style.

"; } else { blueprint += "

You're open to suggestions! Consider starting with Time Blocking (scheduling specific time for tasks) or the Pomodoro Technique (short focused work sprints) as they are widely effective.

"; } // Section 6: Tooling Your Productivity blueprint += "

6. Tooling Your Productivity

"; blueprint += `

Your tool preference is: ${data.toolPreference}. `; if (data.toolPreference.includes("Digital")) blueprint += "Explore apps for task management (e.g., Todoist, Asana, Trello), calendar management, note-taking (e.g., Evernote, Notion), and focus (e.g., Freedom, Forest)."; else if (data.toolPreference.includes("Analog")) blueprint += "A good quality notebook/planner, pens, and sticky notes can be very effective. Consider bullet journaling or a structured paper planner."; else blueprint += "Find a balance that suits you. Perhaps a digital calendar священникамиh a paper to-do list, or a project management app with a notebook for brainstorming."; blueprint += " The key is consistency and finding tools that you genuinely enjoy using.

"; // Section 7: Managing Distractions blueprint += "

7. Managing Distractions & Maintaining Focus

"; blueprint += `

You handle distractions by: ${data.distractionHandling}. `; if (data.distractionHandling.includes("Minimize/defer")) blueprint += "This is a strong approach. Continue to proactively create a distraction-free environment and schedule specific times to check communications."; else if (data.distractionHandling.includes("Address immediately")) blueprint += "While this can feel productive, it often leads to context switching which reduces overall efficiency. Try to batch communications or use the 'Two-Minute Rule' selectively."; else if (data.distractionHandling.includes("Struggle to refocus")) blueprint += "Recognizing this is the first step. Implement strategies like the Pomodoro Technique to build focus, and make it harder for distractions to reach you during focus blocks."; else if (data.distractionHandling.includes("Take breaks then refocus")) blueprint += "This is a good recovery strategy. Ensure your breaks are refreshing and don't lead to further distractions. A short walk or some stretching can help reset focus."; blueprint += "

"; // Section 8: Key Action Steps blueprint += "

8. Your Blueprint Summary - Key Action Steps

"; blueprint += "

Based on your inputs, here are a few key actions to start with:

    "; blueprint += `
  1. Clarify & Prioritize: Revisit your main goal: '${data.mainGoal || 'Define a Clear Goal'}'. Break it down and prioritize tasks related to it, perhaps using the Eisenhower Matrix if you're tackling 'Overwhelm' or 'Poor Planning'.
  2. `; blueprint += `
  3. Optimize Your Focus Time: Schedule your most important work during your ${data.peakEnergy}. If 'Distractions' or 'Lack of Focus' are issues, actively create a focused environment and consider a technique like Time Blocking or Pomodoro.
  4. `; blueprint += `
  5. Experiment & Adapt: Pick one or two new strategies or techniques mentioned (e.g., from the ${data.techniques.join(', ') || 'suggested techniques'} list) and try them consistently for a week. See what fits your ${data.workStyle} and adjust.
  6. `; blueprint += `
  7. Consistent Review: Based on your ${data.planningHorizon}, set up a regular review (e.g., daily or weekly) to check progress, adjust plans, and reinforce good habits.
  8. `; blueprint += "
"; generatedBlueprintHTML = blueprint; // Store for PDF document.getElementById('ppbg-blueprint-output').innerHTML = blueprint; document.getElementById('ppbg-pdf-download').style.display = 'inline-block'; } function ppbgDownloadPDF() { if (!generatedBlueprintHTML) { alert("Please generate your blueprint first."); return; } const doc = new jsPDF('p', 'pt', 'a4'); const FONT_FAMILY = "helvetica"; const ACCENT_COLOR_HEX = getComputedStyle(document.documentElement).getPropertyValue('--accent-color').trim(); const PRIMARY_TEXT_COLOR_HEX = getComputedStyle(document.documentElement).getPropertyValue('--primary-text').trim(); const HEADING_COLOR_HEX = getComputedStyle(document.documentElement).getPropertyValue('--blueprint-heading-color').trim(); const BUTTON_TEXT_COLOR_HEX = getComputedStyle(document.documentElement).getPropertyValue('--button-text-color').trim(); const margin = 40; const pageWidth = doc.internal.pageSize.getWidth(); const usableWidth = pageWidth - (2 * margin); let yPos = 40; // PDF Header doc.setFillColor(ACCENT_COLOR_HEX); doc.rect(0, 0, pageWidth, yPos + 10, 'F'); doc.setFont(FONT_FAMILY, "bold"); doc.setFontSize(18); doc.setTextColor(BUTTON_TEXT_COLOR_HEX); doc.text("Your Personal Productivity Blueprint", pageWidth / 2, yPos, { align: "center" }); yPos += 30; // Generated Date doc.setFont(FONT_FAMILY, "italic"); doc.setFontSize(9); doc.setTextColor(PRIMARY_TEXT_COLOR_HEX); const reportDate = new Date().toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric' }); doc.text(`Generated on: ${reportDate}`, margin, yPos); yPos += 20; // --- Function to add HTML content to PDF --- // This is a simplified parser. For complex HTML, a dedicated library would be better. const addHtmlContent = (htmlString) => { const tempDiv = document.createElement('div'); tempDiv.innerHTML = htmlString; const processNode = (node) => { if (yPos > doc.internal.pageSize.getHeight() - margin * 1.5) { // Check for page break doc.addPage(); yPos = margin; } switch(node.nodeName) { case 'H2': doc.setFont(FONT_FAMILY, "bold"); doc.setFontSize(16); doc.setTextColor(HEADING_COLOR_HEX); yPos += 5; // Extra space before H2 const h2Lines = doc.splitTextToSize(node.textContent.trim(), usableWidth); doc.text(h2Lines, margin, yPos); yPos += (h2Lines.length * 16 * 0.7) + 8; // Adjust spacing break; case 'H3': doc.setFont(FONT_FAMILY, "bold"); doc.setFontSize(13); doc.setTextColor(HEADING_COLOR_HEX); yPos += 8; // Extra space before H3 const h3Lines = doc.splitTextToSize(node.textContent.trim(), usableWidth); doc.text(h3Lines, margin, yPos); yPos += (h3Lines.length * 13 * 0.7) + 6; break; case 'P': doc.setFont(FONT_FAMILY, "normal"); doc.setFontSize(10); doc.setTextColor(PRIMARY_TEXT_COLOR_HEX); // Handle P tags with STRONG tags inside for inline bolding let pContent = []; let currentStyle = 'normal'; node.childNodes.forEach(childNode => { if (childNode.nodeName === 'STRONG') { pContent.push({ text: childNode.textContent, bold: true }); } else if (childNode.nodeType === Node.TEXT_NODE) { pContent.push({ text: childNode.textContent, bold: false }); } else if (childNode.nodeName === 'EM') { pContent.push({ text: childNode.textContent, italic: true }); } }); let currentX = margin; pContent.forEach(segment => { doc.setFont(FONT_FAMILY, segment.bold ? "bold" : (segment.italic ? "italic" : "normal")); const segmentLines = doc.splitTextToSize(segment.text, usableWidth - (currentX - margin)); segmentLines.forEach((line, index) => { if (index > 0 || (currentX + doc.getStringUnitWidth(line) * doc.getFontSize() / doc.internal.scaleFactor) > (margin + usableWidth) ) { // New line needed due to length or it's a subsequent line of a segment yPos += (10 * 1.2); // Line height currentX = margin; if (yPos > doc.internal.pageSize.getHeight() - margin * 1.5) {doc.addPage(); yPos = margin;} } doc.text(line, currentX, yPos); currentX += doc.getStringUnitWidth(line) * doc.getFontSize() / doc.internal.scaleFactor + (segment.text.endsWith(' ') ? (doc.getStringUnitWidth(' ') * doc.getFontSize() / doc.internal.scaleFactor) : 0); }); }); yPos += (10 * 1.2) + 5; // Move to next line plus some margin doc.setFont(FONT_FAMILY, "normal"); // Reset font style break; case 'UL': case 'OL': doc.setFont(FONT_FAMILY, "normal"); doc.setFontSize(10); doc.setTextColor(PRIMARY_TEXT_COLOR_HEX); Array.from(node.children).filter(child => child.nodeName === 'LI').forEach((li, idx) => { if (yPos > doc.internal.pageSize.getHeight() - margin * 1.5) { doc.addPage(); yPos = margin; } const bullet = (node.nodeName === 'OL' ? `${idx + 1}. ` : `• `); // Handle LI tags with STRONG tags inside let liCurrentX = margin + 10; li.childNodes.forEach(childNode => { doc.setFont(FONT_FAMILY, childNode.nodeName === 'STRONG' ? "bold" : "normal"); const textToSplit = childNode.textContent.trim(); const itemLines = doc.splitTextToSize(textToSplit, usableWidth - 15); // 15 for bullet and indent itemLines.forEach((line, lineIdx) => { if (lineIdx === 0) { doc.text(bullet + line, margin + 5, yPos); } else { doc.text(line, margin + 15, yPos); // Indent subsequent lines } if (lineIdx < itemLines.length -1) yPos += (10 * 1.2); }); }); yPos += (10 * 1.2) + 3; // Space after list item doc.setFont(FONT_FAMILY, "normal"); // Reset }); yPos += 5; // Extra space after list break; } // Recursively process children if any (though this basic parser might not need deep recursion) // Array.from(node.children).forEach(child => processNode(child)); }; Array.from(tempDiv.children).forEach(childElement => processNode(childElement)); }; // --- End of addHtmlContent function --- addHtmlContent(generatedBlueprintHTML); // Parse and add the stored HTML // Footer const pageCount = doc.internal.getNumberOfPages(); for (let i = 1; i <= pageCount; i++) { doc.setPage(i); const pageHeight = doc.internal.pageSize.getHeight(); doc.setLineWidth(0.5); doc.setDrawColor(ACCENT_COLOR_HEX); doc.line(margin, pageHeight - 30, pageWidth - margin, pageHeight - 30); doc.setFont(FONT_FAMILY, "normal"); doc.setFontSize(8); doc.setTextColor(PRIMARY_TEXT_COLOR_HEX); doc.text(`Personal Productivity Blueprint - Page ${i} of ${pageCount}`, pageWidth / 2, pageHeight - 20, { align: "center" }); } doc.save("Personal_Productivity_Blueprint.pdf"); } // Link "Other" checkbox to its text input visibility document.getElementById('ch-other').addEventListener('change', function() { document.getElementById('ch-other-text').style.display = this.checked ? 'block' : 'none'; if (!this.checked) { document.getElementById('ch-other-text').value = ''; } });
Scroll to Top