import { safeJsonLd } from "@/lib/jsonld"; import type { PortfolioProjectView } from "@/lib/portfolio-data"; import type { Testimonial } from "@/lib/proof"; import { buildProfessionalServiceJsonLd } 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 cujo endereço aparece na barra do navegador de HeroWork (a SEV Moda Íntima, com domínio próprio). */ const HERO_WORK_PROJECT = "sev-modaintima"; /** * Dados estruturados da home: o negócio como ProfessionalService (área de atendimento e as três ofertas). Só ele: o * WebSite e a Person já saem do layout, e repeti-los aqui duplicaria os dados. 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": [buildProfessionalServiceJsonLd()], }; /** * 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 ( <> ); }