INSTANT COST ESTIMATOR
Calculate in 2 mins
MY Home Builders, Inc.

© 2026 MY Home Builders, Inc. All rights reserved. Licensed General Contractor, Los Angeles, CA.

Estimates are ballpark figures for planning purposes, subject to on-site physical inspection.

', '', '
', '
', ' MY Home Builders, Inc.', '
', '
Estimated Ballpark Summary
', '

' + serviceName + '

', '
', '
Ballpark Project Range
', '
' + rangeStr + '
', '
Please note: This ballpark estimate is for preliminary planning only and does not represent an official quote. The final price can only be calculated upon an on-site visit (Free of charge or commitment).
', '
', '
', '
', '
', fullName ? '
Prepared For: ' + fullName + '
' : '', '
Date: ' + dateStr + '
', '
', '
', '
Status: Consultation Requested
', '
License: CA Lic. #1002927
', '
', '
', '
', ' ', '
', ' ', '' ].filter(Boolean).join('\n'); doc.write(htmlContent); doc.close(); setTimeout(() => { try { printFrame.contentWindow.focus(); printFrame.contentWindow.print(); } catch (err) { window.print(); } }, 350); }; /* ========================================================================== 7. UI RENDERING ENGINE ========================================================================== */ function render() { const content = getEl('estimator-content'); // Smooth scroll to top of card on step transition const card = document.querySelector('.est-card'); if (card && state.step !== 0) { card.scrollIntoView({ behavior: 'smooth', block: 'start' }); } // ------------------------------------------------------------------------ // STEP 0: SERVICE SELECTION SCREEN (EXACT MATCH TO SCREENSHOT) // ------------------------------------------------------------------------ if (state.step === 0) { content.innerHTML = `

Calculate Your Remodel Ballpark Estimate

Select your project type below to begin our quick 2-minute design & installation questionnaire. Instant ballpark range with zero obligation.

1. CHOOSE YOUR SERVICE
${SERVICES.map(s => `
${s.name}
${s.name}
${s.desc}
`).join('')}
`; return; } // ------------------------------------------------------------------------ // RESULTS SCREEN // ------------------------------------------------------------------------ if (state.step === 'results') { const { min, max, items } = calculateCost(); const serviceName = SERVICES.find(s => s.id === state.selectedService)?.name || 'Remodeling Project'; content.innerHTML = `
Estimated Ballpark Summary

${serviceName}

Ballpark Project Range
${fmtRange(min, max)}
Please note: This ballpark estimate is for preliminary planning only and does not represent an official quote. The final price can only be calculated upon an on-site visit (Free of charge or commitment).
${state.contactSubmitted ? `
✓
Estimate Request Received!

A dedicated MY Home Builders project specialist will review your project specs and contact you within 1 business day to schedule your free on-site design consultation.

` : `
Ready to Take the Next Step?

Submit your contact info to receive a digital copy of this estimate and lock in a free, in-person design consultation with a licensed specialist.

`}
`; return; } // ------------------------------------------------------------------------ // QUESTION STEPS // ------------------------------------------------------------------------ const flow = FLOWS[state.selectedService]; const stepIndex = state.step; const stepData = flow.steps[stepIndex - 1]; const totalSteps = flow.steps.length; // Progress bar segments let progressHTML = `
`; for (let i = 1; i <= totalSteps; i++) { let segmentClass = 'progress-bar-segment'; if (i < stepIndex) segmentClass += ' filled'; else if (i === stepIndex) segmentClass += ' current'; progressHTML += `
`; } progressHTML += `
`; // Bottom Running Cost Bar: CLEAN, WITHOUT "ESTIMATED RUNNING TOTAL" text (per red strikethrough) const runningCost = calculateCost(); const runningCostHTML = `
${fmtRange(runningCost.min, runningCost.max)}
`; // Step-specific inner content let questionContentHTML = ''; // TYPE: INFO STEP (Scope List) if (stepData.type === 'info') { questionContentHTML = `
    ${stepData.scopeList.map(li => `
  • ✓ ${li}
  • `).join('')}
`; // Default record for info step if (!state.answers[stepData.id]) { state.answers[stepData.id] = { label: 'Base Scope', minVal: stepData.minVal, maxVal: stepData.maxVal }; } } // TYPE: SELECT (Single Choice) else if (stepData.type === 'select') { const selectedVal = state.answers[stepData.id]?.value; const isOtherFloorSelected = (stepData.id === 'floor_type' && selectedVal === 'other'); questionContentHTML = `
${stepData.choices.map((c, idx) => `
${c.label} ${c.sub ? `${c.sub}` : ''}
`).join('')}
${isOtherFloorSelected ? `
📞 Please note: For custom floor products, our specialist will provide a tailored quote during your free in-home consultation.
` : ''} `; } // TYPE: MULTISELECT (Multiple Choice) else if (stepData.type === 'multiselect') { const selectedList = state.answers[stepData.id] || []; questionContentHTML = ` ${stepData.subTitle ? `

${stepData.subTitle}

` : ''}
${stepData.choices.map((c, idx) => { const isSelected = selectedList.some(item => item.value === c.value); return `
${c.label}
`; }).join('')}
`; } // TYPE: RELOCATION STEP (Conditional Question per MD Specs) else if (stepData.type === 'relocation_step') { const relocState = state.answers['relocate_fixtures'] || { relocate: null, items: [] }; const isRelocating = relocState.relocate === 'yes'; const isNotRelocating = relocState.relocate === 'no'; questionContentHTML = `
No, keep all fixtures in their existing positions Plumbing rough-ins stay in current locations
Yes, relocate one or more plumbing fixtures Move drain lines, water supply lines, or reconfigure layout
${isRelocating ? `
Select which fixtures you plan to relocate:
${stepData.choices.map(c => { const isChecked = relocState.items.includes(c.value); return `
${c.label}
`; }).join('')}
` : ''} `; } // Next button disabled validation let isNextDisabled = false; if (stepData.type === 'select' && !state.answers[stepData.id]) { isNextDisabled = true; } if (stepData.type === 'multiselect' && (!state.answers[stepData.id] || state.answers[stepData.id].length === 0)) { isNextDisabled = true; } if (stepData.type === 'relocation_step') { const relocState = state.answers['relocate_fixtures']; if (!relocState || !relocState.relocate) { isNextDisabled = true; } else if (relocState.relocate === 'yes' && relocState.items.length === 0) { isNextDisabled = true; } } content.innerHTML = `
${progressHTML}
STEP ${stepIndex} OF ${totalSteps}

${stepData.title}

${questionContentHTML}
`; } window.render = render; /* ========================================================================== 8. INITIALIZATION ========================================================================== */ function initEstimator() { // Modal events getEl('modal-close-x')?.addEventListener('click', closeTermsModal); getEl('modal-agree-btn')?.addEventListener('click', agreeTermsAndClose); getEl('terms-modal')?.addEventListener('click', (e) => { if (e.target === getEl('terms-modal')) closeTermsModal(); }); // Initial render render(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initEstimator); } else { initEstimator(); }

@myhomebuilders

Follow Our Work on Instagram

Discover our latest home transformations and detailed craftsmanship along with exclusive behind-the-scenes moments from each project that showcase the quality and care we bring to every space.

myhome png
myhome png
myhome png
myhome jpg
my home png