[object Object]

← back to build-pages

home: 'Recent across the fleet' rail — server-rendered top 10 commits date-sorted (no JS required) + 1 smoke

afcaaa3e52826aa0453707ba148d938faab21fcb · 2026-05-13 14:36:47 -0700 · SteveStudio2

Files touched

Diff

commit afcaaa3e52826aa0453707ba148d938faab21fcb
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Wed May 13 14:36:47 2026 -0700

    home: 'Recent across the fleet' rail — server-rendered top 10 commits date-sorted (no JS required) + 1 smoke
---
 server.js     | 23 +++++++++++++++++++++++
 test/smoke.js |  1 +
 2 files changed, 24 insertions(+)

diff --git a/server.js b/server.js
index 76b53dd..aa0814d 100644
--- a/server.js
+++ b/server.js
@@ -323,11 +323,34 @@ app.get('/', async (req, res, next) => {
         name:     e.p.name,
       })),
     };
+    // Recent across the fleet — first 10 commits date-sorted across all
+    // projects. Server-rendered (not client-fetched) so the page is useful
+    // without JS. Same bundle cache, so essentially free.
+    const recent = [];
+    for (const e of entries) {
+      const bundle = await getProjectBundle(e.slug, e.p).catch(() => null);
+      if (!bundle) continue;
+      for (const c of bundle.commits.slice(0, 10)) {
+        recent.push({ slug: e.slug, name: e.p.name, hash: c.shortHash, date: c.dateISO, subject: c.subject });
+      }
+    }
+    recent.sort((a, b) => (b.date < a.date ? -1 : b.date > a.date ? 1 : 0));
+    const recentRows = recent.slice(0, 10).map(c => `<li>
+      <a href="/p/${esc(c.slug)}/c/${esc(c.hash)}"><code>${esc(c.hash)}</code></a>
+      <span class="bp-d">${esc(c.date.slice(0, 10))}</span>
+      <span class="bp-s"><strong>${esc(c.name)}</strong> — ${esc(c.subject)}</span>
+    </li>`).join('');
+
     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>
 
+      <section class="bp-section">
+        <h2>Recent across the fleet</h2>
+        <ol class="bp-commits">${recentRows}</ol>
+      </section>
+
       <section class="bp-section">
         <h2>Search the whole fleet</h2>
         <input id="fleet-q" class="bp-q" type="search" placeholder="search every commit across every project…" autocomplete="off" value="${esc(typeof req.query.q === 'string' ? req.query.q : '')}">
diff --git a/test/smoke.js b/test/smoke.js
index 1ac3377..a2ed74b 100644
--- a/test/smoke.js
+++ b/test/smoke.js
@@ -90,6 +90,7 @@ function check(name, cond, hint = '') {
   check('home: title',             /build-pages/.test(r.body));
   check('home: X-Content-Type-Options', (r.headers['x-content-type-options'] || '') === 'nosniff');
   check('home: fleet totals',      /\d+ projects · \d+ commits · \d+ design-rationale ideas/.test(r.body));
+  check('home: recent rail',       /Recent across the fleet/.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));

← 86268fd api/recent: fleet-wide most-recent commits, date-sorted + 3  ·  back to build-pages  ·  api: per-project facet endpoints (/agents, /skills, /ideas) 0cb94e6 →