Customer Retention Strategy Planner

Customer Retention Strategy Planner

Model the financial impact of your retention efforts.

1. Baseline Annual Metrics

2. Retention Strategy Levers

Projected Annual Impact

New Churn Rate

0%

Customers Retained

0

Additional Revenue

$0

Customer Status Breakdown

Projected Revenue Impact

Strategy Contribution

StrategyChurn ReductionCustomers Saved

${document.getElementById('retainedCustomers').textContent}

Additional Revenue

${document.getElementById('additionalRevenue').textContent}

`; document.getElementById('pdf-churn-chart').src = churnChart.toBase64Image(); const tableClone = document.querySelector('table').cloneNode(true); tableClone.classList.add("w-full", "text-xs"); document.getElementById('pdf-table-container').innerHTML = ''; document.getElementById('pdf-table-container').appendChild(tableClone); const reportEl = document.getElementById('pdf-report'); reportEl.classList.remove('hidden'); const canvas = await html2canvas(reportEl, { scale: 2 }); reportEl.classList.add('hidden'); const imgData = canvas.toDataURL('image/png'); const { jsPDF } = window.jspdf; const pdf = new jsPDF({ orientation: 'p', unit: 'in', format: 'letter' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const pdfHeight = (canvas.height * pdfWidth) / canvas.width; pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight); pdf.save('Retention-Strategy-Plan.pdf'); } document.getElementById('baseline-inputs').addEventListener('input', calculateImpact); document.getElementById('strategy-levers').addEventListener('input', e => { const strategy = strategies.find(s => s.id === e.target.dataset.id); if (!strategy) return; if (e.target.type === 'checkbox') { strategy.enabled = e.target.checked; } if (e.target.type === 'range') { strategy.impact = parseFloat(e.target.value); e.target.nextElementSibling.textContent = `${strategy.impact}%`; } calculateImpact(); }); document.getElementById('downloadPdfBtn').addEventListener('click', generatePdf); // Initial Load renderStrategyLevers(); calculateImpact(); });
Scroll to Top