Home Equity Growth Estimator
Current Property & Equity
$
$
Mortgage Details (For Future Projection)
%
$
Future Projections
%
Home Equity Growth Estimation
Year-by-Year Projection
| Year | Est. Home Value ($) | Est. Mortgage Balance ($) | Est. Home Equity ($) | Principal Paid ($) |
|---|
This calculator provides an estimation based on the inputs provided. It assumes constant appreciation and interest rates over the projection period. Actual market conditions, property taxes, insurance, maintenance costs, and refinancing can significantly impact results. This is not financial advice.
${this.formatCurrency(finalProjection.equity)}
Total Equity Growth (over ${projectionYears} yrs)
${this.formatCurrency(totalEquityGrowth)}
Home Equity Growth Estimation Report
`; pdfHtml += `Inputs Summary
`;
pdfHtml += `
`;
pdfHtml += `Current Home Value: ${this.formatCurrency(i.currentHomeValue, false)}
`;
pdfHtml += `Current Mortgage Balance: ${this.formatCurrency(i.currentMortgageBalance, false)}
`;
if(i.currentMortgageBalance > 0) {
pdfHtml += `Remaining Loan Term: ${i.remainingLoanTerm} years
`;
pdfHtml += `Annual Interest Rate: ${i.annualInterestRate.toFixed(2)}
`;
pdfHtml += `Additional Monthly Principal: ${this.formatCurrency(i.additionalPrincipalPayment, false)}
`;
}
pdfHtml += `Expected Annual Appreciation: ${i.annualAppreciationRate.toFixed(2)}
`;
pdfHtml += `Projection Period: ${i.projectionPeriod} years
`;
pdfHtml += `Projection Summary (After ${i.projectionPeriod} Years)
`;
pdfHtml += `
`;
if (r.projections.length > 0) {
pdfHtml += `Current Estimated Equity: ${this.formatCurrency(r.currentEquity, false)}
`;
pdfHtml += `Projected Home Value: ${this.formatCurrency(finalProj.homeValue, false)}
`;
pdfHtml += `Projected Mortgage Balance: ${this.formatCurrency(finalProj.mortgageBalance, false)}
`;
pdfHtml += `Projected Home Equity: ${this.formatCurrency(finalProj.equity, false)}
`;
pdfHtml += `Total Equity Growth: ${this.formatCurrency(finalProj.equity - r.currentEquity, false)}
`;
pdfHtml += `Year-by-Year Projection Details
`; const tableClone = this.elements.breakdownTableContainer.querySelector('.heg-breakdown-table').cloneNode(true); tableClone.style.fontSize = '8pt'; tableClone.querySelectorAll('th, td').forEach(cell => cell.style.padding = '4px'); pdfHtml += tableClone.outerHTML; } pdfHtml += `Estimates based on inputs. Assumes constant rates. Does not include taxes, insurance, or maintenance. Not financial advice.
`;
pdfExportContainer.innerHTML = pdfHtml;
document.body.appendChild(pdfExportContainer);
try {
const canvas = await html2canvas(pdfExportContainer, { scale: 1.5, useCORS: true, logging: false, windowWidth: pdfExportContainer.scrollWidth });
document.body.removeChild(pdfExportContainer);
const imgData = canvas.toDataURL('image/png');
const { jsPDF } = window.jspdf;
const pdf = new jsPDF({ orientation: 'p', unit: 'pt', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = pdf.internal.pageSize.getHeight();
const imgProps = pdf.getImageProperties(imgData);
let imgFinalWidth = pdfWidth - 40;
let imgFinalHeight = (imgProps.height * imgFinalWidth) / imgProps.width;
if (imgFinalHeight > pdfHeight - 40) {
imgFinalHeight = pdfHeight - 40;
imgFinalWidth = (imgProps.width * imgFinalHeight) / imgProps.height;
}
let currentY = 20;
let heightProcessed = 0;
const pageMargin = 20;
const pageHeightAvailable = pdfHeight - 2 * pageMargin;
while(heightProcessed < canvas.height) {
let pageSegmentHeightOnCanvas = Math.min(canvas.height - heightProcessed, (pageHeightAvailable / imgFinalHeight) * canvas.height );
if (pageSegmentHeightOnCanvas <=0) break;
const segmentCanvas = document.createElement('canvas');
segmentCanvas.width = canvas.width;
segmentCanvas.height = pageSegmentHeightOnCanvas;
const sctx = segmentCanvas.getContext('2d');
sctx.drawImage(canvas, 0, heightProcessed, canvas.width, pageSegmentHeightOnCanvas, 0, 0, canvas.width, pageSegmentHeightOnCanvas);
const segmentImgData = segmentCanvas.toDataURL('image/png');
const segmentImgPropsPdf = pdf.getImageProperties(segmentImgData);
let segmentRenderWidth = pdfWidth - 2 * pageMargin;
let segmentRenderHeight = (segmentImgPropsPdf.height * segmentRenderWidth) / segmentImgPropsPdf.width;
if(segmentRenderHeight > pageHeightAvailable) {
segmentRenderHeight = pageHeightAvailable;
segmentRenderWidth = (segmentImgPropsPdf.width * segmentRenderHeight) / segmentImgPropsPdf.height;
}
if(heightProcessed > 0) pdf.addPage();
pdf.addImage(segmentImgData, 'PNG', pageMargin, pageMargin, segmentRenderWidth, segmentRenderHeight);
heightProcessed += pageSegmentHeightOnCanvas;
}
pdf.save('Home_Equity_Growth_Estimation.pdf');
} catch (error) {
console.error("Error generating PDF:", error);
alert("An error occurred while generating PDF.");
if (document.body.contains(pdfExportContainer)) document.body.removeChild(pdfExportContainer);
}
}
};
document.addEventListener('DOMContentLoaded', function() {
hegApp.init();
});
