Files
portifolio-evandrodevbr/app/page.tsx
T
Evandro Fonseca Junior f8545cd442 feat(home): ofertas que vendem o título, WhatsApp no hero e menu do celular acessível
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.
2026-10-14 17:01:36 -03:00

34 lines
1.3 KiB
TypeScript

import type { Metadata } from "next";
import { portfolio } from "@/lib/portfolio-data";
import { loadFeaturedProjects } from "@/lib/portfolio-data.server";
import { clientNames, isClientProject, testimonials } from "@/lib/proof";
import CinematicHome from "./components/cinematic/CinematicHome";
/**
* O título da home é o `title.default` de app/layout.tsx ("Sites e sistemas em Joinville e SC | Evandro.dev.br"):
* o template do layout não se aplica à página do mesmo segmento, então não há `title` aqui.
* O canônico fica nesta página, e não no layout, para a página 404 não herdá-lo.
*/
export const metadata: Metadata = {
alternates: { canonical: "/" },
};
/** Anos de experiência vêm do próprio texto do portfólio ("5 anos de experiência"); sem o trecho, o número some. */
function yearsOfExperience() {
const match = portfolio.personal.summary.match(/(\d+)\s+anos de experi/i);
return match ? Number(match[1]) : undefined;
}
export default async function Home() {
// A home mostra só trabalho de cliente; protótipos e projetos pessoais ficam em /cases.
const projects = (await loadFeaturedProjects()).filter(isClientProject);
return (
<CinematicHome
heroStats={{ years: yearsOfExperience() }}
clients={clientNames}
projects={projects}
testimonials={testimonials}
/>
);
}