Três ofertas (site que traz pedidos pelo WhatsApp, sistema para tirar a operação da planilha, revisão de sistema existente) com miniatura e formulário com o tipo escolhido; botão principal do hero abre o WhatsApp; moldura da SEV no hero do celular; menu fecha ao navegar, Esc, foco preso incluindo a barra de cookies e espaço para ela; CinematicHome como componente de servidor com ilha cliente; /ia com H1 de oferta e cartão do que você recebe; botão flutuante em aside com transform; AVIF antes de WebP; copy sem repetir contato direto.
62 lines
1.9 KiB
TypeScript
62 lines
1.9 KiB
TypeScript
import type { PortfolioProjectView } from "@/lib/portfolio-data";
|
|
import type { Testimonial } from "@/lib/proof";
|
|
import About from "../About";
|
|
import type { ClientLink } from "../ClientStrip";
|
|
import Contact from "../Contact";
|
|
import EngineeringWithAI from "../EngineeringWithAI";
|
|
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";
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
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 (
|
|
<CinematicMain>
|
|
<Hero stats={heroStats} clients={clients} workUrl={heroWorkUrl} />
|
|
|
|
<Projects projects={projects} />
|
|
|
|
<About />
|
|
|
|
<WorkModalities />
|
|
|
|
<EngineeringWithAI />
|
|
|
|
<Testimonials items={testimonials} />
|
|
|
|
<HomeFaq />
|
|
|
|
<Contact />
|
|
</CinematicMain>
|
|
);
|
|
}
|