add intelligence features; implement signals and predictions pages in admin panel
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Duriin Admin — Intelligence / Graph</title>
|
||||
<link rel="stylesheet" href="/admin/assets/css/base.css">
|
||||
<link rel="stylesheet" href="/admin/assets/css/layout.css">
|
||||
<link rel="stylesheet" href="/admin/assets/css/components.css">
|
||||
<link rel="stylesheet" href="/admin/assets/css/intel.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="app-header">
|
||||
<h1>Duriin <span>Admin</span></h1>
|
||||
<nav class="tabs">
|
||||
<a href="/admin/articles">Articles</a>
|
||||
<a href="/admin/events">Events</a>
|
||||
<a href="/admin/stats">Stats</a>
|
||||
<a href="/admin/intelligence" class="active">Intelligence</a>
|
||||
<a href="/admin/sql">SQL</a>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<nav class="subnav">
|
||||
<a href="/admin/intelligence/knowledge">Knowledge</a>
|
||||
<a href="/admin/intelligence/predictions">Predictions</a>
|
||||
<a href="/admin/intelligence/signals">Signals</a>
|
||||
<a href="/admin/intelligence/graph" class="active">Graph</a>
|
||||
</nav>
|
||||
|
||||
<main class="content">
|
||||
|
||||
<div id="intel-unavailable" class="intel-unavailable" style="display:none">
|
||||
intelligence.sqlite not found — is the intelligence worker running?
|
||||
</div>
|
||||
|
||||
<div id="intel-content">
|
||||
<div style="display:flex; gap:12px; flex-wrap:wrap; margin-bottom:24px" id="intel-stats-row"></div>
|
||||
|
||||
<div id="intel-graph-layout">
|
||||
<div id="intel-graph-svg-wrap">
|
||||
<svg id="intel-graph-svg"></svg>
|
||||
|
||||
<div id="graph-empty" style="display:none; position:absolute; inset:0; color:var(--muted); font-size:13px; text-align:center; padding-top:120px">No relationship data yet</div>
|
||||
|
||||
<div id="graph-controls">
|
||||
<input id="graph-search" placeholder="Search companies..." autocomplete="off" spellcheck="false" />
|
||||
<div id="graph-chips">
|
||||
<button class="graph-chip active" data-type="all">All</button>
|
||||
<button class="graph-chip" data-type="competitor">Competitor</button>
|
||||
<button class="graph-chip" data-type="customer">Customer</button>
|
||||
<button class="graph-chip" data-type="supplier">Supplier</button>
|
||||
<button class="graph-chip" data-type="investor">Investor</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="graph-legend">
|
||||
<span><span class="graph-legend-dot" style="background:#E24B4A"></span>Competitor</span>
|
||||
<span><span class="graph-legend-dot" style="background:#639922"></span>Customer</span>
|
||||
<span><span class="graph-legend-dot" style="background:#BA7517"></span>Supplier</span>
|
||||
<span><span class="graph-legend-dot" style="background:#378ADD"></span>Investor</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<aside id="graph-info">
|
||||
<p class="graph-empty-msg">Click a node to see its connections.</p>
|
||||
</aside>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<div id="toast"><span class="toast-dot"></span><span id="toast-msg"></span></div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/d3@7/dist/d3.min.js"></script>
|
||||
<script src="/admin/assets/js/app.js"></script>
|
||||
<script src="/admin/assets/js/intel-shared.js"></script>
|
||||
<script src="/admin/assets/js/intel-graph.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,98 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Duriin Admin — Intelligence / Knowledge</title>
|
||||
<link rel="stylesheet" href="/admin/assets/css/base.css">
|
||||
<link rel="stylesheet" href="/admin/assets/css/layout.css">
|
||||
<link rel="stylesheet" href="/admin/assets/css/components.css">
|
||||
<link rel="stylesheet" href="/admin/assets/css/intel.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="app-header">
|
||||
<h1>Duriin <span>Admin</span></h1>
|
||||
<nav class="tabs">
|
||||
<a href="/admin/articles">Articles</a>
|
||||
<a href="/admin/events">Events</a>
|
||||
<a href="/admin/stats">Stats</a>
|
||||
<a href="/admin/intelligence" class="active">Intelligence</a>
|
||||
<a href="/admin/sql">SQL</a>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<nav class="subnav">
|
||||
<a href="/admin/intelligence/knowledge" class="active">Knowledge</a>
|
||||
<a href="/admin/intelligence/predictions">Predictions</a>
|
||||
<a href="/admin/intelligence/signals">Signals</a>
|
||||
<a href="/admin/intelligence/graph">Graph</a>
|
||||
</nav>
|
||||
|
||||
<main class="content">
|
||||
|
||||
<div id="intel-unavailable" class="intel-unavailable" style="display:none">
|
||||
intelligence.sqlite not found — is the intelligence worker running?
|
||||
</div>
|
||||
|
||||
<div id="intel-content">
|
||||
<div style="display:flex; gap:12px; flex-wrap:wrap; margin-bottom:24px" id="intel-stats-row"></div>
|
||||
|
||||
<div class="filters">
|
||||
<label>Company
|
||||
<select id="i-company"><option value="">All companies</option></select>
|
||||
</label>
|
||||
<label>Type
|
||||
<select id="i-type">
|
||||
<option value="">All types</option>
|
||||
<option value="relationship">Relationship</option>
|
||||
<option value="theme">Theme</option>
|
||||
<option value="factor">Factor</option>
|
||||
</select>
|
||||
</label>
|
||||
<label>Sort
|
||||
<select id="i-sort">
|
||||
<option value="id">Recent first</option>
|
||||
<option value="event_date">By event date</option>
|
||||
</select>
|
||||
</label>
|
||||
<button class="primary" id="i-filter-btn" style="align-self:flex-end">Filter</button>
|
||||
</div>
|
||||
|
||||
<div class="table-wrap">
|
||||
<table>
|
||||
<thead id="intel-thead"></thead>
|
||||
<tbody id="intel-tbody"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="pagination">
|
||||
<button id="iPrevBtn">← Prev</button>
|
||||
<span id="iPageInfo"></span>
|
||||
<button id="iNextBtn">Next →</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
|
||||
<!-- intelligence detail modal -->
|
||||
<div class="overlay" id="intelOverlay">
|
||||
<div class="modal" style="width:740px">
|
||||
<h2 id="intel-modal-title">Detail</h2>
|
||||
<div id="intel-modal-meta" style="font-size:12px; color:var(--muted-dark); margin-top:4px; display:flex; gap:12px; flex-wrap:wrap"></div>
|
||||
<div class="modal-divider"></div>
|
||||
<div id="intel-modal-body" class="intel-body"></div>
|
||||
<div class="modal-footer">
|
||||
<button id="intelCloseBtn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="toast"><span class="toast-dot"></span><span id="toast-msg"></span></div>
|
||||
|
||||
<script src="/admin/assets/js/app.js"></script>
|
||||
<script src="/admin/assets/js/intel-shared.js"></script>
|
||||
<script src="/admin/assets/js/intel-knowledge.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,89 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Duriin Admin — Intelligence / Predictions</title>
|
||||
<link rel="stylesheet" href="/admin/assets/css/base.css">
|
||||
<link rel="stylesheet" href="/admin/assets/css/layout.css">
|
||||
<link rel="stylesheet" href="/admin/assets/css/components.css">
|
||||
<link rel="stylesheet" href="/admin/assets/css/intel.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="app-header">
|
||||
<h1>Duriin <span>Admin</span></h1>
|
||||
<nav class="tabs">
|
||||
<a href="/admin/articles">Articles</a>
|
||||
<a href="/admin/events">Events</a>
|
||||
<a href="/admin/stats">Stats</a>
|
||||
<a href="/admin/intelligence" class="active">Intelligence</a>
|
||||
<a href="/admin/sql">SQL</a>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<nav class="subnav">
|
||||
<a href="/admin/intelligence/knowledge">Knowledge</a>
|
||||
<a href="/admin/intelligence/predictions" class="active">Predictions</a>
|
||||
<a href="/admin/intelligence/signals">Signals</a>
|
||||
<a href="/admin/intelligence/graph">Graph</a>
|
||||
</nav>
|
||||
|
||||
<main class="content">
|
||||
|
||||
<div id="intel-unavailable" class="intel-unavailable" style="display:none">
|
||||
intelligence.sqlite not found — is the intelligence worker running?
|
||||
</div>
|
||||
|
||||
<div id="intel-content">
|
||||
<div style="display:flex; gap:12px; flex-wrap:wrap; margin-bottom:24px" id="intel-stats-row"></div>
|
||||
|
||||
<div class="filters">
|
||||
<label>Company
|
||||
<select id="i-company"><option value="">All companies</option></select>
|
||||
</label>
|
||||
<label>Sort
|
||||
<select id="i-sort">
|
||||
<option value="id">Recent first</option>
|
||||
<option value="event_date">By event date</option>
|
||||
</select>
|
||||
</label>
|
||||
<button class="primary" id="i-filter-btn" style="align-self:flex-end">Filter</button>
|
||||
</div>
|
||||
|
||||
<div class="table-wrap">
|
||||
<table>
|
||||
<thead id="intel-thead"></thead>
|
||||
<tbody id="intel-tbody"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="pagination">
|
||||
<button id="iPrevBtn">← Prev</button>
|
||||
<span id="iPageInfo"></span>
|
||||
<button id="iNextBtn">Next →</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
|
||||
<div class="overlay" id="intelOverlay">
|
||||
<div class="modal" style="width:740px">
|
||||
<h2 id="intel-modal-title">Detail</h2>
|
||||
<div id="intel-modal-meta" style="font-size:12px; color:var(--muted-dark); margin-top:4px; display:flex; gap:12px; flex-wrap:wrap"></div>
|
||||
<div class="modal-divider"></div>
|
||||
<div id="intel-modal-body" class="intel-body"></div>
|
||||
<div class="modal-footer">
|
||||
<button id="intelCloseBtn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="toast"><span class="toast-dot"></span><span id="toast-msg"></span></div>
|
||||
|
||||
<script src="/admin/assets/js/app.js"></script>
|
||||
<script src="/admin/assets/js/intel-shared.js"></script>
|
||||
<script src="/admin/assets/js/intel-predictions.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,53 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Duriin Admin — Intelligence / Signals</title>
|
||||
<link rel="stylesheet" href="/admin/assets/css/base.css">
|
||||
<link rel="stylesheet" href="/admin/assets/css/layout.css">
|
||||
<link rel="stylesheet" href="/admin/assets/css/components.css">
|
||||
<link rel="stylesheet" href="/admin/assets/css/intel.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="app-header">
|
||||
<h1>Duriin <span>Admin</span></h1>
|
||||
<nav class="tabs">
|
||||
<a href="/admin/articles">Articles</a>
|
||||
<a href="/admin/events">Events</a>
|
||||
<a href="/admin/stats">Stats</a>
|
||||
<a href="/admin/intelligence" class="active">Intelligence</a>
|
||||
<a href="/admin/sql">SQL</a>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<nav class="subnav">
|
||||
<a href="/admin/intelligence/knowledge">Knowledge</a>
|
||||
<a href="/admin/intelligence/predictions">Predictions</a>
|
||||
<a href="/admin/intelligence/signals" class="active">Signals</a>
|
||||
<a href="/admin/intelligence/graph">Graph</a>
|
||||
</nav>
|
||||
|
||||
<main class="content">
|
||||
|
||||
<div id="intel-unavailable" class="intel-unavailable" style="display:none">
|
||||
intelligence.sqlite not found — is the intelligence worker running?
|
||||
</div>
|
||||
|
||||
<div id="intel-content">
|
||||
<div style="display:flex; gap:12px; flex-wrap:wrap; margin-bottom:24px" id="intel-stats-row"></div>
|
||||
|
||||
<div id="intel-signals-grid" class="signal-grid"></div>
|
||||
<div id="intel-signals-empty" class="signal-empty" style="display:none">No signals generated yet — waiting for the signal worker to run.</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<div id="toast"><span class="toast-dot"></span><span id="toast-msg"></span></div>
|
||||
|
||||
<script src="/admin/assets/js/app.js"></script>
|
||||
<script src="/admin/assets/js/intel-shared.js"></script>
|
||||
<script src="/admin/assets/js/intel-signals.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user