From 1cc1baa147394d5020d859fbd6fd56d9b86214f9 Mon Sep 17 00:00:00 2001 From: Anthony Ettinger Date: Mon, 19 Oct 2026 13:24:23 +0000 Subject: [PATCH] 0.22.7: restore the @profullstack/footer bar under the site footer The webring bar is being rolled out fleet-wide on purpose. It comes back with no extra links (the site footer row carries them), between the site footer and the pit.world global footer. Co-Authored-By: Claude Opus 5.5 --- package.json | 2 +- src/config.ts | 2 +- src/views/layout.tsx | 12 +++++++++--- src/views/pfs-footer.ts | 23 +++++++++++++++++++++++ web/public/app.css | 8 +++++++- web/public/sw.js | 2 +- 6 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 src/views/pfs-footer.ts diff --git a/package.json b/package.json index 0b9b69c..fb73520 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@profullstack/agenticjobs", - "version": "0.22.6", + "version": "0.22.7", "description": "An agent-friendly job board you self-host. It posts its own jobs, never scrapes anyone else's, and answers on every surface: web, API, MCP, CLI, TUI, desktop and PWA. Instances find each other through an open directory.", "license": "MIT", "type": "module", diff --git a/src/config.ts b/src/config.ts index 288464a..68db124 100644 --- a/src/config.ts +++ b/src/config.ts @@ -187,7 +187,7 @@ export function loadConfig(env: NodeJS.ProcessEnv = process.env): Config { } /** Kept in step with package.json by the release script. */ -export const VERSION = '0.22.6'; +export const VERSION = '0.22.7'; export const SOFTWARE_NAME = 'agenticjobs'; /** diff --git a/src/views/layout.tsx b/src/views/layout.tsx index d3f17dc..1764b0f 100644 --- a/src/views/layout.tsx +++ b/src/views/layout.tsx @@ -15,6 +15,7 @@ import { renderMarkdown } from '../markup/markdown.ts'; import type { SkillCount } from '../core/skills.ts'; import { pathForQuery } from '../core/landing.ts'; import { EMPTY_QUERY } from '../schema/query.ts'; +import { pfsFooter } from './pfs-footer.ts'; import { pitFooter } from './pit-footer.ts'; import { AdUnit, showsAd } from './ad-unit.tsx'; @@ -284,9 +285,6 @@ export const Layout: FC> = (props) => { )} + {/* Copyright and the Profullstack webring: @profullstack/footer. */} + {raw( + pfsFooter({ + site: `${publicUrl.replace(/\/+$/, '')}/`, + links: [], + tagline: `${boardName} runs on agenticjobs, MIT licensed.`, + }), + )} {/* * CrawlProof, as a plain tag. `defer` is what `strategy` meant on the diff --git a/src/views/pfs-footer.ts b/src/views/pfs-footer.ts new file mode 100644 index 0000000..61ad9d4 --- /dev/null +++ b/src/views/pfs-footer.ts @@ -0,0 +1,23 @@ +/** + * The shared Profullstack footer (@profullstack/footer): the board's link row, + * the copyright line and the webring, from the package's @latest template, so a + * release of the package reaches every board without a redeploy. + * + * Layout renders synchronously (pages and tests stringify it directly), so this + * returns the last footer rendered for these options and refreshes it in the + * background on each use; the package caches the template for an hour. Until + * the first refresh lands it is the template from the installed package. + */ +import { footerHtml, footerHtmlSync } from '@profullstack/footer'; + +type FooterOptions = Parameters[0]; + +const rendered = new Map(); + +export function pfsFooter(options: FooterOptions): string { + const key = JSON.stringify(options); + void footerHtml(options) + .then((html) => rendered.set(key, html)) + .catch(() => undefined); + return rendered.get(key) ?? footerHtmlSync(options); +} diff --git a/web/public/app.css b/web/public/app.css index fb54cd0..7323029 100644 --- a/web/public/app.css +++ b/web/public/app.css @@ -159,7 +159,13 @@ main { color: var(--muted-foreground); } -/* Two rows: the popular skills, then the copyright and the links people use. */ +/* The shared Profullstack footer (src/views/pfs-footer.ts) under the site footer. */ +footer.pfs-footer { + --pfs-footer-muted: var(--muted-foreground); + border-top-color: var(--border); +} + +/* Two rows: the popular skills, then the links people use. */ .footer-skills { gap: 0.5rem 0.9rem; } diff --git a/web/public/sw.js b/web/public/sw.js index 5bf8202..65f77aa 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -13,7 +13,7 @@ * drifted, which is the only version of this rule that survives contact. */ -const VERSION = '4442cc3d'; +const VERSION = 'b264b667'; const SHELL = `shell-${VERSION}`; const ASSETS = ['/assets/app.css', '/assets/tokens.css', '/assets/icon.svg'];