import { safeJsonLd } from "@/lib/jsonld"; import type { PortfolioProjectView } from "@/lib/portfolio-data"; import type { Testimonial } from "@/lib/proof"; import { buildOfferServicesJsonLd } from "@/lib/seo"; import About from "../About"; import type { ClientLink } from "../ClientStrip"; import Contact from "../Contact"; import Hero, { type HeroStats } from "../Hero"; import HomeFaq from "../HomeFaq"; import Projects from "../Projects"; import { displayUrl } from "../showcase/BrowserFrame"; import Testimonials from "../Testimonials"; import { WorkModalities } from "../WorkModalities"; import CinematicMain from "./CinematicMain"; /** Projeto do navegador de HeroWork (a Lavação 047), cujo endereço, se for domínio próprio, aparece na barra. */ const HERO_WORK_PROJECT = "lavacao-047"; /** * Dados estruturados da home: as três ofertas como nós Service (provider ligado à pessoa e área de atendimento). Só elas: * o WebSite e a Person já saem do layout, e repeti-los aqui duplicaria os dados. Sem ProfessionalService nem LocalBusiness * (docs/seo-geo-operations.md). O script fica aqui, e não em app/page.tsx, para a página continuar devolvendo só a home. */ const jsonLd = { "@context": "https://schema.org", "@graph": buildOfferServicesJsonLd(), }; /** * Cenas da home, em componente de servidor: sem hooks aqui. Os hooks de rolagem e de chegada por fragmento ficam * na ilha de cliente CinematicMain, que recebe as cenas como filhos. * A ordem é a da conversa de venda: hero, projetos (a prova), ofertas ("Escolha por onde começar"), quem conduz, * perguntas frequentes e contato. A revisão de app feito com IA não tem cena própria: a oferta e a FAQ levam a /ia. */ export default function CinematicHome({ projects, clients, testimonials, heroStats, }: { heroStats?: HeroStats; /** Só projetos de cliente (o filtro é de app/page.tsx). */ projects: PortfolioProjectView[]; clients?: ClientLink[]; testimonials?: Testimonial[]; }) { const shownUrl = displayUrl({ demoUrl: projects.find((project) => project.id === HERO_WORK_PROJECT) ?.demoUrl, }); // endereço de hospedagem (vercel.app) nunca vai para a barra: sem domínio próprio, ela mostra "pré-visualização" const heroWorkUrl = shownUrl && !/vercel\.app/i.test(shownUrl.text) ? shownUrl : null; return ( <> ); }