{items.length > 0 && (
- {items.map(([value, label]) => (
+ {items.map(({ prefix, value, label, detail }) => (
-
{label}
+ {detail && (
+
+ {detail}
+
+ )}
-
+ {prefix && (
+
+ {prefix}
+
+ )}
{value}
diff --git a/app/page.tsx b/app/page.tsx
index d8667eb..2976d9c 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -1,6 +1,10 @@
+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);
@@ -8,12 +12,15 @@ function yearsOfExperience() {
}
export default async function Home() {
- const projects = await loadFeaturedProjects();
+ const [projects, repos] = await Promise.all([
+ loadFeaturedProjects(),
+ loadGithubRepoCounts(),
+ ]);
return (
project.demoUrl && project.demoAvailability !== "unavailable",