From ce15a41c2cef9cfac80d543841e4520906dc8355 Mon Sep 17 00:00:00 2001 From: Jeffrey Alan Scudder Date: Fri, 27 Mar 2026 08:44:40 -0700 Subject: [PATCH] feat: live build telemetry on papers site Added SSE client that connects to oven.aesthetic.computer/papers-build to show real-time build progress. Shows scrolling log lines with timestamps (like OS boot telemetry), progress bar, stage label, and percentage. Auto-hides when no build is running, auto-reloads page after successful build to pick up new PDFs. Logs panel is collapsible by clicking the header. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../papers.aesthetic.computer/index.html | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) diff --git a/system/public/papers.aesthetic.computer/index.html b/system/public/papers.aesthetic.computer/index.html index a8e0bca5e6..20930f6c3d 100644 --- a/system/public/papers.aesthetic.computer/index.html +++ b/system/public/papers.aesthetic.computer/index.html @@ -298,6 +298,76 @@ .pals { position: fixed; bottom: 1.2em; right: 1.2em; width: 48px; opacity: 0.4; } .pals:hover { opacity: 1; } + /* Build telemetry */ + .build-status { + margin-top: 1.5em; + border: 1px solid var(--box-border); + border-radius: 6px; + overflow: hidden; + font-size: 11px; + display: none; + } + .build-status.active { display: block; } + .build-header { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 12px; + background: var(--box-bg); + border-bottom: 1px solid var(--box-border); + cursor: pointer; + user-select: none; + } + .build-header:hover { opacity: 0.8; } + .build-dot { + width: 8px; height: 8px; + border-radius: 50%; + background: var(--cyan); + animation: build-pulse 1.5s ease-in-out infinite; + } + .build-dot.done { background: #4caf50; animation: none; } + .build-dot.fail { background: #e53935; animation: none; } + @keyframes build-pulse { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.3; } + } + .build-label { color: var(--text); font-weight: 600; flex: 1; } + .build-stage { color: var(--pink); font-weight: 500; } + .build-pct { color: var(--dim); min-width: 3em; text-align: right; } + .build-progress { + height: 2px; + background: var(--sep); + } + .build-progress-bar { + height: 100%; + background: var(--cyan); + transition: width 0.5s ease; + width: 0%; + } + .build-logs { + max-height: 280px; + overflow-y: auto; + padding: 8px 12px; + background: rgba(0,0,0,0.15); + font-family: 'Berkeley Mono Variable', monospace; + font-size: 10px; + line-height: 1.5; + color: var(--dim); + } + .build-logs.collapsed { display: none; } + .build-log-line { + white-space: pre-wrap; + word-break: break-all; + } + .build-log-line .ts { + color: var(--purple); + opacity: 0.6; + margin-right: 6px; + } + .build-log-line.stderr { color: #e57373; } + .build-log-line.ok { color: #4caf50; } + .build-log-line.deploy { color: var(--cyan); } + /* === MOBILE (<600px) === */ @media (max-width: 599px) { body { padding: 0.75em 1em; } @@ -523,6 +593,17 @@ +
+
+ + building papers... + + +
+
+
+
+