← Back
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Weather Bot | Dashboard</title>
    <base href="/weather-bot/">
    <link rel="stylesheet" href="static/css/style.css?v=20260523">
</head>
<body>
    <div class="app">
        <!-- Header -->
        <header class="header">
            <div class="header-left">
                <div class="logo">WB</div>
                <div>
                    <h1>Weather Bot</h1>
                    <span class="header-sub" id="header-sub">Polymarket Weather Trading</span>
                </div>
                <span class="badge" id="mode-badge">DRY RUN</span>
            </div>
            <div class="header-right">
                <span class="status-indicator" id="status-indicator">
                    <span class="status-dot" id="status-dot"></span>
                    <span id="status-text">Connecting...</span>
                </span>
                <button class="btn btn-icon" id="scan-btn" onclick="triggerScan()" title="Run scan now">
                    <svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><path d="M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1zm0 12.5A5.5 5.5 0 1 1 8 2.5a5.5 5.5 0 0 1 0 11zM8 4v4l3 1.5"/></svg>
                    Scan
                </button>
                <button class="btn btn-icon" onclick="triggerResolve()" title="Check trade outcomes">
                    <svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><path d="M6.5 12.5l-4-4 1.4-1.4L6.5 9.7l5.6-5.6 1.4 1.4z"/></svg>
                    Resolve
                </button>
            </div>
        </header>

        <!-- Kill Switch -->
        <div class="kill-switch-bar" id="kill-switch-bar" style="display:none">
            <span>KILL SWITCH ACTIVE — <span id="kill-reason"></span></span>
            <button class="btn btn-danger btn-sm" onclick="toggleKillSwitch()">Deactivate</button>
        </div>

        <!-- KPI Strip -->
        <div class="kpi-strip">
            <div class="kpi">
                <span class="kpi-label">Bankroll</span>
                <span class="kpi-value" id="bankroll">$0</span>
            </div>
            <div class="kpi-divider"></div>
            <div class="kpi">
                <span class="kpi-label">Total P&L</span>
                <span class="kpi-value" id="daily-pnl">$0.00</span>
            </div>
            <div class="kpi-divider"></div>
            <div class="kpi">
                <span class="kpi-label">Open</span>
                <span class="kpi-value" id="open-positions">0</span>
            </div>
            <div class="kpi-divider"></div>
            <div class="kpi">
                <span class="kpi-label">Deployed</span>
                <span class="kpi-value" id="deployed">$0</span>
            </div>
            <div class="kpi-divider"></div>
            <div class="kpi">
                <span class="kpi-label">Win Rate</span>
                <span class="kpi-value" id="win-rate">—</span>
            </div>
            <div class="kpi-divider"></div>
            <div class="kpi">
                <span class="kpi-label">Trades</span>
                <span class="kpi-value" id="trades-today">0</span>
            </div>
            <div class="kpi-divider"></div>
            <div class="kpi">
                <span class="kpi-label">Markets</span>
                <span class="kpi-value" id="markets-found">0</span>
            </div>
            <div class="kpi-divider"></div>
            <div class="kpi">
                <span class="kpi-label">Last Scan</span>
                <span class="kpi-value kpi-value-sm" id="last-scan">Never</span>
            </div>
        </div>

        <!-- ===== OPEN POSITIONS ===== -->
        <section class="section" id="section-open">
            <div class="section-header">
                <h2>Open Positions</h2>
                <span class="section-count" id="open-count">0</span>
            </div>
            <div id="open-trades-container">
                <div class="empty-state" id="open-empty">
                    <div class="empty-icon">📭</div>
                    <div>No open positions</div>
                    <div class="empty-sub">Bot will open trades when edge is found</div>
                </div>
            </div>
        </section>

        <!-- ===== TABS: History / Markets / Performance / Settings ===== -->
        <div class="tabs">
            <button class="tab active" onclick="switchTab('history', this)">Trade History</button>
            <button class="tab" onclick="switchTab('markets', this)">Markets</button>
            <button class="tab" onclick="switchTab('performance', this)">Performance</button>
            <button class="tab" onclick="switchTab('settings', this)">Settings</button>
        </div>

        <!-- History Tab -->
        <div class="tab-content" id="tab-history">
            <div class="tab-toolbar">
                <div class="filter-group">
                    <button class="filter-btn active" onclick="filterHistory('all', this)">All</button>
                    <button class="filter-btn" onclick="filterHistory('won', this)">Wins</button>
                    <button class="filter-btn" onclick="filterHistory('lost', this)">Losses</button>
                    <button class="filter-btn" onclick="filterHistory('pending', this)">Pending</button>
                </div>
                <span class="tab-info" id="history-info">0 trades</span>
            </div>
            <div class="table-wrap">
                <table class="data-table" id="history-table">
                    <thead>
                        <tr>
                            <th>Date</th>
                            <th>City</th>
                            <th>Bet</th>
                            <th>Side</th>
                            <th>Price</th>
                            <th>Size</th>
                            <th>Edge</th>
                            <th>Model vs Mkt</th>
                            <th>Status</th>
                            <th>P&L</th>
                        </tr>
                    </thead>
                    <tbody id="history-body">
                        <tr><td colspan="10" class="empty">Loading...</td></tr>
                    </tbody>
                </table>
            </div>
            <div class="history-footer">
                <select id="history-limit" onchange="renderHistory(allTrades)">
                    <option value="10" selected>Last 10</option>
                    <option value="25">Last 25</option>
                    <option value="50">Last 50</option>
                    <option value="0">Show all</option>
                </select>
            </div>
        </div>

        <!-- Markets Tab -->
        <div class="tab-content hidden" id="tab-markets">
            <div class="tab-toolbar">
                <span class="tab-info" id="markets-info">0 active markets</span>
            </div>
            <div class="table-wrap">
                <table class="data-table">
                    <thead>
                        <tr>
                            <th>City</th>
                            <th>Date</th>
                            <th>Question</th>
                            <th>Threshold</th>
                            <th>YES Price</th>
                            <th>Volume</th>
                        </tr>
                    </thead>
                    <tbody id="markets-body">
                        <tr><td colspan="6" class="empty">Loading...</td></tr>
                    </tbody>
                </table>
            </div>
        </div>

        <!-- Performance Tab -->
        <div class="tab-content hidden" id="tab-performance">
            <div class="perf-grid">
                <!-- Summary cards -->
                <div class="perf-card">
                    <div class="perf-card-title">Total Resolved</div>
                    <div class="perf-card-value" id="perf-total">0</div>
                </div>
                <div class="perf-card">
                    <div class="perf-card-title">Win Rate</div>
                    <div class="perf-card-value" id="perf-winrate">—</div>
                </div>
                <div class="perf-card">
                    <div class="perf-card-title">Total P&L</div>
                    <div class="perf-card-value" id="perf-pnl">$0.00</div>
                </div>
                <div class="perf-card">
                    <div class="perf-card-title">Unresolved</div>
                    <div class="perf-card-value" id="perf-pending">0</div>
                </div>
            </div>

            <h3 class="sub-title">By Edge Tier</h3>
            <div class="table-wrap">
                <table class="data-table">
                    <thead>
                        <tr><th>Tier</th><th>Trades</th><th>Win Rate</th><th>Avg Edge</th><th>P&L</th></tr>
                    </thead>
                    <tbody id="perf-tier-body">
                        <tr><td colspan="5" class="empty">No data yet</td></tr>
                    </tbody>
                </table>
            </div>

            <h3 class="sub-title">By City</h3>
            <div class="table-wrap">
                <table class="data-table">
                    <thead>
                        <tr><th>City</th><th>Trades</th><th>Win Rate</th><th>P&L</th></tr>
                    </thead>
                    <tbody id="perf-city-body">
                        <tr><td colspan="4" class="empty">No data yet</td></tr>
                    </tbody>
                </table>
            </div>

            <h3 class="sub-title">Calibration</h3>
            <div class="table-wrap">
                <table class="data-table">
                    <thead>
                        <tr><th>City</th><th>Brier Score</th><th>MAE</th><th>Samples</th><th>Confidence</th></tr>
                    </thead>
                    <tbody id="perf-cal-body">
                        <tr><td colspan="5" class="empty">No calibration data</td></tr>
                    </tbody>
                </table>
            </div>
        </div>

        <!-- Settings Tab -->
        <div class="tab-content hidden" id="tab-settings">
            <div class="settings-grid">
                <div class="settings-card">
                    <h3>Bot Control</h3>
                    <div class="setting-row">
                        <span>Mode</span>
                        <span class="badge" id="ctrl-mode">DRY RUN</span>
                    </div>
                    <div class="setting-row">
                        <span>Kill Switch</span>
                        <button class="btn btn-sm" id="kill-btn" onclick="toggleKillSwitch()">Activate</button>
                    </div>
                    <div class="setting-row">
                        <span>Scan Now</span>
                        <button class="btn btn-sm btn-primary" onclick="triggerScan()">Run</button>
                    </div>
                    <div class="setting-row">
                        <span>Resolve Trades</span>
                        <button class="btn btn-sm btn-primary" onclick="triggerResolve()">Resolve</button>
                    </div>
                </div>
                <div class="settings-card">
                    <h3>Risk Parameters</h3>
                    <div class="setting-row"><span>Max Daily Loss</span><span id="ctrl-max-loss">$20</span></div>
                    <div class="setting-row"><span>Max Positions</span><span id="ctrl-max-pos">20</span></div>
                    <div class="setting-row"><span>Bet Size</span><span>$1</span></div>
                    <div class="setting-row"><span>Min Edge</span><span>10%</span></div>
                    <div class="setting-row"><span>Min Volume</span><span>$5,000</span></div>
                    <div class="setting-row"><span>Max Ensemble STD</span><span>7F</span></div>
                    <div class="setting-row"><span>Max Slippage</span><span>3c</span></div>
                    <div class="setting-row"><span>Kelly Fraction</span><span>20%</span></div>
                </div>
                <div class="settings-card">
                    <h3>Scan Schedule</h3>
                    <div class="setting-row"><span>Scan Interval</span><span>15 min</span></div>
                    <div class="setting-row"><span>Resolve Interval</span><span>10 min</span></div>
                    <div class="setting-row"><span>Ensemble Members</span><span>82 (GFS+ECMWF)</span></div>
                    <div class="setting-row"><span>Cities Covered</span><span>49</span></div>
                </div>
            </div>
        </div>

        <!-- Footer -->
        <footer class="footer">
            <span>Polymarket Weather Bot v2</span>
            <span id="footer-time"></span>
        </footer>
    </div>

    <script src="static/js/app.js?v=20260523"></script>
</body>
</html>

📜 Git History

8fca132chore: initial commit — version control setup5 weeks ago
Show last diff
Loading...