diff --git a/apps/web/package.json b/apps/web/package.json
index 7f1c16a..630ed69 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -11,6 +11,7 @@
},
"dependencies": {
"@c0mpute/shared": "workspace:*",
+ "@profullstack/footer": "latest",
"@profullstack/x402-gateway": "^0.7.0",
"@sqlitecloud/drivers": "^1.0.880",
"ioredis": "^5.11.1",
diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx
index 5d5abf7..2d834ce 100644
--- a/apps/web/src/app/layout.tsx
+++ b/apps/web/src/app/layout.tsx
@@ -2,6 +2,7 @@ import type { Metadata, Viewport } from "next";
import Link from "next/link";
import "./globals.css";
import Script from "next/script";
+import { Footer } from "@profullstack/footer/react";
import { WebMcpProvider } from "@/components/webmcp-provider";
import { PitFooter } from "@/components/pit-footer";
@@ -10,7 +11,8 @@ const DESCRIPTION =
"The open compute network. Run jobs anywhere, sell unused compute, pay only for verified work. CPUs, GPUs, storage and bandwidth from PCs to data centers, through one open protocol — for humans and AI agents.";
// Static pages re-render hourly so the pit.world network footer (fetched server-side
-// from pit.world/snippets) picks up changes without a redeploy. Without this the
+// from pit.world/snippets) and the @profullstack/footer webring row (rendered from the
+// package's @latest template) pick up changes without a redeploy. Without this the
// prerendered pages are baked at build (s-maxage=31536000) and only a redeploy
// would change the footer.
export const revalidate = 3600;
@@ -75,9 +77,8 @@ export default function RootLayout({
{children}