File size: 5,271 Bytes
b068b76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Crypto Intelligence Dashboard</title>
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
    <link rel="stylesheet" href="/static/css/unified-ui.css" />
    <link rel="stylesheet" href="/static/css/components.css" />
    <script defer src="/static/js/ui-feedback.js"></script>
    <script defer src="/static/js/dashboard-app.js"></script>
</head>
<body class="page page-dashboard">
<header class="top-nav">
    <div class="branding">
        <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="12" r="10"/></svg>
        <div>
            <strong>Crypto Intelligence Hub</strong>
            <small style="color:var(--ui-text-muted);letter-spacing:0.2em;">Real-time data + HF models</small>
        </div>
    </div>
    <nav class="nav-links">
        <a class="active" href="/dashboard">Dashboard</a>
        <a href="/admin">Admin</a>
        <a href="/hf_console">HF Console</a>
        <a href="/docs" target="_blank" rel="noreferrer">API Docs</a>
    </nav>
</header>

<main class="page-content">
    <section class="card" id="intro-card">
        <div class="section-heading">
            <h2>Unified Market Pulse</h2>
            <span class="badge info" id="intro-source">Loading...</span>
        </div>
        <p style="color:var(--text-muted);max-width:780px;line-height:1.6;">
            Live collectors + local fallback registry guarantee resilient insights. All numbers below already honor the FastAPI routes
            (<code>/api/crypto/prices/top</code>, <code>/api/crypto/market-overview</code>, <code>/health</code>) so you can monitor status even when providers degrade.
        </p>
    </section>

    <section class="card-grid" id="market-metrics">
        <article class="card"><h3>Total Market Cap</h3><div class="metric-value" id="metric-market-cap">-</div><div class="metric-subtext" id="metric-cap-source"></div></article>
        <article class="card"><h3>24h Volume</h3><div class="metric-value" id="metric-volume">-</div><div class="metric-subtext" id="metric-volume-source"></div></article>
        <article class="card"><h3>BTC Dominance</h3><div class="metric-value" id="metric-btc-dom">-</div><div class="metric-subtext">Based on /api/crypto/market-overview</div></article>
        <article class="card"><h3>System Health</h3><div class="metric-value" id="metric-health">-</div><div class="metric-subtext" id="metric-health-details"></div></article>
    </section>

    <section class="card table-card">
        <div class="section-heading">
            <h2>Top Assets</h2>
            <span class="badge info" id="top-prices-source">Loading...</span>
        </div>
        <div class="table-wrapper">
            <table>
                <thead>
                <tr><th>Symbol</th><th>Price</th><th>24h %</th><th>Volume</th></tr>
                </thead>
                <tbody id="top-prices-table">
                <tr><td colspan="4">Loading...</td></tr>
                </tbody>
            </table>
        </div>
    </section>

    <section class="split-grid">
        <article class="card" id="overview-card">
            <div class="section-heading">
                <h2>Market Overview</h2>
                <span class="badge info" id="market-overview-source">Loading...</span>
            </div>
            <ul class="list" id="market-overview-list"></ul>
        </article>
        <article class="card" id="system-card">
            <div class="section-heading">
                <h2>System & Rate Limits</h2>
                <span class="badge info" id="system-status-source">/health</span>
            </div>
            <div id="system-health-status" class="metric-subtext"></div>
            <ul class="list" id="system-status-list"></ul>
            <div class="section-heading" style="margin-top:24px;">
                <h2>Configuration</h2>
            </div>
            <ul class="list" id="system-config-list"></ul>
            <div class="section-heading" style="margin-top:24px;">
                <h2>Rate Limits</h2>
            </div>
            <ul class="list" id="rate-limits-list"></ul>
        </article>
    </section>

    <section class="split-grid">
        <article class="card" id="hf-widget">
            <div class="section-heading">
                <h2>HuggingFace Snapshot</h2>
                <span class="badge info" id="hf-health-status">Loading...</span>
            </div>
            <div id="hf-widget-summary" class="metric-subtext"></div>
            <ul class="list" id="hf-registry-list"></ul>
        </article>
        <article class="card">
            <div class="section-heading">
                <h2>Live Stream (/ws)</h2>
                <span class="badge info" id="ws-status">Connecting...</span>
            </div>
            <div class="ws-stream" id="ws-stream"></div>
        </article>
    </section>
</main>
</body>
</html>