Files
Timmy-time-dashboard/docs/index.html
2026-03-11 08:11:26 -04:00

356 lines
9.0 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Timmy Time — Mission Control</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=JetBrains+Mono:wght@400;600;700&display=swap" rel="stylesheet">
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #080412;
--bg-card: #110820;
--border: #2a1545;
--text: #c8b0e0;
--dim: #6b4a8a;
--bright: #ede0ff;
--accent: #ff7a2a;
--green: #00e87a;
--font: 'JetBrains Mono', monospace;
}
html, body {
background: var(--bg);
color: var(--text);
font-family: var(--font);
font-size: 14px;
line-height: 1.7;
-webkit-text-size-adjust: 100%;
}
.container {
max-width: 760px;
margin: 0 auto;
padding: 48px 24px 64px;
}
header {
margin-bottom: 48px;
}
h1 {
font-size: 28px;
font-weight: 700;
letter-spacing: 0.15em;
color: var(--accent);
margin-bottom: 8px;
}
.tagline {
font-size: 15px;
color: var(--bright);
margin-bottom: 16px;
}
.badges {
display: flex;
gap: 8px;
flex-wrap: wrap;
margin-bottom: 24px;
}
.badge {
display: inline-block;
padding: 3px 10px;
font-size: 11px;
letter-spacing: 0.08em;
border: 1px solid var(--border);
color: var(--dim);
}
.badge.highlight {
border-color: var(--accent);
color: var(--accent);
}
.links {
display: flex;
gap: 16px;
flex-wrap: wrap;
}
.links a {
color: var(--accent);
text-decoration: none;
font-size: 13px;
letter-spacing: 0.05em;
border-bottom: 1px solid transparent;
transition: border-color 0.2s;
}
.links a:hover {
border-bottom-color: var(--accent);
}
h2 {
font-size: 13px;
font-weight: 700;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--accent);
margin: 48px 0 16px;
padding-bottom: 8px;
border-bottom: 1px solid var(--border);
}
.stats {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
gap: 12px;
margin-bottom: 8px;
}
.stat {
background: var(--bg-card);
border: 1px solid var(--border);
padding: 16px;
}
.stat .number {
font-size: 24px;
font-weight: 700;
color: var(--bright);
display: block;
}
.stat .label {
font-size: 11px;
letter-spacing: 0.1em;
color: var(--dim);
text-transform: uppercase;
}
.tech-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 12px;
}
.tech-item {
background: var(--bg-card);
border: 1px solid var(--border);
padding: 14px 16px;
}
.tech-item strong {
color: var(--bright);
font-size: 13px;
}
.tech-item span {
display: block;
font-size: 12px;
color: var(--dim);
margin-top: 4px;
}
pre {
background: var(--bg-card);
border: 1px solid var(--border);
padding: 20px;
overflow-x: auto;
font-size: 12px;
line-height: 1.6;
color: var(--text);
}
.modules {
width: 100%;
border-collapse: collapse;
}
.modules th,
.modules td {
text-align: left;
padding: 8px 12px;
border-bottom: 1px solid var(--border);
font-size: 13px;
}
.modules th {
color: var(--dim);
font-size: 11px;
letter-spacing: 0.1em;
text-transform: uppercase;
font-weight: 600;
}
.modules td:first-child {
color: var(--bright);
font-weight: 600;
}
footer {
margin-top: 64px;
padding-top: 24px;
border-top: 1px solid var(--border);
font-size: 12px;
color: var(--dim);
}
footer a {
color: var(--dim);
text-decoration: none;
}
footer a:hover {
color: var(--accent);
}
@media (max-width: 480px) {
.container { padding: 24px 16px 48px; }
h1 { font-size: 22px; }
.stats { grid-template-columns: 1fr 1fr; }
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>TIMMY TIME</h1>
<p class="tagline">A local-first, sovereign AI agent system</p>
<div class="badges">
<span class="badge highlight">Python 3.11+</span>
<span class="badge highlight">FastAPI</span>
<span class="badge">HTMX</span>
<span class="badge">Ollama</span>
<span class="badge">SQLite</span>
<span class="badge">MIT License</span>
</div>
<div class="links">
<a href="https://github.com/AlexanderWhitestone/Timmy-time-dashboard">GitHub Repository</a>
<a href="https://github.com/AlexanderWhitestone/Timmy-time-dashboard/blob/main/README.md">README</a>
<a href="https://github.com/AlexanderWhitestone/Timmy-time-dashboard/blob/main/CLAUDE.md">Developer Guide</a>
</div>
</header>
<h2>At a Glance</h2>
<div class="stats">
<div class="stat">
<span class="number">8</span>
<span class="label">Python Packages</span>
</div>
<div class="stat">
<span class="number">643+</span>
<span class="label">Passing Tests</span>
</div>
<div class="stat">
<span class="number">73%+</span>
<span class="label">Code Coverage</span>
</div>
<div class="stat">
<span class="number">58</span>
<span class="label">API Endpoints</span>
</div>
</div>
<h2>Tech Stack</h2>
<div class="tech-grid">
<div class="tech-item">
<strong>FastAPI + HTMX</strong>
<span>Server-rendered UI with real-time updates</span>
</div>
<div class="tech-item">
<strong>Agno Framework</strong>
<span>Multi-agent orchestration with tool calling</span>
</div>
<div class="tech-item">
<strong>Ollama</strong>
<span>Local LLM inference, no cloud dependencies</span>
</div>
<div class="tech-item">
<strong>SQLite + WAL</strong>
<span>Agent memory, swarm registry, task queue</span>
</div>
<div class="tech-item">
<strong>WebSockets</strong>
<span>Live event feeds and push notifications</span>
</div>
<div class="tech-item">
<strong>Docker</strong>
<span>Multi-stage builds, dev and prod configs</span>
</div>
</div>
<h2>Architecture</h2>
<pre>
Browser / Phone
| HTTP + HTMX + WebSocket
v
+-----------------------------------------+
| FastAPI (dashboard.app) |
| routes: agents, health, swarm, |
| marketplace, voice, mobile |
+---+-------------+----------+-----------+
| | |
v v v
Jinja2 Timmy Infrastructure
Templates Agent +- LLM Router (cascade)
(HTMX) | +- WebSocket manager
+- Ollama +- Notifications
+- AirLLM +- Events bus
|
+-- Integrations (voice NLU, Telegram, Siri)
+-- WebSocket live feed
+-- Push notifications
+-- Spark (events, predictions, advisory)
Persistence: SQLite (Agno memory + swarm registry)
External: Ollama :11434, optional Redis, optional LND</pre>
<h2>Modules</h2>
<table class="modules">
<thead>
<tr><th>Package</th><th>Purpose</th></tr>
</thead>
<tbody>
<tr><td>timmy/</td><td>Core agent, personas, interface, semantic memory</td></tr>
<tr><td>dashboard/</td><td>FastAPI web UI, routes, Jinja2 templates</td></tr>
<tr><td>infrastructure/</td><td>WebSocket, notifications, events, LLM router</td></tr>
<tr><td>integrations/</td><td>Discord, Telegram, Siri Shortcuts, voice NLU</td></tr>
<tr><td>spark/</td><td>Event capture, predictions, advisory engine</td></tr>
<tr><td>brain/</td><td>Identity system, memory interface</td></tr>
<tr><td>timmy_serve/</td><td>API server, L402 Lightning gating</td></tr>
<tr><td>config.py</td><td>Pydantic settings — single source for all env vars</td></tr>
</tbody>
</table>
<h2>Quality</h2>
<div class="tech-grid">
<div class="tech-item">
<strong>CI/CD</strong>
<span>GitHub Actions: lint, test, Docker build</span>
</div>
<div class="tech-item">
<strong>Testing</strong>
<span>tox-managed: unit, integration, functional, e2e</span>
</div>
<div class="tech-item">
<strong>Linting</strong>
<span>black + isort + bandit security scanning</span>
</div>
<div class="tech-item">
<strong>Security</strong>
<span>CSRF, XSS prevention, no hardcoded secrets</span>
</div>
</div>
<footer>
<p>MIT License &copy; 2026 Alexander Whitestone &middot; <a href="https://github.com/AlexanderWhitestone/Timmy-time-dashboard">View Source</a></p>
</footer>
</div>
</body>
</html>