← back to Contact Mailer Ideas
viewer banner: today's batch + countdown to next 5 AM auto-batch
fbef505210bba7d8631756b0c221d062cd76ae8e · 2026-05-11 12:43:06 -0700 · Steve Abrams
Files touched
Diff
commit fbef505210bba7d8631756b0c221d062cd76ae8e
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon May 11 12:43:06 2026 -0700
viewer banner: today's batch + countdown to next 5 AM auto-batch
---
viewer/server.js | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/viewer/server.js b/viewer/server.js
index ee1b407..7a8113c 100644
--- a/viewer/server.js
+++ b/viewer/server.js
@@ -110,7 +110,11 @@ html,body{background:#0b0b0d;color:#e8e8ea;font-family:-apple-system,BlinkMacSys
header{padding:32px 48px 16px;display:flex;align-items:baseline;gap:24px;border-bottom:1px solid #1a1a1f}
header h1{font-size:22px;font-weight:700;letter-spacing:-0.01em}
header .meta{color:#7a7a82;font-size:13px}
-header .right{margin-left:auto;color:#7a7a82;font-size:12px}
+header .right{margin-left:auto;color:#7a7a82;font-size:12px;text-align:right}
+.banner{margin:0 48px;padding:14px 18px;background:linear-gradient(90deg,#0d2738,#0e1f30);border:1px solid #1c3a52;border-radius:10px;display:flex;gap:18px;align-items:center;font-size:13px;color:#bcd5e5}
+.banner .dot{width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 8px #22c55e;flex-shrink:0}
+.banner b{color:#fff;font-weight:600}
+.banner .next{margin-left:auto;color:#7aa3bf;font-size:12px}
header a{color:#9aa3b2;text-decoration:none;border-bottom:1px solid #2a2a31}
header a:hover{color:#fff;border-color:#fff}
.wrap{padding:32px 48px;display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:20px}
@@ -162,6 +166,7 @@ footer{padding:20px 48px 40px;color:#5a5a62;font-size:12px;text-align:center}
<span class="refresh" id="rfx">auto-refresh 15s</span>
</span>
</header>
+<div class="banner" id="banner" style="margin-top:18px"></div>
<div class="wrap" id="grid"></div>
<footer>port 9773 · localhost only · source ~/.claude/skills/idea-loop/data/ideas.jsonl</footer>
<script>
@@ -174,6 +179,23 @@ async function loadBatches(){
if (!currentDate && list.length) currentDate = list[0].date;
sel.value = currentDate || '';
sel.onchange = () => { currentDate = sel.value; load(); };
+ renderBanner(list);
+}
+function renderBanner(list){
+ const banner = document.getElementById('banner');
+ const today = new Date().toISOString().slice(0,10);
+ const todays = list.find(b => b.date === today);
+ // Compute next 5am PT
+ const now = new Date();
+ const fire = new Date(now);
+ fire.setHours(5,0,0,0);
+ if (fire <= now) fire.setDate(fire.getDate()+1);
+ const hrs = Math.floor((fire - now)/3600000);
+ const mins = Math.floor(((fire - now) % 3600000)/60000);
+ const status = todays
+ ? '<b>Today (' + today + ')</b> · ' + todays.count + ' ideas · ' + (todays.generator.includes('claude') ? 'auto-generated 5:00 AM PT' : 'manual seed batch')
+ : '<b>No batch yet for today</b> · daily generator fires at 5:00 AM PT';
+ banner.innerHTML = '<span class="dot"></span><span>' + status + '</span><span class="next">Next auto-batch: tomorrow 5 AM PT (in ' + hrs + 'h ' + mins + 'm)</span>';
}
async function load(){
const url = currentDate ? '/api/state?date='+encodeURIComponent(currentDate) : '/api/state';
← 045f74b daily generator: claude CLI → 20 fresh ideas every 5am PT, b
·
back to Contact Mailer Ideas
·
viewer: search across all fields (name/headline/target/actio bd6d8c4 →