From 85d655fae17bebf600edf25f8e03c251819a706d Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Wed, 15 Apr 2026 22:14:11 -0500 Subject: [PATCH] feat(footer): wire social links from Navigation global instead of hardcoded values Footer is now an async server component that fetches the Navigation global directly and removed from the barrel export to prevent node:fs leaking into client bundles. Social entries render from CMS data. Added force-dynamic to all pages for build compatibility. Co-Authored-By: Claude Sonnet 4.6 --- src/app/(frontend)/resume/page.tsx | 1 + src/app/(frontend)/writing/[slug]/page.tsx | 2 ++ src/app/(frontend)/writing/page.tsx | 1 + src/components/site/Footer.tsx | 41 ++++++++++++---------- src/components/site/index.ts | 1 - 5 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/app/(frontend)/resume/page.tsx b/src/app/(frontend)/resume/page.tsx index 727be24..fb9249f 100644 --- a/src/app/(frontend)/resume/page.tsx +++ b/src/app/(frontend)/resume/page.tsx @@ -1,3 +1,4 @@ +export const dynamic = "force-dynamic"; export const metadata = { title: "Resume" }; export default function ResumePage() { diff --git a/src/app/(frontend)/writing/[slug]/page.tsx b/src/app/(frontend)/writing/[slug]/page.tsx index 22b4a91..06f3fa7 100644 --- a/src/app/(frontend)/writing/[slug]/page.tsx +++ b/src/app/(frontend)/writing/[slug]/page.tsx @@ -1,3 +1,5 @@ +export const dynamic = "force-dynamic"; + import { notFound } from "next/navigation"; type Params = { slug: string }; diff --git a/src/app/(frontend)/writing/page.tsx b/src/app/(frontend)/writing/page.tsx index 0a5e996..e9c88fa 100644 --- a/src/app/(frontend)/writing/page.tsx +++ b/src/app/(frontend)/writing/page.tsx @@ -1,3 +1,4 @@ +export const dynamic = "force-dynamic"; export const metadata = { title: "Writing" }; export default function WritingIndexPage() { diff --git a/src/components/site/Footer.tsx b/src/components/site/Footer.tsx index 443867b..3c53599 100644 --- a/src/components/site/Footer.tsx +++ b/src/components/site/Footer.tsx @@ -1,4 +1,6 @@ import Link from "next/link"; +import { getPayload } from "payload"; +import config from "@payload-config"; import { StatusTerminal } from "./StatusTerminal"; const NAV_LINKS = [ @@ -8,12 +10,11 @@ const NAV_LINKS = [ { label: "Contact", href: "/contact" }, ]; -const SOCIALS = [ - { label: "GitHub", href: "https://github.com/jasonwoltje" }, - { label: "LinkedIn", href: "https://linkedin.com/in/jasonwoltje" }, -]; +export async function Footer() { + const payload = await getPayload({ config }); + const nav = await payload.findGlobal({ slug: "navigation", depth: 0 }); + const socials = nav.socials ?? []; -export function Footer() { return (