From 1119ba015ed5a434ec488f20b98294ae5245b2de Mon Sep 17 00:00:00 2001 From: ImBenji Date: Fri, 24 Apr 2026 00:41:19 +0100 Subject: [PATCH] refactor admin navigation; update links to ingest pages and improve loading of data in parallel --- public/admin/assets/css/intel.css | 77 +++++++++++-------------- public/admin/assets/js/intel-signals.js | 34 ++++------- 2 files changed, 44 insertions(+), 67 deletions(-) diff --git a/public/admin/assets/css/intel.css b/public/admin/assets/css/intel.css index 6dbd04c..670fedd 100644 --- a/public/admin/assets/css/intel.css +++ b/public/admin/assets/css/intel.css @@ -454,57 +454,65 @@ body.page-graph #graph-info { /* ── signal cards ── */ +/* compact tiles — just company + ticker + signal badge. everything else + (summary, drivers, risks, tags, timestamp, references) lives in the + detail dialog opened via openSignalModal(). */ .signal-grid { display: grid; - grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); - gap: 14px; + grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); + gap: 10px; } .signal-card { background: var(--bg-card); border: 1px solid var(--border); - border-radius: var(--radius-lg); - overflow: hidden; - cursor: pointer; - transition: border-color .15s; -} - -.signal-card:hover { border-color: var(--muted-dark); } - -.signal-card-glance { - padding: 16px; -} - -.signal-card-header { + border-radius: var(--radius); + padding: 12px 14px; display: flex; - align-items: flex-start; + align-items: center; justify-content: space-between; - margin-bottom: 10px; - gap: 8px; + gap: 12px; + cursor: pointer; + transition: border-color .15s, background .15s; +} + +.signal-card:hover { + border-color: var(--muted-dark); + background: #13203a; +} + +.signal-card-main { + min-width: 0; /* so the text children can truncate if ever needed */ + display: flex; + flex-direction: column; + gap: 2px; } .signal-company { - font-size: 14px; + font-size: 13px; font-weight: 600; color: var(--foreground); line-height: 1.2; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .signal-ticker { font-size: 11px; - color: var(--muted); - margin-top: 2px; + color: var(--muted-dark); + letter-spacing: .04em; } .signal-badge { display: inline-flex; align-items: center; - padding: 4px 10px; - border-radius: 5px; - font-size: 12px; + padding: 3px 9px; + border-radius: 4px; + font-size: 11px; font-weight: 700; - letter-spacing: .04em; + letter-spacing: .05em; flex-shrink: 0; } @@ -512,13 +520,8 @@ body.page-graph #graph-info { .signal-badge.HOLD { background: rgba(92,66,14,.6); color: #fbbf24; border: 1px solid rgba(251,191,36,.2); } .signal-badge.SELL { background: rgba(127,29,29,.6); color: #f87171; border: 1px solid rgba(248,113,113,.2); } -.signal-tags { - display: flex; - gap: 5px; - flex-wrap: wrap; - margin-bottom: 10px; -} +/* the .signal-tag style is still used inside the detail dialog */ .signal-tag { background: var(--bg-subtle); border: 1px solid var(--border); @@ -529,18 +532,6 @@ body.page-graph #graph-info { font-weight: 500; } -.signal-summary { - font-size: 12px; - color: var(--muted); - line-height: 1.5; - margin-bottom: 8px; -} - -.signal-ts { - font-size: 10.5px; - color: var(--muted-dark); -} - .signal-detail-label { font-size: 10.5px; text-transform: uppercase; diff --git a/public/admin/assets/js/intel-signals.js b/public/admin/assets/js/intel-signals.js index 3770685..7e4062f 100644 --- a/public/admin/assets/js/intel-signals.js +++ b/public/admin/assets/js/intel-signals.js @@ -29,31 +29,17 @@ async function loadSignals() { empty.style.display = "none"; - grid.innerHTML = data.map(s => { - const firstSentence = (s.summary || "").split(/\.\s+/)[0].replace(/\.$/, "") + "."; - const ts = s.generated_at ? s.generated_at.slice(0, 16).replace("T", " ") : "—"; - - return ` -
-
-
-
-
${escapeHtml(s.company_name)}
-
${escapeHtml(s.ticker)}
-
- ${s.signal} -
-
- conf: ${escapeHtml(s.confidence)} - risk: ${escapeHtml(s.risk_level)} - ${escapeHtml(s.timeframe)} -
-
${escapeHtml(firstSentence)}
-
Generated ${ts}
-
+ // compact tile — everything else (summary, drivers, risks, refs, ts) + // lives in the dialog. this stays a pure at-a-glance signal. + grid.innerHTML = data.map(s => ` +
+
+
${escapeHtml(s.company_name)}
+
${escapeHtml(s.ticker)}
- `; - }).join(""); + ${s.signal} +
+ `).join(""); }