The Next Chapter — Leadership Update
Enter the new campaign totals and click Download Updated Website .
This creates a fresh index.html without requiring you to edit any code.
Goal $20,000
Pledged $0
Remaining $20,000
Builders 0
Received $0
Download Updated Website
Reset
After downloading, replace the old website file with the newly generated
index.html . The public page will show the updated pledged total,
remaining goal, and builder count. “Total Received” is included only for your
leadership calculation and is not displayed publicly.
`;
const goal = document.getElementById('goal');
const pledged = document.getElementById('pledged');
const builders = document.getElementById('builders');
const received = document.getElementById('received');
const money = value => new Intl.NumberFormat('en-US', {
style:'currency',
currency:'USD',
maximumFractionDigits:0
}).format(Number(value) || 0);
function refresh(){
const g = Number(goal.value) || 0;
const p = Number(pledged.value) || 0;
const b = Number(builders.value) || 0;
const r = Number(received.value) || 0;
document.getElementById('goalPreview').textContent = money(g);
document.getElementById('pledgedPreview').textContent = money(p);
document.getElementById('remainingPreview').textContent = money(Math.max(g-p,0));
document.getElementById('buildersPreview').textContent = b.toLocaleString();
document.getElementById('receivedPreview').textContent = money(r);
}
[goal, pledged, builders, received].forEach(el => el.addEventListener('input', refresh));
document.getElementById('downloadBtn').addEventListener('click', () => {
const g = Number(goal.value) || 0;
const p = Number(pledged.value) || 0;
const b = Number(builders.value) || 0;
const remaining = Math.max(g-p,0);
let updated = SOURCE_HTML
.replace(/(
)[^<]*(<\/strong>)/, `$1${money(g)}$2`)
.replace(/()[^<]*(<\/strong>)/, `$1${money(p)}$2`)
.replace(/()[^<]*(<\/strong>)/, `$1${money(remaining)}$2`)
.replace(/()[^<]*(<\/strong>)/, `$1${b.toLocaleString()}$2`);
const blob = new Blob([updated], {type:'text/html'});
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'index.html';
document.body.appendChild(a);
a.click();
a.remove();
URL.revokeObjectURL(url);
});
document.getElementById('resetBtn').addEventListener('click', () => {
goal.value = 20000;
pledged.value = 0;
builders.value = 0;
received.value = 0;
refresh();
});
refresh();