From 316dc3dd3ee1de57fe0972bebaec5926c0be0314 Mon Sep 17 00:00:00 2001 From: Jamie Brunton Date: Sat, 8 Aug 2026 14:42:19 +0100 Subject: [PATCH] Show Reddit recovery status in dashboard --- docker-compose.yml | 4 ++ public/index.html | 81 ++++++++++++++++++++++++++-- src/browser/client.ts | 28 +++++++++- src/web/routes/login.ts | 3 +- tests/dashboard-login-banner.test.ts | 16 ++++++ tests/login-status.test.ts | 81 ++++++++++++++++++++++++++++ 6 files changed, 208 insertions(+), 5 deletions(-) create mode 100644 tests/dashboard-login-banner.test.ts create mode 100644 tests/login-status.test.ts diff --git a/docker-compose.yml b/docker-compose.yml index 622d0aa..79a9db0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,12 +22,16 @@ services: - "6080" # noVNC for human login environment: - OPENROUTER_API_KEY=${OPENROUTER_API_KEY} + # Required whenever the web dashboard is enabled; never commit its value. + - WEB_DASHBOARD_TOKEN=${WEB_DASHBOARD_TOKEN} - REDDIT_USERNAME=${REDDIT_USERNAME} - REDDIT_PASSWORD=${REDDIT_PASSWORD} # Chromium runs headed under Xvfb so a human can complete login over noVNC. - BROWSER_HEADLESS=false # Required to lock down the VNC endpoint. - VNC_PASSWORD=${VNC_PASSWORD} + # Public Traefik route used by the dashboard's recovery button. + - NOVNC_PUBLIC_URL=https://red-vnc.apps.jbrunton.co.uk volumes: reddit_bot_data: diff --git a/public/index.html b/public/index.html index 93f5bbb..c3a5a6c 100644 --- a/public/index.html +++ b/public/index.html @@ -193,6 +193,47 @@ gap: 10px; } + .reddit-session-banner { + display: flex; + align-items: center; + justify-content: space-between; + gap: 18px; + margin: 18px 0 0; + padding: 15px 18px; + border: 1px solid rgba(184, 92, 92, .42); + border-radius: var(--r-md); + background: var(--clay-soft); + color: #7d3939; + box-shadow: var(--shadow-sm); + } + + .reddit-session-banner.unreachable { + border-color: rgba(212, 165, 116, .62); + background: var(--honey-soft); + color: #745022; + } + + .reddit-session-banner[hidden] { display: none; } + + .reddit-session-banner strong { + display: block; + margin-bottom: 3px; + font-family: var(--f-display); + font-size: 16px; + } + + .reddit-session-banner span { + font-size: 12px; + line-height: 1.45; + } + + @media (max-width: 680px) { + .reddit-session-banner { + align-items: flex-start; + flex-direction: column; + } + } + /* ───── Status badges ───── */ .status-badge { padding: 6px 14px; @@ -2288,6 +2329,14 @@
+ +