O hero mostra 'Mais de X projetos desenvolvidos' com o detalhamento de publicos e privados; sem a contagem (token ausente ou API fora) o item some. A home passa a revalidar uma vez por dia. README documenta o token. Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import { loadGithubRepoCounts } from "@/lib/github-stats";
|
|
import { loadFeaturedProjects, portfolio } from "@/lib/portfolio-data";
|
|
import CinematicHome from "./components/cinematic/CinematicHome";
|
|
|
|
/** A contagem do GitHub é consultada no servidor e renovada uma vez por dia. */
|
|
export const revalidate = 86_400;
|
|
|
|
/** 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() {
|
|
const [projects, repos] = await Promise.all([
|
|
loadFeaturedProjects(),
|
|
loadGithubRepoCounts(),
|
|
]);
|
|
return (
|
|
<CinematicHome
|
|
heroStats={{
|
|
years: yearsOfExperience(),
|
|
repos: repos ?? undefined,
|
|
demos: projects.filter(
|
|
(project) =>
|
|
project.demoUrl && project.demoAvailability !== "unavailable",
|
|
).length,
|
|
}}
|
|
projects={projects}
|
|
experiences={portfolio.experiences}
|
|
skillCategories={portfolio.skills.technical}
|
|
/>
|
|
);
|
|
}
|