Evergreen Content Creator
Generate timeless ideas and outlines for your blog.
Review the generated content outline. Use "Previous" to adjust your topic.
Hook: Explain that the jargon surrounding ${topic} can be intimidating, but this simple glossary will empower them to make confident decisions.
Key Terms
- 401(k): The basic definition of an employer-sponsored retirement plan.
- Employer Match: What it is and why it's critical.
- Vesting: Explain what it means to be "fully vested" in the employer's contributions.
- Index Fund: A simple definition of a low-cost, diversified investment option.
- Target-Date Fund: Explain the "set-it-and-forget-it" nature of these funds.
- Rollover: What it means when you leave a job.
- Expense Ratio: The cost of owning a mutual fund.
Conclusion
Reassure the reader that understanding these terms is the first step to taking control of their retirement savings.
`; break; case 'Checklist for Success': title = `The Ultimate ${topic} Checklist for ${audience}`; outlineHTML = `Introduction
Hook: Frame this as a simple, actionable checklist to ensure they are maximizing their ${topic} potential without the stress.
The Checklist
- [ ] **Confirm Your Eligibility:** Have you worked long enough to participate?
- [ ] **Find Your Company Match:** Do you know the exact percentage?
- [ ] **Contribute at Least the Match Amount:** Are you getting all the free money?
- [ ] **Select Your Investments:** Have you chosen your funds (e.g., a target-date fund)?
- [ ] **Designate a Beneficiary:** Is your beneficiary information up to date?
- [ ] **Automate Your Contributions:** Is the money coming directly from your paycheck?
- [ ] **Set a Calendar Reminder:** Have you set a reminder to review your account in one year?
Conclusion
End on a positive and empowering note, emphasizing how following this checklist puts them on the right track.
`; break; case 'The Ultimate Guide': default: title = `The Ultimate Guide to ${topic}`; outlineHTML = `Introduction
Hook: Explain why ${topic} is one of the most powerful wealth-building tools available to ${audience} and how this guide will demystify it.
Chapter 1: What is a ${topic} and Why Does It Matter?
- The basic definition
- Tax advantages (pre-tax contributions, tax-deferred growth)
Chapter 2: Getting Started: Enrollment and Contributions
- The importance of the employer match
- How much should you contribute? (Starting goals)
Chapter 3: Understanding Your Investment Options
- Target-Date Funds
- Index Funds (S&P 500, etc.)
- The concept of risk tolerance
Chapter 4: Managing Your Account Over Time
- What to do when you change jobs (Rollovers)
- The power of consistency and time
Chapter 5: Common Questions & Pitfalls
- What about loans or early withdrawals?
- Avoiding high-fee funds
Conclusion
Summarize the key action items and reinforce the long-term benefits.
`; break; } generatedContent = { title, outline: outlineHTML }; elements.outputContainer.innerHTML = `${generatedContent.title}
${generatedContent.outline}Call to Action
${data.callToAction}
`; }; const handleDownloadPdf = () => { const { jsPDF } = window.jspdf; if (!jsPDF) { console.error("jsPDF is not loaded."); return; } const data = getFormData(); const doc = new jsPDF({ orientation: 'portrait', unit: 'in', format: 'letter' }); const margin = 0.75; const pageWidth = doc.internal.pageSize.getWidth(); const usableWidth = pageWidth - (margin * 2); let currentY = 0; // --- PDF Header --- doc.setFillColor('#ecfdf5'); // emerald-50 doc.rect(0, 0, pageWidth, 1.2, 'F'); doc.setFont('helvetica', 'bold'); doc.setFontSize(18); doc.setTextColor('#065f46'); // emerald-800 doc.text('Evergreen Content Plan', margin, 0.6); doc.setFontSize(10); doc.setTextColor('#047857'); // emerald-700 doc.text(new Date().toLocaleDateString('en-US'), pageWidth - margin, 0.6, { align: 'right' }); doc.setFont('helvetica', 'normal'); doc.text(data.contentFormat, margin, 0.9); currentY = 1.5; // --- Function to add a data row --- const addDataRow = (label, value) => { doc.setFont('helvetica', 'bold'); doc.setFontSize(10); doc.setTextColor('#374151'); // gray-700 doc.text(`${label}:`, margin, currentY); doc.setFont('helvetica', 'normal'); const valueLines = doc.splitTextToSize(value, usableWidth - 1.2); doc.text(valueLines, margin + 1.2, currentY); currentY += (valueLines.length * 0.18) + 0.15; }; addDataRow('Core Topic', data.coreTopic); addDataRow('Target Audience', data.targetAudience); addDataRow('Call to Action', data.callToAction); currentY += 0.2; doc.setLineWidth(0.01); doc.setDrawColor('#a1a1aa'); // zinc-400 doc.line(margin, currentY, pageWidth - margin, currentY); currentY += 0.3; // --- Generated Title --- doc.setFont('helvetica', 'bold'); doc.setFontSize(14); doc.setTextColor('#1f2937'); // gray-800 const titleLines = doc.splitTextToSize(generatedContent.title, usableWidth); doc.text(titleLines, margin, currentY); currentY += (titleLines.length * 0.22) + 0.2; // --- Generated Outline --- // This is a simplified parser for the HTML to make it PDF-friendly const tempDiv = document.createElement('div'); tempDiv.innerHTML = generatedContent.outline; doc.setFont('times', 'normal'); doc.setFontSize(11); doc.setTextColor('#374151'); // gray-700 Array.from(tempDiv.children).forEach(el => { if (currentY > 10) { doc.addPage(); currentY = margin; } let text = el.innerText || el.textContent || ''; if (el.tagName === 'H3') { currentY += 0.1; doc.setFont('helvetica', 'bold'); doc.text(text, margin, currentY); doc.setFont('times', 'normal'); currentY += 0.25; } else if (el.tagName === 'P') { const pLines = doc.splitTextToSize(text, usableWidth); doc.text(pLines, margin, currentY); currentY += (pLines.length * 0.18) + 0.1; } else if (el.tagName === 'UL') { Array.from(el.children).forEach(li => { if (currentY > 10.2) { doc.addPage(); currentY = margin; } const liText = `• ${li.innerText || li.textContent || ''}`; const liLines = doc.splitTextToSize(liText, usableWidth - 0.2); doc.text(liLines, margin + 0.2, currentY); currentY += (liLines.length * 0.18) + 0.05; }); currentY += 0.1; } }); doc.save('Evergreen-Content-Plan.pdf'); }; // --- Event Listeners --- elements.tabIdeation.addEventListener('click', () => switchTab('ideation')); elements.tabOutline.addEventListener('click', () => switchTab('outline')); elements.nextBtn.addEventListener('click', () => currentTab === 'ideation' && switchTab('outline')); elements.prevBtn.addEventListener('click', () => currentTab === 'outline' && switchTab('ideation')); elements.downloadPdfBtn.addEventListener('click', handleDownloadPdf); });