From 55bcec90c14db6f2956ed51cf4df1503c0767f81 Mon Sep 17 00:00:00 2001 From: Ken D'Ambrosio Date: Mon, 25 May 2026 00:46:10 +0000 Subject: =?UTF-8?q?Initial=20commit=20=E2=80=94=20menu.jots.org=20Flask/SQ?= =?UTF-8?q?Lite=20meal=20planner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- app/templates/recipe_detail.html | 290 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 290 insertions(+) create mode 100644 app/templates/recipe_detail.html (limited to 'app/templates/recipe_detail.html') diff --git a/app/templates/recipe_detail.html b/app/templates/recipe_detail.html new file mode 100644 index 0000000..65aa0b0 --- /dev/null +++ b/app/templates/recipe_detail.html @@ -0,0 +1,290 @@ +{% extends "base.html" %} +{% block title %}{{ recipe.name }} — Menu Planner{% endblock %} + +{% block content %} +
+ Back to Recipes + + +
+ +
+ +
+
+
+
+
+ {{ cuisine_emoji.get(recipe.cuisine, '') }} {{ recipe.cuisine }} +

{{ recipe.name }}

+

{{ recipe.description }}

+ {% if recipe.added_by %} +

Added by {{ recipe.added_by }}

+ {% endif %} +
+
+ {% if recipe.status == 'favorited' %} +
+ Favorited + {% endif %} +
+
+ + +
+ + {{ recipe.calories_per_serving|int }} cal / serving + + + {{ recipe.carbs_per_serving|int }}g net carbs + + {% if recipe.protein_per_serving %} + + {{ recipe.protein_per_serving|int }}g protein + + {% endif %} + {% if recipe.fat_per_serving %} + + {{ recipe.fat_per_serving|int }}g fat + + {% endif %} + + Prep: {{ recipe.prep_time }} min + + + Cook: {{ recipe.cook_time }} min + + + {{ recipe.servings }} servings + +
+ + +
+ Your rating: + + {% for i in range(1, 6) %} + + {% endfor %} + + {% if recipe.rating %}({{ recipe.rating }}/5){% endif %} +
+ + +

Ingredients

+ {% set categories = ingredients | map(attribute='category') | list | unique | list %} + {% for cat in ['Meat & Poultry','Seafood','Dairy & Eggs','Produce','Pantry','Spices & Herbs'] %} + {% set cat_ings = ingredients | selectattr('category', 'equalto', cat) | list %} + {% if cat_ings %} +
+
{{ cat }}
+
    + {% for ing in cat_ings %} +
  • + + {% if ing.quantity == ing.quantity|int %}{{ ing.quantity|int }}{% else %}{{ ing.quantity }}{% endif %} + {{ ing.unit }} + + {{ ing.name }} +
  • + {% endfor %} +
+
+ {% endif %} + {% endfor %} + + +

Instructions

+
+ {% for line in recipe.instructions.strip().split('\n') %} + {% if line.strip() %} +
{{ line.strip() }}
+ {% endif %} + {% endfor %} +
+
+
+ + +
+
Comments + {% if comments %}{{ comments|length }}{% endif %} +
+
+ {% for c in comments %} +
+
+
+ {{ c.username }} + {{ c.created_at[:16].replace('T',' ') }} +
+ {% if current_user.is_authenticated and current_user.username == c.username %} +
+ +
+ {% endif %} +
+

{{ c.body }}

+
+ {% else %} +

No comments yet.

+ {% endfor %} + + {% if current_user.is_authenticated %} +
+
+ +
+ +
+ {% else %} +

Log in to leave a comment.

+ {% endif %} +
+
+
+ + +
+ {% if current_user.is_authenticated %} +
+
+
Add to Meal Plan
+
+ + +
+
+
+ + +
+
+ + +
+
+ +
+
+
+ +
+
+
Recipe Status
+
+ + + +
+
+
+ {% else %} +
+
+ +

Log in to add this to your meal plan or update its status.

+ Log in +
+
+ {% endif %} +
+
+{% endblock %} + +{% block scripts %} + +{% endblock %} -- cgit v1.2.3