← back to build-pages
seo: WebSite + ItemList JSON-LD on home + 2 smoke
2218b5ebb3c346f499a981cb0d3b56519af2b140 · 2026-05-13 13:23:42 -0700 · SteveStudio2
Files touched
M server.jsM test/smoke.js
Diff
commit 2218b5ebb3c346f499a981cb0d3b56519af2b140
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date: Wed May 13 13:23:42 2026 -0700
seo: WebSite + ItemList JSON-LD on home + 2 smoke
---
server.js | 20 ++++++++++++++++++++
test/smoke.js | 2 ++
2 files changed, 22 insertions(+)
diff --git a/server.js b/server.js
index af60ee3..7498286 100644
--- a/server.js
+++ b/server.js
@@ -289,11 +289,31 @@ app.get('/', async (_req, res, next) => {
<p>${esc(p.blurb)}</p>
<p class="bp-meta">${count} commits · ${ideas} ideas · latest ${esc(latest)}</p>
</li>`).join('\n');
+ const jsonld = {
+ '@context': 'https://schema.org',
+ '@type': 'WebSite',
+ url: 'https://projects.agentabrams.com/',
+ name: 'build-pages',
+ description:'Live build journals for every project — every commit, every line of design rationale, searchable.',
+ };
+ const itemList = {
+ '@context': 'https://schema.org',
+ '@type': 'ItemList',
+ itemListElement: entries.map((e, i) => ({
+ '@type': 'ListItem',
+ position: i + 1,
+ url: `https://projects.agentabrams.com/p/${e.slug}`,
+ name: e.p.name,
+ })),
+ };
res.send(shell('build-pages — all projects', `
<h1>build journals</h1>
<p class="bp-lede">Every build, every commit, every line. Click into a project to see how it actually got made.</p>
<p class="bp-meta">${entries.length} projects · ${totalCommits} commits · ${totalIdeas} design-rationale ideas surfaced</p>
<ul class="bp-cards">${rows}</ul>
+ `, `
+ <script type="application/ld+json">${JSON.stringify(jsonld)}</script>
+ <script type="application/ld+json">${JSON.stringify(itemList)}</script>
`));
} catch (e) { next(e); }
});
diff --git a/test/smoke.js b/test/smoke.js
index 73c932b..bcb5262 100644
--- a/test/smoke.js
+++ b/test/smoke.js
@@ -79,6 +79,8 @@ function check(name, cond, hint = '') {
check('home: fleet totals', /\d+ projects · \d+ commits · \d+ design-rationale ideas/.test(r.body));
check('home: canonical', /rel="canonical"/.test(r.body));
check('home: og:title', /property="og:title"/.test(r.body));
+ check('home: WebSite JSON-LD', /"@type":"WebSite"/.test(r.body));
+ check('home: ItemList JSON-LD', /"@type":"ItemList"/.test(r.body));
// 6. butlr project page renders + has commit count
r = await fetch('/p/butlr');
← 230a1f7 seo: /sitemap.xml lists home + 4 project pages + Last-Modifi
·
back to build-pages
·
smoke: gzip /p/butlr + Vary: Accept-Encoding (compression re cb50486 →