Personalized Discount Recommender

Personalized Discount Recommender

Generate tailored discounts based on customer data.

Customer Profile

3 years
$650

Purchase Intent

Recommended Discount

0%

Generated Code

No discount applicable.

`; } } function downloadPDF() { const { jsPDF } = window.jspdf; const doc = new jsPDF('p', 'mm', 'a4'); const { finalDiscount, breakdown } = calculateDiscount(); const code = elements.discountCode.value; const validUntil = new Date(); validUntil.setDate(validUntil.getDate() + 30); doc.setFillColor(30, 41, 59); // Slate 800 doc.rect(0, 0, doc.internal.pageSize.getWidth(), 30, 'F'); doc.setFont('helvetica', 'bold'); doc.setFontSize(20); doc.setTextColor(255, 255, 255); doc.text("Personalized Discount Recommendation", 15, 18); doc.autoTable({ startY: 40, head: [['Customer Input', 'Value']], body: [ ['Years as Customer', `${elements.loyaltySlider.value} years`], ['Annual Spend', `$${elements.spendSlider.value}`], ['Interested Category', elements.categorySelect.options[elements.categorySelect.selectedIndex].text], ['Special Occasion', elements.occasionCheck.checked ? 'Yes' : 'No'], ], theme: 'grid', headStyles: { fillColor: [168, 85, 247] } // Purple }); let finalY = doc.autoTable.previous.finalY; doc.autoTable({ startY: finalY + 10, head: [['Discount Breakdown', 'Bonus']], body: breakdown.map(item => [item.label, `+${item.value}%`]), theme: 'grid', headStyles: { fillColor: [107, 114, 128] } // Gray }); finalY = doc.autoTable.previous.finalY; doc.setFontSize(16); doc.setFont('helvetica', 'bold'); doc.text('Final Recommendation', 15, finalY + 15); doc.autoTable({ startY: finalY + 20, body: [ ['Total Discount:', `${finalDiscount}%`], ['Your Unique Code:', code], ['Valid Until:', validUntil.toLocaleDateString()] ], theme: 'plain' }); doc.setFontSize(10); doc.setTextColor(150); doc.text(`Report generated on: ${new Date().toLocaleString()}`, 15, doc.internal.pageSize.getHeight() - 10); doc.save('discount_recommendation.pdf'); } // --- EVENT LISTENERS --- const inputs = [elements.loyaltySlider, elements.spendSlider, elements.categorySelect, elements.occasionCheck]; inputs.forEach(input => input.addEventListener('input', updateUI)); elements.copyBtn.addEventListener('click', () => { elements.discountCode.select(); document.execCommand('copy'); elements.copyBtn.innerHTML = ``; setTimeout(() => { elements.copyBtn.innerHTML = ``; }, 2000); }); elements.pdfButton.addEventListener('click', downloadPDF); // --- INITIALIZATION --- function initialize() { elements.discountCode.value = generateCode(); updateUI(); } initialize(); });
Scroll to Top