[object Object]

← back to build-pages

seo: WebSite + ItemList JSON-LD on home + 2 smoke

2218b5ebb3c346f499a981cb0d3b56519af2b140 · 2026-05-13 13:23:42 -0700 · SteveStudio2

Files touched

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 →