diff options
| author | Ken D'Ambrosio <ken@claude> | 2026-05-25 00:46:10 +0000 |
|---|---|---|
| committer | Ken D'Ambrosio <ken@claude> | 2026-05-25 00:46:10 +0000 |
| commit | 55bcec90c14db6f2956ed51cf4df1503c0767f81 (patch) | |
| tree | f25bfb8c46366b5d3dc6b4f66e242c65094b4ada /app/templates/base.html | |
Initial commit — menu.jots.org Flask/SQLite meal planner
Full-featured weekly menu planner with:
- Recipe library with ratings, comments, cuisine/nationality, added-by attribution
- AI recipe assistant (Claude) with URL fetching and file upload
- Weekly meal plan grid with shopping list generation
- Sort by name, prep/cook time, or rating
- Print and copy-link support
- Deployed on LXC container (192.168.10.51) behind Apache reverse proxy
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'app/templates/base.html')
| -rw-r--r-- | app/templates/base.html | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/app/templates/base.html b/app/templates/base.html new file mode 100644 index 0000000..b58ef64 --- /dev/null +++ b/app/templates/base.html @@ -0,0 +1,99 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <title>{% block title %}Menu Planner{% endblock %}</title> + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"> + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"> + <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}"> +</head> +<body> + +<nav class="navbar navbar-expand-lg navbar-dark sticky-top"> + <div class="container-fluid px-4"> + <a class="navbar-brand fw-bold" href="/"> + <i class="bi bi-journal-richtext me-2"></i>Menu Planner + </a> + <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navMain"> + <span class="navbar-toggler-icon"></span> + </button> + <div class="collapse navbar-collapse" id="navMain"> + <ul class="navbar-nav me-auto gap-1"> + <li class="nav-item"> + <a class="nav-link {% if request.endpoint == 'index' %}active{% endif %}" href="/"> + <i class="bi bi-house me-1"></i>Dashboard + </a> + </li> + <li class="nav-item"> + <a class="nav-link {% if request.endpoint in ['recipes','recipe_detail','add_recipe'] %}active{% endif %}" href="/recipes"> + <i class="bi bi-book me-1"></i>Recipes + </a> + </li> + <li class="nav-item"> + <a class="nav-link {% if request.endpoint == 'meal_plan' %}active{% endif %}" href="/meal-plan"> + <i class="bi bi-calendar-week me-1"></i>Meal Plan + </a> + </li> + <li class="nav-item"> + <a class="nav-link {% if request.endpoint == 'shopping_list' %}active{% endif %}" href="/shopping-list"> + <i class="bi bi-cart me-1"></i>Shopping List + </a> + </li> + </ul> + + <ul class="navbar-nav ms-auto gap-1 align-items-center"> + {% if current_user.is_authenticated %} + <li class="nav-item"> + <a class="nav-link {% if request.endpoint == 'ai_chat_page' %}active{% endif %}" href="/ai"> + <i class="bi bi-stars me-1"></i>AI Assistant + </a> + </li> + <li class="nav-item"> + <a class="nav-link {% if request.endpoint == 'add_recipe' %}active{% endif %}" href="/recipes/add"> + <i class="bi bi-plus-circle me-1"></i>Add Recipe + </a> + </li> + <li class="nav-item dropdown"> + <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown"> + <i class="bi bi-person-circle me-1"></i>{{ current_user.username }} + </a> + <ul class="dropdown-menu dropdown-menu-end"> + <li><a class="dropdown-item" href="/logout"><i class="bi bi-box-arrow-right me-2"></i>Log out</a></li> + </ul> + </li> + {% else %} + <li class="nav-item"> + <a class="nav-link btn btn-sm btn-outline-light px-3 ms-1" href="/login"> + <i class="bi bi-person me-1"></i>Log in + </a> + </li> + {% endif %} + </ul> + </div> + </div> +</nav> + +<main class="container-fluid px-4 py-4"> + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} + <div class="alert alert-{{ category }} alert-dismissible fade show mb-3" role="alert"> + {{ message }} + <button type="button" class="btn-close" data-bs-dismiss="alert"></button> + </div> + {% endfor %} + {% endif %} + {% endwith %} + {% block content %}{% endblock %} +</main> + +<footer class="text-center py-3 mt-4 no-print"> + <small class="text-muted">Menu Planner — Low-carb, big flavor</small> +</footer> + +<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script> +<script src="{{ url_for('static', filename='js/main.js') }}"></script> +{% block scripts %}{% endblock %} +</body> +</html> |
