/* eslint-disable */ // Godoy Engenharia — main App with router + Tweaks panel + dynamic SEO const { useState: useStateA, useEffect: useEffectA } = React; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "variant": "a", "accent": "electric", "density": "regular", "displayFont": "Space Grotesk", "bodyFont": "Manrope" }/*EDITMODE-END*/; const DISPLAY_FONTS = ["Space Grotesk", "Archivo", "Sora", "Inter Tight"]; const BODY_FONTS = ["Manrope", "Sora", "DM Sans", "IBM Plex Sans"]; // SEO map — title / description per route. Service pages and posts are computed from data. const ROUTE_SEO = { "home": { title: "Godoy Engenharia | Engenharia elétrica em São Paulo", desc: "Projetos, execução, manutenção, laudos e adequações elétricas para indústrias, comércios, galpões e centros logísticos em São Paulo e interior.", }, "quem-somos": { title: "Empresa | Godoy Engenharia", desc: "Empresa de engenharia elétrica em São Paulo. Projeto técnico, responsabilidade de engenharia com ART quando prevista e documentação conforme escopo para obras, expansões e cabines primárias.", }, "segmentos": { title: "Segmentos atendidos | Godoy Engenharia", desc: "Engenharia elétrica para indústrias farmacêuticas, automotivas, alimentícias, químicas, galpões, centros logísticos, transportadoras, varejo, edifícios corporativos e expansões operacionais.", }, "obras": { title: "Obras realizadas | Godoy Engenharia", desc: "Cases técnicos: cabines primárias, instalações elétricas industriais e comerciais, retrofit, expansão, SPDA, laudos e adequação normativa.", }, "blog": { title: "Blog técnico | Godoy Engenharia", desc: "Artigos técnicos de engenharia elétrica: projeto executivo, cabines primárias, retrofit, SPDA, entrada de energia e adequação NR-10.", }, "contato": { title: "Solicitação técnica · Contato | Godoy Engenharia", desc: "Envie seu projeto, escopo ou necessidade técnica para a Godoy Engenharia. WhatsApp (11) 98746-4004.", }, "politica-de-privacidade": { title: "Política de Privacidade | Godoy Engenharia", desc: "Como a Godoy Engenharia trata os dados informados pelo visitante ao entrar em contato pelo site, formulário, WhatsApp ou e-mail. LGPD.", }, }; // Keyword-rich SEO per priority service page (clean URLs). const SERVICE_SEO = { "instalacoes-eletricas": { title: "Instalação Elétrica Industrial em São Paulo | Godoy Engenharia", desc: "Instalações elétricas industriais para fábricas, galpões, centros logísticos e operações comerciais de grande porte em São Paulo.", }, "cabines-primarias": { title: "Cabines Primárias em São Paulo | Godoy Engenharia", desc: "Projeto, instalação, manutenção e adequação de cabines primárias e sistemas de média tensão para empresas em São Paulo.", }, "spda-aterramento": { title: "SPDA Industrial em São Paulo | Godoy Engenharia", desc: "Projeto, inspeção, adequação e laudo de SPDA e aterramento para indústrias, galpões e operações corporativas.", }, "manutencao-eletrica": { title: "Manutenção Elétrica Industrial em SP | Godoy Engenharia", desc: "Manutenção preventiva, inspeção elétrica, termografia, revisão de quadros e plano de adequação para empresas.", }, "retrofit": { title: "Retrofit Elétrico Industrial | Godoy Engenharia", desc: "Modernização de instalações elétricas, atualização de quadros, reorganização de circuitos e adequação normativa para empresas.", }, "entrada-energia-aumento-carga": { title: "Entrada de Energia e Aumento de Carga | Godoy Engenharia", desc: "Análise, projeto e adequação de entrada de energia para empresas que precisam ampliar carga, instalar máquinas ou expandir a operação.", }, "projetos-laudos": { title: "Projetos e Laudos Elétricos | Godoy Engenharia", desc: "Projetos executivos, laudos técnicos, memoriais e documentação elétrica com responsabilidade técnica para indústrias e comércios.", }, "inspecao-eletrica": { title: "Inspeção Elétrica e Adequação NR-10 | Godoy Engenharia", desc: "Inspeção elétrica, termografia, análise de quadros e adequação à NR-10 para indústrias, galpões e operações corporativas.", }, }; // Landing pages keyword-rich (Ads + SEO) — H1, SEO e texto próprios. const LANDINGS = { "lp/galpao-sp": { base: "instalacoes-eletricas", eyebrow: "INSTALAÇÃO ELÉTRICA · GALPÕES", crumb: "Instalação elétrica para galpões", h1: "Instalação elétrica para galpões em São Paulo", title: "Instalação Elétrica para Galpões em SP | Godoy Engenharia", desc: "Infraestrutura elétrica para galpões industriais, centros logísticos, transportadoras e operações comerciais de grande porte.", short: "Infraestrutura elétrica completa para galpões, centros logísticos, transportadoras e operações de grande porte em São Paulo: entrada de energia, quadros, alimentadores, iluminação, pontos de força, SPDA e aterramento — do projeto à entrega técnica.", }, "lp/nr10": { base: "inspecao-eletrica", eyebrow: "ADEQUAÇÃO NR-10", crumb: "Adequação NR-10 industrial", h1: "Adequação NR-10 industrial em São Paulo", title: "Adequação NR-10 Industrial em SP | Godoy Engenharia", desc: "Adequação à NR-10, inspeção elétrica, prontuário das instalações, laudos e plano de ação para indústrias, galpões e operações corporativas.", short: "Adequação à NR-10 para empresas em São Paulo: inspeção das instalações, análise de quadros, termografia, identificação de não conformidades, prontuário das instalações elétricas e plano de ação para regularização técnica.", }, "lp/orcamento": { contact: true, eyebrow: "ORÇAMENTO ELÉTRICO", crumb: "Orçamento elétrico industrial", h1: "Orçamento de engenharia elétrica industrial", title: "Orçamento Elétrico Industrial em SP | Godoy Engenharia", desc: "Solicite orçamento de instalação, manutenção, cabine primária, SPDA, laudo ou retrofit elétrico para sua operação em São Paulo e interior.", short: "Solicite um orçamento técnico de engenharia elétrica para indústrias, galpões, centros logísticos e operações comerciais. Envie sua demanda — instalação, manutenção, cabine primária, entrada de energia, SPDA, laudo ou retrofit — e a engenharia retorna com a análise inicial.", }, }; // ── Clean-URL routing ────────────────────────────── // Internal route name ↔ real pathname (no hash). Keyword-rich for SEO/Ads. const ROUTE_TO_PATH = { "home": "/", "servico/instalacoes-eletricas": "/instalacao-eletrica-industrial", "servico/cabines-primarias": "/cabines-primarias-sao-paulo", "servico/spda-aterramento": "/spda-industrial-sao-paulo", "servico/manutencao-eletrica": "/manutencao-eletrica-industrial-sp", "servico/retrofit": "/retrofit-eletrico-industrial", "servico/entrada-energia-aumento-carga": "/entrada-de-energia-aumento-de-carga", "servico/projetos-laudos": "/projetos-laudos-eletricos", "servico/inspecao-eletrica": "/inspecao-eletrica-industrial", "segmentos": "/segmentos", "obras": "/obras", "blog": "/blog", "quem-somos": "/empresa", "contato": "/contato", "politica-de-privacidade": "/politica-de-privacidade", // Landing pages keyword (próprio H1/SEO, conteúdo dedicado) "lp/galpao-sp": "/instalacao-eletrica-galpao-sp", "lp/nr10": "/adequacao-nr10-industrial", "lp/orcamento": "/orcamento-eletrico-industrial", }; // Reverse map + aliases (extra keyword pages that resolve to an existing route). const PATH_TO_ROUTE = Object.fromEntries( Object.entries(ROUTE_TO_PATH).map(([r, p]) => [p, r]) ); // (Landings agora são rotas próprias — sem aliases.) const PATH_ALIASES = {}; function pathToRoute(pathname) { let p = (pathname || "/").replace(/\/+$/, ""); if (p === "") p = "/"; if (PATH_TO_ROUTE[p]) return PATH_TO_ROUTE[p]; if (PATH_ALIASES[p]) return PATH_ALIASES[p]; const mBlog = p.match(/^\/blog\/(.+)$/); if (mBlog) return "blog/" + mBlog[1]; return null; } function routeToPath(route) { if (ROUTE_TO_PATH[route]) return ROUTE_TO_PATH[route]; if (route.startsWith("blog/")) return "/blog/" + route.slice(5); if (route.startsWith("servico/")) return "/" + route.slice(8); return "/" + route; } function applySeo({ title, desc, canonical, image, imageAlt }) { document.title = title; let m = document.querySelector('meta[name="description"]'); if (!m) { m = document.createElement("meta"); m.name = "description"; document.head.appendChild(m); } m.content = desc; // Open Graph const setOg = (prop, val) => { let og = document.querySelector(`meta[property="${prop}"]`); if (!og) { og = document.createElement("meta"); og.setAttribute("property", prop); document.head.appendChild(og); } og.content = val; }; const setName = (name, val) => { let mt = document.querySelector(`meta[name="${name}"]`); if (!mt) { mt = document.createElement("meta"); mt.setAttribute("name", name); document.head.appendChild(mt); } mt.content = val; }; setOg("og:title", title); setOg("og:description", desc); setOg("og:type", image ? "article" : "website"); setOg("og:locale", "pt_BR"); setOg("og:site_name", "Godoy Engenharia"); if (canonical) setOg("og:url", canonical); if (image) { setOg("og:image", image); setOg("og:image:width", "1200"); setOg("og:image:height", "675"); if (imageAlt) setOg("og:image:alt", imageAlt); // Twitter setName("twitter:card", "summary_large_image"); setName("twitter:title", title); setName("twitter:description", desc); setName("twitter:image", image); if (imageAlt) setName("twitter:image:alt", imageAlt); } // canonical if (canonical) { let link = document.querySelector('link[rel="canonical"]'); if (!link) { link = document.createElement("link"); link.rel = "canonical"; document.head.appendChild(link); } link.href = canonical; } } function GEApp() { const data = window.GE_DATA; const [route, setRoute] = useStateA(() => { // 1) Prefer clean pathname. 2) Fall back to legacy hash. 3) home. const fromPath = pathToRoute(window.location.pathname); if (fromPath) return fromPath; const hash = window.location.hash.replace(/^#/, ""); return hash || "home"; }); const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); const [toast, setToast] = useStateA(""); const go = (next) => { setRoute(next); const path = routeToPath(next); try { window.history.pushState({ route: next }, "", path); } catch (e) { window.location.hash = next; // fallback (e.g. file://) } window.scrollTo({ top: 0 }); document.querySelector(".ge-app-scroll")?.scrollTo({ top: 0 }); }; useEffectA(() => { // Back/forward navigation with real URLs const onPop = () => { const fromPath = pathToRoute(window.location.pathname); const hash = window.location.hash.replace(/^#/, ""); setRoute(fromPath || hash || "home"); }; window.addEventListener("popstate", onPop); // Legacy hash support (old links / bookmarks) const onHash = () => { const hash = window.location.hash.replace(/^#/, ""); if (hash) setRoute(hash); }; window.addEventListener("hashchange", onHash); // If the page loaded on a legacy #hash, normalize to a clean URL. const initialHash = window.location.hash.replace(/^#/, ""); if (initialHash && !pathToRoute(window.location.pathname)) { try { window.history.replaceState({ route: initialHash }, "", routeToPath(initialHash)); } catch (e) {} } return () => { window.removeEventListener("popstate", onPop); window.removeEventListener("hashchange", onHash); }; }, []); // SEO meta updates per route useEffectA(() => { const base = `https://${data.brand.domain}`; let seo; // Remove any per-page Service schema injected by previous render document.querySelectorAll('script[data-ld="service-page"]').forEach((n) => n.remove()); if (route.startsWith("lp/")) { // Landing pages keyword — SEO próprio + Service JSON-LD (quando baseado em serviço) const lp = LANDINGS[route]; const cleanUrl = `${base}${routeToPath(route)}`; seo = lp ? { title: lp.title, desc: lp.desc, canonical: cleanUrl } : ROUTE_SEO.home; if (lp && lp.base) { const svc = data.services.find((s) => s.slug === lp.base); if (svc) { const ld = document.createElement("script"); ld.type = "application/ld+json"; ld.setAttribute("data-ld", "service-page"); ld.text = JSON.stringify({ "@context": "https://schema.org", "@type": "Service", "@id": `${cleanUrl}#service`, name: lp.h1, description: lp.desc, serviceType: svc.title, provider: { "@id": `${base}/#org` }, areaServed: ["São Paulo", "Grande São Paulo", "Interior de São Paulo"], url: cleanUrl, category: "Engenharia elétrica", }); document.head.appendChild(ld); } } } else if (route.startsWith("servico/")) { const slug = route.slice(8); const svc = data.services.find((s) => s.slug === slug); const cleanUrl = `${base}${routeToPath(route)}`; // Keyword-rich title/description per priority service page const sseo = SERVICE_SEO[slug]; seo = svc ? { title: sseo ? sseo.title : `${svc.title} | Godoy Engenharia`, desc: sseo ? sseo.desc : svc.lede.slice(0, 158), canonical: cleanUrl, } : ROUTE_SEO.home; // Inject Service JSON-LD for the current service if (svc) { const ld = document.createElement("script"); ld.type = "application/ld+json"; ld.setAttribute("data-ld", "service-page"); ld.text = JSON.stringify({ "@context": "https://schema.org", "@type": "Service", "@id": `${cleanUrl}#service`, name: svc.title, description: svc.lede, serviceType: svc.title, provider: { "@id": `${base}/#org` }, areaServed: ["São Paulo", "Grande São Paulo", "Interior de São Paulo"], url: cleanUrl, category: "Engenharia elétrica", hasOfferCatalog: { "@type": "OfferCatalog", name: svc.title, itemListElement: (svc.bullets || []).map((b, i) => ({ "@type": "Offer", position: i + 1, itemOffered: { "@type": "Service", name: b } })) } }); document.head.appendChild(ld); } } else if (route.startsWith("blog/")) { const slug = route.slice(5); const post = data.posts.find((p) => p.slug === slug); const bc = (window.GE_BLOG && window.GE_BLOG[slug]) || null; seo = post ? { title: (bc && bc.seoTitle) || `${post.title} | Blog | Godoy Engenharia`, desc: (bc && bc.metaDescription) || post.excerpt.slice(0, 158), canonical: `${base}/blog/${slug}`, image: post.img ? `${base}/img/hero/${post.img}.webp` : undefined, imageAlt: post.imgAlt, } : ROUTE_SEO.blog; } else { const r = ROUTE_SEO[route] || ROUTE_SEO.home; seo = { ...r, canonical: `${base}${routeToPath(route)}` }; } applySeo(seo); }, [route]); // One-time: organization JSON-LD + Google Fonts pre-load (for tweakable fonts) useEffectA(() => { // Global click tracker — dataLayer events for data-ge-cta tagged elements const onClick = (e) => { const el = e.target.closest("[data-ge-cta]"); if (!el) return; const kind = el.getAttribute("data-ge-cta"); const loc = el.getAttribute("data-ge-loc") || ""; const map = { primary: "click_cta_primary", secondary: "click_cta_secondary", whatsapp: "click_whatsapp", email: "click_email", linkedin: "click_linkedin", instagram: "click_instagram", cases: "click_cases", menu_services: "click_menu_services", menu_contact: "click_menu_contact", }; const evt = map[kind] || "click_cta"; try { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: evt, location: loc, button_text: (el.textContent || "").trim().slice(0, 60), page_url: location.href, page_title: document.title, }); } catch (err) {} // Google Ads conversions — WhatsApp e E-mail (form_submit é disparado no envio do formulário) try { if (typeof window.gtag === "function") { if (kind === "whatsapp") { window.gtag("event", "conversion", { send_to: "AW-736387313/0Cy1CIDcpbUcEPHBkd8C" }); } else if (kind === "email" || kind === "secondary") { window.gtag("event", "conversion", { send_to: "AW-736387313/PGcwCIbcpbUcEPHBkd8C" }); } } } catch (err) {} }; document.addEventListener("click", onClick, true); const all = new Set([...DISPLAY_FONTS, ...BODY_FONTS]); const families = Array.from(all).map((f) => f.replace(/ /g, "+") + ":wght@400;500;600;700").join("&family="); if (!document.getElementById("ge-tweak-fonts")) { const link = document.createElement("link"); link.id = "ge-tweak-fonts"; link.rel = "stylesheet"; link.href = `https://fonts.googleapis.com/css2?family=${families}&display=swap`; document.head.appendChild(link); } // JSON-LD base (Organization + LocalBusiness + WebSite + sameAs) já está // no do index.html. Não injetamos LocalBusiness duplicado aqui para // evitar conflito de @id e sameAs vazio. Apenas o Service por página é // adicionado dinamicamente (ver efeito de SEO acima). }, []); const renderRoute = () => { if (route === "home") return ; if (route === "quem-somos") return ; if (route === "segmentos") return ; if (route === "obras") return ; if (route === "blog") return ; if (route === "contato") return { setToast("Solicitação enviada com sucesso. A equipe da Godoy Engenharia retornará para alinhamento técnico."); go("home"); }}/>; if (route === "politica-de-privacidade") return ; if (route.startsWith("blog/")) return ; if (route.startsWith("servico/")) return ; if (route.startsWith("lp/")) { const lp = LANDINGS[route]; if (lp && lp.contact) return { setToast("Solicitação enviada com sucesso. A equipe da Godoy Engenharia retornará para alinhamento técnico."); go("home"); }}/>; if (lp) return ; } return ; }; return (
{renderRoute()} setToast("")}/> setTweak("variant", v)} /> setTweak("accent", v)} /> setTweak("density", v)} /> setTweak("displayFont", v)} /> setTweak("bodyFont", v)} />
{[ ["home", "Home"], ["quem-somos", "Empresa"], ["segmentos", "Segmentos"], ["obras", "Obras"], ["servico/instalacoes-eletricas", "Serviço · Instalações"], ["servico/entrada-energia-aumento-carga", "Serviço · Entrada / Aumento"], ["servico/cabines-primarias", "Serviço · Cabine primária"], ["servico/manutencao-eletrica", "Serviço · Manutenção"], ["servico/projetos-laudos", "Serviço · Projetos e laudos"], ["servico/spda-aterramento", "Serviço · SPDA"], ["servico/retrofit", "Serviço · Retrofit"], ["servico/inspecao-eletrica", "Serviço · Inspeção"], ["blog", "Blog"], ["blog/quando-aumentar-carga", "Blog · Post exemplo"], ["contato", "Contato"], ].map(([r, label]) => ( ))}
); } ReactDOM.createRoot(document.getElementById("root")).render();