Files
SneakySwole/app/templates/base.html
Phillip Tarrant 23754ea239 feat: add Phase 3 Workout UI — auth, profiles, workout viewer, exercise browser
Build the core user-facing experience with admin login (bcrypt + signed
session cookies), profile switcher, workout day viewer with warmups and
exercise cards, and HTMX-powered exercise browser with search/filter.

- AuthService with bcrypt password verification and itsdangerous session tokens
- Auth dependency redirects to /login (303) for unauthenticated requests
- NavContextMiddleware injects admin/profiles/active_profile into all templates
- Profile management (list, switch, edit) with cookie-based active profile
- Workout day viewer shows warmups + exercises + per-user programming targets
- Exercise browser with HTMX filter dropdowns (no page reloads)
- Flash message partial for success/error feedback
- 12 new tests (66 total passing)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 11:14:52 -06:00

50 lines
1.4 KiB
HTML

<!DOCTYPE html>
<html lang="en" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}SneakySwole{% endblock %}</title>
<!-- Pico CSS (dark theme via data-theme="dark" on <html>) -->
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css">
<!-- Custom overrides -->
<link rel="stylesheet" href="/static/css/sneakyswole.css">
<!-- HTMX -->
<script src="https://unpkg.com/htmx.org@2.0.4"
integrity="sha384-HGfztofotfshcF7+8n44JQL2oJmowVChPTg48S+jvZoztPfvwD79OC/LTtG6dMp+"
crossorigin="anonymous"></script>
{% block head_extra %}{% endblock %}
</head>
<body>
<header class="container">
<nav>
<ul>
<li><strong><a href="/">SneakySwole</a></strong></li>
</ul>
<ul>
{% block nav_items %}
{% include "partials/nav.html" ignore missing %}
{% endblock %}
</ul>
</nav>
</header>
<main class="container">
{% block flash %}
{% include "partials/flash_message.html" ignore missing %}
{% endblock %}
{% block content %}{% endblock %}
</main>
<footer class="container">
<small>SneakySwole — Open-source workout tracking</small>
</footer>
{% block scripts %}{% endblock %}
</body>
</html>