Abandoned Cart Email Generator

Abandoned Cart Email Generator

Create effective email copy to recover lost sales.

${email.body}

Call to Action: [Link to Cart]

`; }); emailsContainer.innerHTML = emailsHTML; outputTitle.textContent = `Generated Emails for: ${product}`; downloadPdfBtn.classList.remove('hidden'); }; const downloadPdf = () => { const { jsPDF } = window.jspdf; const doc = new jsPDF({ orientation: 'p', unit: 'mm', format: 'a4' }); const content = getEl('generated-emails-container'); const title = `Abandoned Cart Sequence: ${productNameInput.value.trim()}`; const genDate = new Date().toLocaleDateString('en-US'); const pageWidth = doc.internal.pageSize.getWidth(); const margin = 15; // --- PDF Template: Email Campaign Draft --- doc.setFillColor(14, 116, 144); // Cyan-700 doc.rect(0, 0, pageWidth, 28, 'F'); doc.setFont('helvetica', 'bold'); doc.setFontSize(16); doc.setTextColor(255, 255, 255); doc.text("EMAIL CAMPAIGN DRAFT", margin, 18); doc.setFont('helvetica', 'bold'); doc.setFontSize(14); doc.setTextColor(15, 23, 42); // Slate-900 let startY = 40; doc.text(title, margin, startY); doc.setFont('helvetica', 'normal'); doc.setFontSize(9); doc.setTextColor(71, 85, 105); // Slate-500 doc.text(`Generated on: ${genDate}`, pageWidth - margin, startY, { align: 'right' }); startY += 12; html2canvas(content, { scale: 2, useCORS: true }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const imgProps = doc.getImageProperties(imgData); const pdfWidth = pageWidth - (margin * 2); const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width; doc.addImage(imgData, 'PNG', margin, startY, pdfWidth, pdfHeight); // Footer const pageCount = doc.internal.getNumberOfPages(); for(let i = 1; i <= pageCount; i++) { doc.setPage(i); doc.setLineWidth(0.2); doc.setDrawColor(156, 163, 175); doc.line(margin, 282, pageWidth - margin, 282); doc.setFontSize(8); doc.setTextColor(100, 116, 139); // Slate-500 doc.text(`Campaign for: ${productNameInput.value.trim()}`, margin, 287); doc.text(`Page ${i} of ${pageCount}`, pageWidth - margin, 287, { align: 'right' }); } doc.save(`Abandoned_Cart_Emails_${productNameInput.value.trim().replace(/\s/g, '_')}.pdf`); }).catch(err => { console.error("Error generating PDF:", err); alert("Could not generate PDF. See console for details."); }); }; const showTab = (tabNum) => { currentTab = tabNum; tabButtons.forEach(btn => btn.classList.toggle('active', parseInt(btn.dataset.tab) === tabNum)); tabPanes.forEach(pane => pane.classList.toggle('hidden', parseInt(pane.id.split('-')[2]) !== tabNum)); prevBtn.classList.toggle('invisible', currentTab === 1); nextBtn.textContent = currentTab === 1 ? 'Generate Emails' : 'Generate Again'; }; // --- Event Listeners --- tabButtons.forEach(button => { button.addEventListener('click', () => { const tabNum = parseInt(button.dataset.tab); if (tabNum === 2 && currentTab === 1) generateEmails(); showTab(tabNum); }); }); prevBtn.addEventListener('click', () => { if (currentTab > 1) showTab(currentTab - 1) }); nextBtn.addEventListener('click', () => { if (currentTab === 1) { generateEmails(); showTab(2); } else { generateEmails(); } }); downloadPdfBtn.addEventListener('click', downloadPdf); // --- Initial Setup --- showTab(1); });
Scroll to Top