// components.jsx — Denis Moriama site components const { useState, useEffect, useRef, useMemo } = React; // ───────────────────────────────────────────────────────────────── // NAVIGATION // ───────────────────────────────────────────────────────────────── function Nav() { const [scrolled, setScrolled] = useState(false); useEffect(() => { const on = () => setScrolled(window.scrollY > 80); on(); window.addEventListener("scroll", on, { passive: true }); return () => window.removeEventListener("scroll", on); }, []); return ( ); } // ───────────────────────────────────────────────────────────────── // HERO // ───────────────────────────────────────────────────────────────── function Hero() { return (
ProjetoConstruçãoGestão Total de Obra

Do papel
à realidade,
com excelência.

Especialista em projeto e construção, Denis Moriama entrega muito mais do que um projeto: entrega a obra pronta, gerenciada do início ao fim, com a qualidade que o seu patrimônio merece.

Solicitar Orçamento
Alphaville · SP · Brasil
Role
Por Denis Moriama · CAU/SP
); } // ───────────────────────────────────────────────────────────────── // INTRO + NUMBERS // ───────────────────────────────────────────────────────────────── function CountUp({ to, duration = 1800, decimals = 0 }) { const [val, setVal] = useState(0); const ref = useRef(null); const started = useRef(false); useEffect(() => { const obs = new IntersectionObserver((entries) => { entries.forEach((e) => { if (e.isIntersecting && !started.current) { started.current = true; const start = performance.now(); const tick = (t) => { const p = Math.min(1, (t - start) / duration); const eased = 1 - Math.pow(1 - p, 3); setVal(to * eased); if (p < 1) requestAnimationFrame(tick); }; requestAnimationFrame(tick); } }); }, { threshold: 0.4 }); if (ref.current) obs.observe(ref.current); return () => obs.disconnect(); }, [to, duration]); return {val.toFixed(decimals)}; } function Intro({ stats }) { return (
O Arquiteto-Construtor

Denis não fica
só no desenho.

Está presente na obra todos os dias — de uniforme, dominando cada etapa técnica, garantindo que o que foi projetado seja exatamente o que será entregue.

São projetos e construções em Alphaville e São Paulo que refletem o compromisso de transformar o patrimônio do cliente em um espaço de excelência real, do primeiro traço à última instalação.

+
Anos de experiência em projeto e construção
+
Projetos entregues com gestão total de obra
+
Reformados e construídos em SP e Alphaville
01
Arquiteto que domina do traço à estrutura
); } // ───────────────────────────────────────────────────────────────── // PORTFOLIO // ───────────────────────────────────────────────────────────────── const PROJECTS = [ { id: 1, name: "Casa Anália Franco", cat: "Residencial", tags: ["Residencial", "Reforma"], loc: "São Paulo · SP", img: "assets/projeto-02-fachada-jardim.webp", size: "p-tall", year: "2024", area: "330 m²", scope: "Projeto arquitetônico, reforma estrutural e execução completa.", desc: "Reforma residencial com integração entre interior e jardim. Madeira queimada, vidro estrutural e iluminação cênica embutida para uma fachada que respira com o jardim.", }, { id: 2, name: "Loft Vila Madalena", cat: "Reforma · Execução", tags: ["Residencial", "Reforma", "Execução de Obra"], loc: "São Paulo · SP", img: "assets/projeto-03-interior-loft.webp", size: "p-short", year: "2024", area: "180 m²", scope: "Instalações elétricas, execução técnica e acabamentos.", desc: "Loft industrial com divisórias de vidro canelado e estrutura metálica preta. Concreto aparente preservado, mobiliário em tons quentes para suavizar a aspereza do bruto.", }, { id: 3, name: "Refúgio Alphaville", cat: "Residencial", tags: ["Residencial"], loc: "Alphaville · SP", img: "assets/projeto-05-portfolio.webp", size: "p-wide", year: "2025", area: "320 m²", scope: "Projeto e construção integral.", desc: "Casa térrea entre pinheiros. Cobogós cerâmicos, concreto aparente e madeira branca laqueada formam uma fachada quase silenciosa, que se entrega ao jardim.", }, { id: 4, name: "Suíte Master", cat: "Interiores", tags: ["Residencial", "Reforma"], loc: "Alphaville · SP", img: "assets/projeto-04-quarto-luxo.webp", size: "p-side", year: "2025", area: "85 m²", scope: "Reforma de interiores e detalhamento de marcenaria.", desc: "Suíte master com piso de concreto polido, esquadrias metálicas pretas e vidro canelado. Mobiliário em linho e madeira maciça para temperatura visual.", }, ]; const FILTERS = ["Todos", "Residencial", "Comercial", "Reforma", "Execução de Obra"]; function Portfolio({ onOpen }) { const [filter, setFilter] = useState("Todos"); const list = useMemo(() => ( filter === "Todos" ? PROJECTS : PROJECTS.filter(p => p.tags.includes(filter)) ), [filter]); return (
Nossos projetos

Do conceito
à obra entregue.

Cada projeto carrega a presença direta do Denis: do primeiro traço até o último acabamento. Veja na prática o que significa ter um arquiteto-construtor cuidando do seu espaço.

{FILTERS.map(f => ( ))}
{list.map((p) => (
onOpen(p)}>
{p.name}

{p.name}

{p.cat} {p.loc} · {p.year}
))}
Exibindo {list.length} de {PROJECTS.length} projetos selecionados Ver portfólio completo
); } // ───────────────────────────────────────────────────────────────── // ABOUT // ───────────────────────────────────────────────────────────────── function About() { return (
D
Denis Moriama, arquiteto
CAU/SP · 26 anos de obra
Arquiteto & Construtor

Gestão total da sua obra.
Do projeto à entrega
das chaves.

Denis Moriama é arquiteto especializado em projeto e construção, com atuação em Alphaville e São Paulo. Com anos de experiência no mercado, ele construiu uma reputação baseada em um diferencial claro: ele não apenas projeta — ele constrói.

Presente no dia a dia da obra, Denis domina cada etapa técnica, da estrutura às instalações elétricas e hidráulicas, garantindo que o resultado final seja exatamente o que foi planejado. Essa presença ativa, combinada com uma gestão rigorosa e transparente, é o que gera a confiança dos seus clientes.

01Projeto Arquitetônico
02Gestão Total de Obra
03Execução Técnica
04Interiores & Acabamentos
Consagre ao Senhor tudo o que você faz, e os seus planos serão bem-sucedidos. — Provérbios 16:3
Conheça Denis Moriama
); } // ───────────────────────────────────────────────────────────────── // TESTIMONIALS // ───────────────────────────────────────────────────────────────── const TESTIMONIALS = [ { quote: "Denis entendeu o nosso desejo e a particularidade de cada membro da família antes mesmo de colocar no papel o primeiro traço do projeto.", name: "Família R.", role: "Residencial · Alphaville", }, { quote: "A experiência de trabalhar com Denis foi transformadora. Ele esteve presente em cada etapa da obra — isso fez toda a diferença no resultado final.", name: "Marina A.", role: "Reforma · Vila Madalena", }, { quote: "Profissional impecável. Entregou exatamente o que prometeu, no prazo e com a qualidade que esperávamos para o nosso espaço.", name: "Eduardo C.", role: "Residencial · Anália Franco", }, ]; function Testimonials() { return (
O que nossos clientes falam

Confiança que se constrói
tijolo por tijolo.

03 de 27 depoimentos
{TESTIMONIALS.map((t, i) => (
{t.quote}
{t.name} · {t.role}
))}
); } // ───────────────────────────────────────────────────────────────── // BLOG / ARTICLES // ───────────────────────────────────────────────────────────────── const ARTICLES = [ { n: "01", cat: "Insights", title: "Arquiteto ou engenheiro: qual contratar para a sua obra?", date: "Mar · 2026" }, { n: "02", cat: "Técnica", title: "5 erros que acontecem em reformas sem acompanhamento técnico.", date: "Fev · 2026" }, { n: "03", cat: "Bastidores", title: "Como funciona a gestão total de obra no escritório Denis Moriama.", date: "Jan · 2026" }, ]; function Blog() { return (
Tendências & Técnica

Arquitetura,
construção & gestão de obra.

Conteúdo direto sobre o universo do projeto e construção: do que acontece na obra ao que você precisa saber antes de contratar um arquiteto.

{ARTICLES.map((a, i) => ( {a.n} {a.cat}

{a.title}

{a.date}
))}
Ler todos os artigos
); } // ───────────────────────────────────────────────────────────────── // FINAL CTA // ───────────────────────────────────────────────────────────────── function CTA() { return (
Solicitar Orçamento

Pronto para transformar o seu espaço
com quem entende de obra de verdade?

Denis Moriama cuida do seu projeto e da sua construção do início ao fim. Fale agora e receba um orçamento personalizado para a sua obra em Alphaville ou São Paulo.

Solicitar Orçamento Falar pelo WhatsApp
); } // ───────────────────────────────────────────────────────────────── // FLOATING WHATSAPP // ───────────────────────────────────────────────────────────────── function FloatingWhatsApp() { const [show, setShow] = useState(false); useEffect(() => { const on = () => setShow(window.scrollY > 400); on(); window.addEventListener("scroll", on, { passive: true }); return () => window.removeEventListener("scroll", on); }, []); const msg = encodeURIComponent("Olá Denis! Vim pelo seu site e gostaria de conversar sobre um projeto."); return ( Falar agora ); } // ───────────────────────────────────────────────────────────────── // FOOTER // ───────────────────────────────────────────────────────────────── function Footer() { return ( ); } // ───────────────────────────────────────────────────────────────── // PROJECT MODAL // ───────────────────────────────────────────────────────────────── function ProjectModal({ project, onClose }) { useEffect(() => { const k = (e) => { if (e.key === "Escape") onClose(); }; window.addEventListener("keydown", k); return () => window.removeEventListener("keydown", k); }, [onClose]); return (
{project && (
e.stopPropagation()}>
Projeto · {project.year}

{project.name.split(" ").slice(0, -1).join(" ")}{" "} {project.name.split(" ").slice(-1)[0]}

{project.desc}

Categoria
{project.cat}
Localização
{project.loc}
Área
{project.area}
Escopo
{project.scope}
)}
); } // ───────────────────────────────────────────────────────────────── // AI CONSULTANT — Assistente de Arquitetura // ───────────────────────────────────────────────────────────────── const STYLES = [ { id: "moderno", label: "Moderno", icon: "◻", colors: [{ hex: "#F5F5F5", name: "Branco neve" }, { hex: "#2C2C2C", name: "Cinza antracite" }, { hex: "#C5A059", name: "Dourado" }, { hex: "#E8E4DF", name: "Off-white" }], floor: "Porcelanato claro ou concreto polido", desc: "Linhas retas, espaços integrados e materiais contemporâneos." }, { id: "classico", label: "Clássico", icon: "⬡", colors: [{ hex: "#F4F1EC", name: "Ivory" }, { hex: "#0A1F44", name: "Azul marinho" }, { hex: "#C5A059", name: "Dourado" }, { hex: "#8B5E3C", name: "Madeira" }], floor: "Mármore, granito ou madeira nobre", desc: "Sofisticação atemporal com detalhes ricos e materiais nobres." }, { id: "minimalista", label: "Minimalista", icon: "—", colors: [{ hex: "#FFFFFF", name: "Branco puro" }, { hex: "#E0E0E0", name: "Cinza claro" }, { hex: "#1A1A1A", name: "Preto" }, { hex: "#D6C9B6", name: "Areia" }], floor: "Concreto polido ou porcelanato retificado", desc: "Menos é mais. Espaços limpos, funcionais e sem ruído visual." }, { id: "industrial", label: "Industrial", icon: "⬔", colors: [{ hex: "#3D3D3D", name: "Cinza escuro" }, { hex: "#7A6E64", name: "Cimento" }, { hex: "#C17F24", name: "Cobre" }, { hex: "#F0EBE3", name: "Off-white quente" }], floor: "Cimento queimado ou concreto aparente", desc: "Estruturas expostas, metal e concreto com aconchego controlado." }, { id: "natural", label: "Natural", icon: "◯", colors: [{ hex: "#E8D5B0", name: "Areia quente" }, { hex: "#5C7A3E", name: "Verde oliva" }, { hex: "#8B6914", name: "Ocre" }, { hex: "#C9B99A", name: "Bege natural" }], floor: "Madeira, pedra natural ou cerâmica rústica", desc: "Materiais orgânicos, tons terrosos e conexão com a natureza." }, { id: "contemporaneo", label: "Contemporâneo", icon: "◈", colors: [{ hex: "#F0ECE4", name: "Linho" }, { hex: "#354A5F", name: "Azul ardósia" }, { hex: "#9B7E4E", name: "Caramelo" }, { hex: "#D4CFCA", name: "Greige" }], floor: "Porcelanato bold ou madeira clara", desc: "Mistura elegante entre estilos com toque atual e sofisticado." }, ]; const ROOMS = ["Sala de estar","Cozinha","Suíte master","Banheiro","Área externa","Escritório","Área gourmet","Fachada completa","Quarto de hóspedes","Lavabo"]; const AREAS = ["Até 50 m²","50 a 100 m²","100 a 200 m²","200 a 400 m²","Acima de 400 m²"]; const BUDGETS = ["Até R$ 80 mil","R$ 80 a 200 mil","R$ 200 a 500 mil","R$ 500 mil a 1 mi","Acima de R$ 1 milhão"]; const TIPOS = ["Apartamento","Casa","Imóvel comercial","Outro"]; function AIConsultant() { const [step, setStep] = React.useState(0); const [data, setData] = React.useState({}); const [textInput, setTextInput] = React.useState(""); const [selectedRooms, setSelectedRooms] = React.useState([]); const [sent, setSent] = React.useState(false); const chatRef = React.useRef(null); React.useEffect(() => { if (chatRef.current) chatRef.current.scrollTop = chatRef.current.scrollHeight; }, [step, sent]); function advance(updates) { setData(prev => ({ ...prev, ...updates })); setStep(s => s + 1); setTextInput(""); } function buildWhatsApp() { const s = STYLES.find(x => x.id === data.estilo) || {}; const rooms = selectedRooms.length ? selectedRooms.join(", ") : "—"; const palette = (s.colors || []).map(c => c.name).join(", "); const msg = `Olá Denis! Vim pelo site e tenho interesse em um projeto.\n\n📋 *Briefing do meu projeto:*\n• Tipo do imóvel: ${data.tipo || "—"}\n• Ambientes: ${rooms}\n• Estilo escolhido: ${s.label || "—"}\n• Paleta sugerida: ${palette}\n• Piso recomendado: ${s.floor || "—"}\n• Área estimada: ${data.area || "—"}\n• Orçamento: ${data.orcamento || "—"}\n\n👤 *Meus dados:*\n• Nome: ${data.nome || "—"}\n• Telefone: ${data.telefone || "—"}\n\nAguardo seu contato!`; return `https://wa.me/5511972214510?text=${encodeURIComponent(msg)}`; } const aiMessages = [ "Olá! Sou o assistente de arquitetura do Denis Moriama. Vou te ajudar a montar o briefing do seu projeto — leva menos de 2 minutos. Qual é o tipo do imóvel?", `Ótimo! E quais ambientes você quer reformar ou criar? Selecione todos que se aplicam.`, `Perfeito! Agora me conta: qual estilo visual mais combina com você?`, (d) => { const s = STYLES.find(x => x.id === d.estilo); return `Excelente escolha! O estilo *${s?.label}* pede ${s?.floor}. Aqui está a paleta sugerida para o seu projeto. Qual é a área aproximada?`; }, "Quase lá! Qual é o orçamento estimado para o projeto?", "Para o Denis entrar em contato, qual é o seu nome completo?", (d) => `Prazer, ${d.nome}! E seu WhatsApp para contato?`, (d) => `Perfeito, ${d.nome}! Preparei o briefing completo com a paleta de cores e o piso recomendado. Clique no botão abaixo para enviar tudo para o Denis pelo WhatsApp.`, ]; function getMsg(idx) { const m = aiMessages[Math.min(idx, aiMessages.length - 1)]; return typeof m === "function" ? m(data) : m; } const selectedStyle = STYLES.find(x => x.id === data.estilo); return (
{/* Left — copy */}
Novo · Consultor de Arquitetura

Seu projeto começa
com uma conversa.

Nosso assistente de arquitetura coleta todas as informações do seu espaço, sugere paleta de cores e materiais para o seu estilo, e entrega o briefing completo direto para o Denis.

01
Conte sobre o imóvelTipo, ambientes e área que deseja reformar
02
Escolha seu estiloReceba paleta de cores e piso recomendado
03
Denis recebe o briefingPelo WhatsApp, já com todas as informações
{/* Right — chat */}
DM
Assistente Denis Moriama
online agora
{Array.from({ length: step + 1 }).map((_, i) => (
{getMsg(i)}
{/* Step-specific content inside bubble */} {i === 2 && data.estilo && (
{(STYLES.find(x => x.id === data.estilo)?.colors || []).map((c, ci) => (
{c.name}
))}
)} {i === 2 && data.estilo && data.area && (
Piso: {STYLES.find(x => x.id === data.estilo)?.floor}
)}
))} {/* Show color palette right after style is chosen */} {step === 3 && selectedStyle && (
{selectedStyle.colors.map((c, ci) => (
{c.name}
))}
🪵 Piso recomendado: {selectedStyle.floor}
)} {sent && (
✓ Briefing enviado! Denis entrará em contato em breve.
)}
{/* Input area */}
{step === 0 && (
{TIPOS.map(t => ( ))}
)} {step === 1 && (
{ROOMS.map(r => ( ))}
{selectedRooms.length > 0 && ( )}
)} {step === 2 && (
{STYLES.map(s => ( ))}
)} {step === 3 && (
{AREAS.map(a => ( ))}
)} {step === 4 && (
{BUDGETS.map(b => ( ))}
)} {step === 5 && (
{ e.preventDefault(); if (textInput.trim()) advance({ nome: textInput.trim() }); }}>
setTextInput(e.target.value)} placeholder="Seu nome completo" autoFocus />
)} {step === 6 && (
{ e.preventDefault(); if (textInput.trim()) advance({ telefone: textInput.trim() }); }}>
setTextInput(e.target.value)} placeholder="(11) 99999-9999" autoFocus />
)} {step >= 7 && !sent && ( setSent(true)}> Enviar briefing para o Denis )}
); } // Export to window for app.jsx Object.assign(window, { Nav, Hero, Intro, Portfolio, About, Testimonials, Blog, CTA, Footer, FloatingWhatsApp, ProjectModal, AIConsultant, });