Storm hit and you don’t know what’s damaged
Houston hailstorms and high winds often cause damage that isn’t visible from the ground — until it starts leaking inside.
La tormenta pegó pero no sabes qué daños tiene tu techo.
Storm damage? Leaks? Missing shingles? We inspect, report, and restore —
with zero out-of-pocket cost through insurance when applicable.
¿Daños por tormenta? ¿Goteras? Te ayudamos con el proceso de seguro, sin costo inicial.
Free 30-point inspection + detailed photo report / Inspección gratuita
Storm damage insurance specialists — we handle the claim
25-year manufacturer warranty on every project
Licensed & fully insured — A+ BBB rated
Si eres dueño de casa en Houston, seguro reconoces alguna de estas situaciones
Houston hailstorms and high winds often cause damage that isn’t visible from the ground — until it starts leaking inside.
La tormenta pegó pero no sabes qué daños tiene tu techo.
Paperwork, adjusters, timelines — navigating an insurance claim alone can cost you thousands you’re owed.
El proceso de seguro parece complicado y no sabes cómo manejarlo.
Projects that drag on forever, surprise costs, or shoddy work that fails in the next storm. You need someone you can trust.
Malas experiencias con contratistas que no cumplen lo que prometen.
«If any of this sounds familiar — you’re exactly who we built Roofers Supreme for.
Si algo de esto te suena, estás en el lugar correcto.»
No surprises. No pressure. Just a clear path to a protected home.
Sin sorpresas. Sin presión. Solo resultados.
Our certified inspector comes to you — same day when possible. 30-point check, full photo documentation.
Inspección gratuita, mismo día si es posible.
You receive a detailed 30-page report plus a transparent, itemized quote. We also assist with your insurance claim.
Reporte detallado + cotización transparente + ayuda con tu seguro.
Pick your installation date. No waiting in line — we block your spot and commit to the timeline.
Escoge tu fecha. Te asignamos un slot garantizado.
Certified crew installs your new roof in 5 days. We leave your property cleaner than we found it — guaranteed.
Instalación en 5 días + limpieza total incluida.
¿Este servicio es para ti? Lee esto antes de solicitar tu inspección
Lo que dicen nuestros clientes — results that speak for themselves
«After the hail storm I had no idea what to do. Roofers Supreme came out the same day, handled my insurance claim, and my roof was done in 4 days. Couldn’t believe it.»
«Habían prometido terminar en una semana y cumplieron al pie de la letra. El equipo fue muy profesional, limpiaron todo. Recomiendo al 100%.»
«They helped us get $18,500 back from insurance for a full roof replacement we didn’t even know we were entitled to. Roofers Supreme found damage we couldn’t see.»
Built in Houston, for Houston. We know what it means when a storm rolls through this city —
we’ve seen the damage firsthand, and we’ve helped hundreds of families get their homes back
in order, faster and more affordably than they thought possible.
Construidos en Houston, para Houston. Hemos ayudado a cientos de familias a recuperar la
protección y tranquilidad de su hogar — con calidad, honestidad y resultados duraderos.
«We don’t just fix roofs. We protect what matters most to you.»
Todo incluido sin costo — no hay trampa, no hay compromiso
$199
$99
$299
Incl.
No purchase required · No obligation · 100% free
Sin compromiso de compra · 100% gratuito
Takes 60 seconds — an inspector will contact you within 2 hours
Solo 60 segundos — un inspector te contactará en menos de 2 horas
Preguntas frecuentes — answered honestly
Yes — 100% free, no strings attached. Our free inspection includes a 30-point roof assessment and a detailed photo report. You’re under zero obligation to hire us.
Sí, 100% gratuita. La inspección incluye evaluación de 30 puntos y reporte fotográfico. Cero obligación de contratar.
We document all damage, prepare the report for your insurance adjuster, and guide you through the entire claims process. In many cases, your deductible is the only out-of-pocket cost — we handle the rest.
Documentamos todos los daños, preparamos el reporte para tu adjuster y te guiamos en el proceso. En muchos casos, solo pagas tu deducible.
From your first call to project completion: typically 5–7 business days. The installation itself takes 1–5 days depending on your roof size. We give you a fixed date and stick to it.
De tu primera llamada hasta el proyecto terminado: 5–7 días hábiles. La instalación dura 1–5 días según el tamaño del techo.
We serve the entire Houston metropolitan area including Katy, Sugar Land, The Woodlands, Pasadena, Pearland, Humble, Spring, Cypress, and surrounding suburbs. Enter your ZIP code in the form to confirm coverage.
Servimos toda el área metropolitana de Houston y sus suburbios. Ingresa tu código postal en el formulario para confirmar cobertura.
Within 2 hours, one of our project coordinators will contact you by phone or WhatsApp to schedule your free inspection. Same-day slots are often available.
En menos de 2 horas, uno de nuestros coordinadores te contactará por teléfono o WhatsApp para agendar tu inspección gratuita.
Yes. Roofers Supreme is fully licensed in the state of Texas, carries general liability insurance, and has an A+ rating with the Better Business Bureau. We’ll provide documentation upon request.
Sí. Roofers Supreme está completamente licenciada en Texas, tiene seguro de responsabilidad y calificación A+ con el BBB.
Still have questions? / ¿Tienes más preguntas?
One of our certified inspectors will contact you within 2 hours to schedule your free roof inspection.
Un inspector certificado te contactará en menos de 2 horas para agendar tu inspección gratuita.
«They were at my house within hours. The report was incredibly detailed. Couldn’t be happier.»
— Sarah K., Pearland TX · Storm Damage Claim
«El proceso fue sencillo, rápido y transparente. Mi techo nuevo quedó perfecto en 5 días.»
— Carlos M., Katy TX · Full Roof Replacement
// ---- MULTI-STEP FORM ---- function nextStep(currentStep) { // Validate current step has a selection const page = document.getElementById('form-page-' + currentStep); const radios = page.querySelectorAll('input[type="radio"]'); if (radios.length > 0) { const name = radios[0].name; const checked = page.querySelector('input[name="' + name + '"]:checked'); if (!checked) { // Shake the options const group = page.querySelector('.form-radio-group'); group.style.animation = 'none'; group.offsetHeight; group.style.animation = 'shake 0.4s ease'; return; } } // Hide current, show next document.getElementById('form-page-' + currentStep).classList.add('hidden'); document.getElementById('form-page-' + (currentStep + 1)).classList.remove('hidden'); updateSteps(currentStep + 1); // Scroll form into view document.getElementById('form-section').scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }
function prevStep(currentStep) { document.getElementById('form-page-' + currentStep).classList.add('hidden'); document.getElementById('form-page-' + (currentStep - 1)).classList.remove('hidden'); updateSteps(currentStep - 1); }
function updateSteps(activeStep) { const steps = document.querySelectorAll('.form-step'); const lines = document.querySelectorAll('.form-step-line'); steps.forEach((step, i) => { const stepNum = i + 1; step.classList.remove('active', 'completed'); if (stepNum < activeStep) step.classList.add('completed'); else if (stepNum === activeStep) step.classList.add('active'); // Show checkmark for completed step.querySelector('span').textContent = stepNum < activeStep ? '✓' : stepNum; }); lines.forEach((line, i) => { line.classList.toggle('completed', i + 1 < activeStep); }); // Update progressbar aria const form = document.getElementById('lead-form'); const pb = form.querySelector('[role="progressbar"]'); if (pb) pb.setAttribute('aria-valuenow', activeStep); } // Shake animation for validation const shakeStyle = document.createElement('style'); shakeStyle.textContent = '@keyframes shake { 0%,100%{transform:translateX(0)} 20%{transform:translateX(-6px)} 40%{transform:translateX(6px)} 60%{transform:translateX(-4px)} 80%{transform:translateX(4px)} }'; document.head.appendChild(shakeStyle); // ---- IMAGE LAZY LOAD WITH FADE ---- document.querySelectorAll('img[loading="lazy"]').forEach(img => { if (img.complete) { img.classList.add('loaded'); } else { img.addEventListener('load', () => img.classList.add('loaded')); img.addEventListener('error', () => img.classList.add('loaded')); // show even on error } }); // Eager images always visible document.querySelectorAll('img[loading="eager"]').forEach(img => { img.style.opacity = '1'; });
// ---- RADIO CHECKED VISUAL FALLBACK (iOS Safari :has() support) ---- document.querySelectorAll('.form-radio-label input[type="radio"]').forEach(radio => { radio.addEventListener('change', function() { // Remove active from all in same group const name = this.name; document.querySelectorAll(`input[name="${name}"]`).forEach(r => { r.closest('.form-radio-label').style.borderColor = ''; r.closest('.form-radio-label').style.background = ''; }); // Add active to checked if (this.checked) { this.closest('.form-radio-label').style.borderColor = 'var(--gold)'; this.closest('.form-radio-label').style.background = 'rgba(200,169,81,0.06)'; } }); });
// ---- SCROLL TO FORM ---- function scrollToForm(e) { if (e) e.preventDefault(); const formSection = document.getElementById('form-section'); if (formSection) { formSection.scrollIntoView({ behavior: 'smooth', block: 'start' }); setTimeout(() => { const firstField = document.getElementById('field-name'); if (firstField) firstField.focus(); }, 600); } }
// ---- FAQ ACCORDION ---- function toggleFaq(btn) { const answer = btn.nextElementSibling; const isOpen = btn.getAttribute('aria-expanded') === 'true'; // Close all document.querySelectorAll('.faq-question').forEach(b => { b.setAttribute('aria-expanded', 'false'); b.nextElementSibling.classList.remove('open'); }); // Open clicked if was closed if (!isOpen) { btn.setAttribute('aria-expanded', 'true'); answer.classList.add('open'); } }
// ---- FORM SUBMIT ---- function handleFormSubmit(e) { e.preventDefault(); const form = e.target; // Validate step 4 contact fields const name = form.querySelector('#field-name').value.trim(); const phone = form.querySelector('#field-phone').value.trim(); const email = form.querySelector('#field-email').value.trim(); const city = form.querySelector('#field-city').value.trim(); const prop = form.querySelector('input[name="property_type"]:checked'); const own = form.querySelector('input[name="ownership"]:checked'); const svc = form.querySelector('input[name="service_type"]:checked');
if (!name || !phone || !email || !city) { alert('Please fill in all contact fields.\n\nPor favor completa todos tus datos de contacto.'); return; } // Email validation if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { alert('Please enter a valid email address.\nPor favor ingresa un email válido.'); form.querySelector('#field-email').focus(); return; }
// Show Thank You Page showThankYouPage(name); }
// ---- SHOW THANK YOU PAGE ---- function showThankYouPage(name) { const mainPage = document.getElementById('main-page'); const tyPage = document.getElementById('thankyou-page');
// Update personalized headline const firstName = name.split(' ')[0]; const tyHeadline = document.getElementById('ty-name-headline'); if (tyHeadline && firstName.length > 1) { tyHeadline.innerHTML = `You're all set, ${firstName}! ✓`; }
mainPage.style.display = 'none'; tyPage.classList.add('visible'); window.scrollTo({ top: 0, behavior: 'smooth' });
// NOTE: In production, connect form to your CRM/webhook here // Example: fetch('/api/leads', { method: 'POST', body: JSON.stringify(data) }) }
// ---- CALENDLY SIMULATION ---- function openCalendlySimulation(e) { e.preventDefault(); alert('📅 Calendly / Scheduling Link\n\nReplace this with your actual scheduling link:\nwww.calendly.com/rooferssupreme\n\nThis button is ready to be configured by the Roofers Supreme team.'); }
// ---- SCROLL ANIMATIONS ---- const fadeEls = document.querySelectorAll('.fade-up'); const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('visible'); observer.unobserve(entry.target); } }); }, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' }); fadeEls.forEach(el => observer.observe(el));
// ---- URGENCY BAR LANGUAGE TOGGLE ---- // Shows English by default, toggles Spanish inline const urgencySpans = document.querySelectorAll('.urgency-bar span[style*="none"]'); // Left as enhancement — bilingual text shown via CSS display toggle if needed
// ---- SCHEMA MARKUP ---- const schema = { "@context": "https://schema.org", "@type": "LocalBusiness", "name": "Roofers Supreme", "description": "Licensed & insured roofing contractor in Houston, TX. Free roof inspection, storm damage specialists, 25-year warranty.", "url": "https://rooferssupremellc.com", "telephone": "+18326773462", "address": { "@type": "PostalAddress", "addressLocality": "Houston", "addressRegion": "TX", "addressCountry": "US" }, "areaServed": { "@type": "GeoCircle", "geoMidpoint": { "@type": "GeoCoordinates", "latitude": 29.7604, "longitude": -95.3698 }, "geoRadius": "80000" }, "priceRange": "$$$$", "openingHours": "Mo-Sa 08:00-18:00", "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.9", "reviewCount": "200", "bestRating": "5" }, "sameAs": [ "https://www.facebook.com/roofersupreme", "https://www.instagram.com/roofersupreme" ] }; const schemaScript = document.createElement('script'); schemaScript.type = 'application/ld+json'; schemaScript.textContent = JSON.stringify(schema); document.head.appendChild(schemaScript);