[object Object]

← back to build-pages

home: trend delta arrow (↑/↓/—) between today and yesterday + 1 smoke

83730dd9596d12669613dd0a7025ef1f544eecd1 · 2026-05-13 20:44:10 -0700 · SteveStudio2

Files touched

Diff

commit 83730dd9596d12669613dd0a7025ef1f544eecd1
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Wed May 13 20:44:10 2026 -0700

    home: trend delta arrow (↑/↓/—) between today and yesterday + 1 smoke
---
 public/css/site.css | 8 ++++++++
 server.js           | 8 +++++++-
 test/smoke.js       | 1 +
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/public/css/site.css b/public/css/site.css
index b038ebb..744ce58 100644
--- a/public/css/site.css
+++ b/public/css/site.css
@@ -112,6 +112,14 @@ h2 { font-size: 20px; font-weight: 700; margin: 36px 0 14px; letter-spacing: -0.
 .bp-body pre { background: var(--code-bg); white-space: pre-wrap; }
 .bp-diff { font-size: 12px; max-height: 70vh; overflow: auto; }
 .bp-spark { font-family: ui-monospace, Menlo, monospace; letter-spacing: 1px; color: var(--link); background: var(--code-bg); padding: 1px 6px; border-radius: 4px; }
+.bp-delta { font-family: ui-monospace, Menlo, monospace; font-size: 12px; padding: 1px 6px; border-radius: 4px; font-weight: 600; }
+.bp-delta-up { color: #1f7a30; background: rgba(31,122,48,0.12); }
+.bp-delta-dn { color: #b14747; background: rgba(177,71,71,0.12); }
+.bp-delta-eq { color: var(--muted);  background: var(--chip-bg); }
+@media (prefers-color-scheme: dark) {
+  .bp-delta-up { color: #5cd278; }
+  .bp-delta-dn { color: #ff7373; }
+}
 .bp-load { font-family: ui-monospace, Menlo, monospace; padding: 1px 6px; border-radius: 4px; font-weight: 600; }
 .bp-load-ok   { background: rgba(31,122,48,0.15);  color: #1f7a30; }
 .bp-load-warn { background: rgba(196,140,30,0.18); color: #9b6f15; }
diff --git a/server.js b/server.js
index ce6d424..11b225c 100644
--- a/server.js
+++ b/server.js
@@ -371,6 +371,12 @@ app.get('/', async (req, res, next) => {
     };
     const todayPT     = ptDay(0);
     const yesterdayPT = ptDay(-1);
+    const delta       = todayPT.count - yesterdayPT.count;
+    const deltaSpan   = delta > 0
+      ? `<span class="bp-delta bp-delta-up" title="${delta} more than yesterday">↑${delta}</span>`
+      : delta < 0
+        ? `<span class="bp-delta bp-delta-dn" title="${Math.abs(delta)} fewer than yesterday">↓${Math.abs(delta)}</span>`
+        : `<span class="bp-delta bp-delta-eq" title="same as yesterday">—</span>`;
     const fleetSpark = sparkline(fleetCommits);
     const sparkChars = fleetSpark.spark;
     const dayBuckets = fleetSpark.buckets;
@@ -420,7 +426,7 @@ app.get('/', async (req, res, next) => {
       <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>
-      <p class="bp-meta">today (PT): <strong>${todayPT.count}</strong> · yesterday: <strong>${yesterdayPT.count}</strong> · last 24h: <strong>${last24}</strong> · last 7d: <strong>${last7d}</strong> · 7-day shape <code class="bp-spark" title="${dayBuckets.join(' / ')}">${sparkChars}</code> · ${(() => {
+      <p class="bp-meta">today (PT): <strong>${todayPT.count}</strong> ${deltaSpan} · yesterday: <strong>${yesterdayPT.count}</strong> · last 24h: <strong>${last24}</strong> · last 7d: <strong>${last7d}</strong> · 7-day shape <code class="bp-spark" title="${dayBuckets.join(' / ')}">${sparkChars}</code> · ${(() => {
         const [l1] = require('os').loadavg();
         const cls = l1 < 8 ? 'bp-load-ok' : l1 < 20 ? 'bp-load-warn' : 'bp-load-hot';
         return `host load <span class="bp-load ${cls}">${l1.toFixed(1)}</span> (1m)`;
diff --git a/test/smoke.js b/test/smoke.js
index 4318bdd..26cae44 100644
--- a/test/smoke.js
+++ b/test/smoke.js
@@ -97,6 +97,7 @@ function check(name, cond, hint = '') {
   check('home: theme-color',       /name="theme-color"/.test(r.body));
   check('home: top skills rail',   /Top skills \+ agents/.test(r.body));
   check('home: velocity line',     /last 24h: <strong>\d+<\/strong>/.test(r.body));
+  check('home: delta arrow',       /class="bp-delta bp-delta-(up|dn|eq)"/.test(r.body));
   check('home: load badge',        /class="bp-load (bp-load-ok|bp-load-warn|bp-load-hot)"/.test(r.body));
   check('home: 7-day sparkline',   /class="bp-spark"/.test(r.body));
   check('home: deepest rationale rail', /Deepest rationale/.test(r.body));

← 7aefa06 smoke: track 'last 24h' line instead of removed 'velocity:'  ·  back to build-pages  ·  home: per-project today-PT chip on each project card + 1 smo f1d86db →