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(); }

Disclaimer

Disclaimer for MY Home Builders, Inc.

If you require any additional information or have any questions about our site’s disclaimer, please feel free to contact us.

All the information on this website is published in good faith and for general, informational purposes only. My Home Builders, Inc. does not make any guarantees regarding the completeness, reliability and accuracy of this information. Any action you take upon the information you find on this website, is strictly at your own risk. We will not be liable for any losses and/or damages in connection with the use of our website.

From our website, you can visit other websites by following hyperlinks to such external sites. While we strive to provide only quality links to useful and ethical websites, we have no control over the content and nature of these sites. These links to other websites do not imply a recommendation for all the content found on these sites. Site owners and content may change without notice and may occur before we have the opportunity to remove a link which may have gone ‘bad’.

Please also be aware that when you leave our website, other sites may have different privacy policies and terms which are beyond our control. Please be sure to check the privacy policies of these sites as well as their “Terms of Service” before engaging in any business or uploading any information.

Consent

By using our website, you hereby consent to our disclaimer and agree to its terms.

Update

Should we update, amend or make any changes to this document, those changes will be prominently posted here.