forked from Rockachopa/Timmy-time-dashboard
feat: integrate Bootstrap 5.3 into Mission Control dashboard
- Add Bootstrap 5.3.3 CSS/JS via CDN to base.html with dark theme (data-bs-theme="dark") - Rework index.html to use Bootstrap grid (container-fluid, row, col-md-3/9), card components, and form utilities - Update health_status partial to use Bootstrap card-header/card-body structure - Rewrite style.css to override Bootstrap CSS variables for the dark mission-control palette; replace .badge.up/down/ready with .mc-badge-* modifiers; adapt layout and mobile breakpoints to Bootstrap grid All 27 tests pass. https://claude.ai/code/session_01KZMfwBpLuiv6x9GbzTqbys
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="en" data-bs-theme="dark">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
|
||||
@@ -10,6 +10,7 @@
|
||||
<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=JetBrains+Mono:wght@300;400;500;700&display=swap" rel="stylesheet" />
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous" />
|
||||
<link rel="stylesheet" href="/static/style.css" />
|
||||
<script src="https://unpkg.com/htmx.org@2.0.3" integrity="sha384-0895/pl2MU10Hqc6jd4RvrthNlDiE9U1tWmX7WRESftEDRosgxNsQG/Ze9YMRzHq" crossorigin="anonymous"></script>
|
||||
</head>
|
||||
@@ -37,5 +38,6 @@
|
||||
setInterval(updateClock, 1000);
|
||||
updateClock();
|
||||
</script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc4s9bIOgUxi8T/jzmE6bgx5xwkVYG3WhIEOFSjBqg4X" crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -2,77 +2,87 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="sidebar">
|
||||
<div class="container-fluid mc-content h-100">
|
||||
<div class="row g-3 h-100">
|
||||
|
||||
<!-- Agents -->
|
||||
<div class="panel">
|
||||
<div class="panel-header">// AGENTS</div>
|
||||
<div class="panel-body">
|
||||
<div class="agent-card">
|
||||
<div class="agent-card-header">
|
||||
<span class="status-dot amber"></span>
|
||||
<span class="agent-name">TIMMY</span>
|
||||
<!-- Sidebar -->
|
||||
<div class="col-12 col-md-3 d-flex flex-column gap-3 mc-sidebar">
|
||||
|
||||
<!-- Agents -->
|
||||
<div class="card mc-panel">
|
||||
<div class="card-header mc-panel-header">// AGENTS</div>
|
||||
<div class="card-body p-3">
|
||||
<div class="mc-agent-card">
|
||||
<div class="d-flex align-items-center gap-2 mb-2">
|
||||
<span class="status-dot amber"></span>
|
||||
<span class="agent-name">TIMMY</span>
|
||||
</div>
|
||||
<div class="agent-meta">
|
||||
<span class="meta-key">TYPE</span> <span class="meta-val">sovereign</span><br>
|
||||
<span class="meta-key">MODEL</span> <span class="meta-val">llama3.2</span><br>
|
||||
<span class="meta-key">BACKEND</span> <span class="meta-val">ollama</span><br>
|
||||
<span class="meta-key">VERSION</span> <span class="meta-val">1.0.0</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="agent-meta">
|
||||
<span class="meta-key">TYPE</span> <span class="meta-val">sovereign</span><br>
|
||||
<span class="meta-key">MODEL</span> <span class="meta-val">llama3.2</span><br>
|
||||
<span class="meta-key">BACKEND</span> <span class="meta-val">ollama</span><br>
|
||||
<span class="meta-key">VERSION</span> <span class="meta-val">1.0.0</span>
|
||||
</div>
|
||||
|
||||
<!-- System Health (HTMX polled) -->
|
||||
<div class="card mc-panel"
|
||||
hx-get="/health/status"
|
||||
hx-trigger="load, every 30s"
|
||||
hx-target="this"
|
||||
hx-swap="innerHTML">
|
||||
<div class="card-header mc-panel-header">// SYSTEM HEALTH</div>
|
||||
<div class="card-body p-3">
|
||||
<div class="health-row">
|
||||
<span class="health-label">LOADING...</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Chat Panel -->
|
||||
<div class="col-12 col-md-9 d-flex flex-column mc-chat-panel">
|
||||
<div class="card mc-panel flex-grow-1 d-flex flex-column min-h-0">
|
||||
<div class="card-header mc-panel-header">// TIMMY INTERFACE</div>
|
||||
|
||||
<div class="chat-log flex-grow-1 overflow-auto p-3" id="chat-log">
|
||||
<div class="chat-message agent">
|
||||
<div class="msg-meta">TIMMY // SYSTEM</div>
|
||||
<div class="msg-body">Mission Control initialized. Timmy ready — awaiting input.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-footer mc-chat-footer">
|
||||
<form hx-post="/agents/timmy/chat"
|
||||
hx-target="#chat-log"
|
||||
hx-swap="beforeend"
|
||||
hx-indicator="#send-indicator"
|
||||
hx-sync="this:drop"
|
||||
hx-disabled-elt="find button"
|
||||
hx-on::after-settle="this.reset(); scrollChat()"
|
||||
class="d-flex gap-2">
|
||||
<input type="text"
|
||||
name="message"
|
||||
class="form-control mc-input"
|
||||
placeholder="send a message to timmy..."
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
autocapitalize="none"
|
||||
spellcheck="false"
|
||||
enterkeyhint="send"
|
||||
required />
|
||||
<button type="submit" class="btn mc-btn-send">
|
||||
SEND
|
||||
<span id="send-indicator" class="htmx-indicator">▋</span>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- System Health (HTMX polled) -->
|
||||
<div class="panel"
|
||||
hx-get="/health/status"
|
||||
hx-trigger="load, every 30s"
|
||||
hx-target="this"
|
||||
hx-swap="innerHTML">
|
||||
<div class="panel-header">// SYSTEM HEALTH</div>
|
||||
<div class="panel-body">
|
||||
<div class="health-row">
|
||||
<span class="health-label">LOADING...</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Chat Panel -->
|
||||
<div class="panel chat-panel">
|
||||
<div class="panel-header">// TIMMY INTERFACE</div>
|
||||
|
||||
<div class="chat-log" id="chat-log">
|
||||
<div class="chat-message agent">
|
||||
<div class="msg-meta">TIMMY // SYSTEM</div>
|
||||
<div class="msg-body">Mission Control initialized. Timmy ready — awaiting input.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="chat-input-bar">
|
||||
<form hx-post="/agents/timmy/chat"
|
||||
hx-target="#chat-log"
|
||||
hx-swap="beforeend"
|
||||
hx-indicator="#send-indicator"
|
||||
hx-sync="this:drop"
|
||||
hx-disabled-elt="find button"
|
||||
hx-on::after-settle="this.reset(); scrollChat()"
|
||||
style="display:flex; flex:1; gap:8px;">
|
||||
<input type="text"
|
||||
name="message"
|
||||
placeholder="send a message to timmy..."
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
autocapitalize="none"
|
||||
spellcheck="false"
|
||||
enterkeyhint="send"
|
||||
required />
|
||||
<button type="submit">
|
||||
SEND
|
||||
<span id="send-indicator" class="htmx-indicator">▋</span>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
<div class="panel-header">// SYSTEM HEALTH</div>
|
||||
<div class="panel-body">
|
||||
<div class="card-header mc-panel-header">// SYSTEM HEALTH</div>
|
||||
<div class="card-body p-3">
|
||||
<div class="health-row">
|
||||
<span class="health-label">OLLAMA</span>
|
||||
{% if ollama %}
|
||||
<span class="badge up">UP</span>
|
||||
<span class="badge mc-badge-up">UP</span>
|
||||
{% else %}
|
||||
<span class="badge down">DOWN</span>
|
||||
<span class="badge mc-badge-down">DOWN</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="health-row">
|
||||
<span class="health-label">TIMMY</span>
|
||||
<span class="badge ready">READY</span>
|
||||
<span class="badge mc-badge-ready">READY</span>
|
||||
</div>
|
||||
<div class="health-row">
|
||||
<span class="health-label">MODEL</span>
|
||||
<span class="badge ready">llama3.2</span>
|
||||
<span class="badge mc-badge-ready">llama3.2</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user