Files
POPS/app/templates/base.html
Martin Hohenberg ee0b1b39e9 Add Jinja2 web UI with Bootstrap 5 dark theme
- app/templates/: base layout with sidebar nav + 6 pages
  (dashboard, printers, jobs, filaments, todos, pricing)
- app/routers/ui.py: HTML routes querying the DB live
- API routes moved to /api/* prefix
- requirements: jinja2, python-multipart

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 21:26:23 +02:00

66 lines
2.9 KiB
HTML

<!DOCTYPE html>
<html lang="en" data-bs-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}POPS{% endblock %}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
<style>
body { background: #0d1117; }
#sidebar {
width: 230px;
min-height: 100vh;
background: #010409;
border-right: 1px solid #21262d;
flex-shrink: 0;
}
#sidebar .brand { border-bottom: 1px solid #21262d; }
#sidebar .nav-link {
color: #8b949e;
border-radius: 6px;
padding: .4rem .75rem;
font-size: .9rem;
}
#sidebar .nav-link i { width: 18px; }
#sidebar .nav-link:hover { color: #e6edf3; background: #161b22; }
#sidebar .nav-link.active { color: #e6edf3; background: #21262d; font-weight: 500; }
#content { min-height: 100vh; }
.card { border-color: #21262d !important; background: #161b22 !important; }
.table-dark { --bs-table-bg: transparent; }
.table > :not(caption) > * > * { border-color: #21262d; }
</style>
</head>
<body>
<div class="d-flex">
<nav id="sidebar" class="p-3 d-flex flex-column gap-3">
<a href="/" class="brand text-decoration-none pb-3">
<div class="d-flex align-items-center gap-2">
<i class="bi bi-printer-fill text-primary fs-5"></i>
<div>
<div class="text-white fw-semibold lh-sm">POPS</div>
<div class="text-secondary lh-sm" style="font-size:.68rem;letter-spacing:.03em">PRINT FARM MANAGER</div>
</div>
</div>
</a>
<ul class="nav flex-column gap-1">
<li><a href="/" class="nav-link {% if active == 'dashboard' %}active{% endif %}"><i class="bi bi-speedometer2 me-2"></i>Dashboard</a></li>
<li><a href="/printers" class="nav-link {% if active == 'printers' %}active{% endif %}"><i class="bi bi-printer me-2"></i>Printers</a></li>
<li><a href="/jobs" class="nav-link {% if active == 'jobs' %}active{% endif %}"><i class="bi bi-list-task me-2"></i>Jobs</a></li>
<li><a href="/filaments" class="nav-link {% if active == 'filaments' %}active{% endif %}"><i class="bi bi-record-circle me-2"></i>Filaments</a></li>
<li><a href="/todos" class="nav-link {% if active == 'todos' %}active{% endif %}"><i class="bi bi-check2-square me-2"></i>To-Do</a></li>
<li><a href="/pricing" class="nav-link {% if active == 'pricing' %}active{% endif %}"><i class="bi bi-currency-euro me-2"></i>Pricing</a></li>
</ul>
</nav>
<main id="content" class="flex-grow-1 p-4">
{% block content %}{% endblock %}
</main>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>