From 4babf9317975b0e34d9c0aab3d7565f7b79a707e Mon Sep 17 00:00:00 2001 From: Florian Heinz Date: Fri, 1 May 2026 14:38:54 +0200 Subject: [PATCH] Release Nouri 1.3.4 with quieter meal cards --- CloudronManifest.json | 4 +- RELEASE_NOTES_1.3.4.md | 24 ++++++++++++ nouri/__init__.py | 2 +- nouri/db.py | 2 +- nouri/static/css/styles.css | 26 ++++++++---- nouri/static/pwa/service-worker.js | 2 +- nouri/templates/items/list.html | 63 +++++++++++++++++++++--------- 7 files changed, 92 insertions(+), 31 deletions(-) create mode 100644 RELEASE_NOTES_1.3.4.md diff --git a/CloudronManifest.json b/CloudronManifest.json index 893cc5b..a55028a 100644 --- a/CloudronManifest.json +++ b/CloudronManifest.json @@ -4,8 +4,8 @@ "author": "Florian Heinz", "description": "Private Flask app for meals, shopping and gentle food planning", "tagline": "einfach essen planen", - "version": "1.3.3", - "upstreamVersion": "1.3.3", + "version": "1.3.4", + "upstreamVersion": "1.3.4", "healthCheckPath": "/", "httpPort": 8000, "manifestVersion": 2, diff --git a/RELEASE_NOTES_1.3.4.md b/RELEASE_NOTES_1.3.4.md new file mode 100644 index 0000000..9465685 --- /dev/null +++ b/RELEASE_NOTES_1.3.4.md @@ -0,0 +1,24 @@ +# Nouri 1.3.4 + +Nouri 1.3.4 räumt die Mahlzeiten-Übersicht auf und bringt sie optisch näher an die ruhigeren Lebensmittel-Karten. Der Fokus liegt auf weniger sichtbaren Details, klarerem Scannen und dem Namen direkt unter dem Bild. + +## Neu in 1.3.4 + +- Mahlzeitenkarten zeigen auf der Übersichtsseite jetzt zuerst Bild oder Platzhalter und darunter den Namen. +- Details wie Sichtbarkeit, Zielperson, Mahlzeitentyp, Energie und Tags liegen in einer Hover-Ansicht. +- Komponenten und Notizen werden ebenfalls erst beim Hover bzw. Fokus eingeblendet. +- Die sichtbaren Text-Buttons auf Mahlzeitenkarten wurden durch kompakte Icon-Aktionen ersetzt. +- Archivieren bleibt als kleiner Kreis oben rechts erreichbar. +- Tagesplan und Einkaufsliste sind als schnelle Icon-Aktionen oben links erreichbar. + +## Bedienung + +- Auf Desktop erscheinen Zusatzinfos beim Mouseover. +- Per Tastatur erscheinen Zusatzinfos, sobald eine Aktion auf der Karte fokussiert ist. +- Auf kleinen Bildschirmen bleibt die Übersicht bewusst reduziert, wie bei den Lebensmittelkarten. + +## Betrieb + +- Cloudron-Version und Upstream-Version stehen jetzt auf `1.3.4`. +- Die interne Schema-Version und der App-Version-Fallback wurden auf `1.3.4` angehoben. +- Der Service Worker nutzt einen neuen Cache-Namen für `1.3.4`. diff --git a/nouri/__init__.py b/nouri/__init__.py index f2b6321..a03c5ff 100644 --- a/nouri/__init__.py +++ b/nouri/__init__.py @@ -93,7 +93,7 @@ def load_app_version(root_dir: Path) -> str: ).strip() if manifest_version: return manifest_version - return "1.3.3" + return "1.3.4" def load_release_url() -> str: diff --git a/nouri/db.py b/nouri/db.py index 7d6675b..5291d95 100644 --- a/nouri/db.py +++ b/nouri/db.py @@ -15,7 +15,7 @@ from .constants import ( DEFAULT_CATEGORY_BUILDERS, ) -CURRENT_SCHEMA_VERSION = "1.3.3" +CURRENT_SCHEMA_VERSION = "1.3.4" ANIMAL_HINTS = ( "huhn", diff --git a/nouri/static/css/styles.css b/nouri/static/css/styles.css index 1dd3507..d112051 100644 --- a/nouri/static/css/styles.css +++ b/nouri/static/css/styles.css @@ -1236,7 +1236,8 @@ h3 { border-color: color-mix(in srgb, var(--line) 58%, rgba(243, 177, 125, 0.16) 42%); } -.item-card-food { +.item-card-food, +.item-card-meal { grid-template-columns: 1fr; gap: 0.9rem; align-content: start; @@ -1248,20 +1249,23 @@ h3 { opacity: 0.72; } -.item-card-food .item-media-food { +.item-card-food .item-media-food, +.item-card-meal .item-media-meal { width: min(100%, 170px); justify-self: center; aspect-ratio: 1; border-radius: 24px; } -.item-card-food .item-body-food { +.item-card-food .item-body-food, +.item-card-meal .item-body-meal { justify-items: center; text-align: center; gap: 0.25rem; } -.item-card-food .item-body-food h2 { +.item-card-food .item-body-food h2, +.item-card-meal .item-body-meal h2 { margin: 0; font-size: 1.9rem; line-height: 1.08; @@ -1330,6 +1334,10 @@ h3 { box-shadow: 0 10px 22px rgba(70, 48, 34, 0.12); } +.item-card-icon-link { + text-decoration: none; +} + .item-card-icon-button:hover { background: color-mix(in srgb, var(--accent) 78%, #fff 22%); color: #201a17; @@ -1397,7 +1405,9 @@ h3 { } .item-card-food:hover .item-card-hover-meta, -.item-card-food:focus-within .item-card-hover-meta { +.item-card-food:focus-within .item-card-hover-meta, +.item-card-meal:hover .item-card-hover-meta, +.item-card-meal:focus-within .item-card-hover-meta { opacity: 1; visibility: visible; transform: translateY(0); @@ -3613,11 +3623,13 @@ legend { grid-template-columns: 1fr; } - .item-card-food { + .item-card-food, + .item-card-meal { min-height: 0; } - .item-card-food .item-media-food { + .item-card-food .item-media-food, + .item-card-meal .item-media-meal { width: min(100%, 156px); } diff --git a/nouri/static/pwa/service-worker.js b/nouri/static/pwa/service-worker.js index c409809..1f8f3be 100644 --- a/nouri/static/pwa/service-worker.js +++ b/nouri/static/pwa/service-worker.js @@ -1,4 +1,4 @@ -const CACHE_NAME = "nouri-v1-3-3"; +const CACHE_NAME = "nouri-v1-3-4"; const OFFLINE_URL = "/static/pwa/offline.html"; const STATIC_ASSETS = [ "/static/css/styles.css", diff --git a/nouri/templates/items/list.html b/nouri/templates/items/list.html index 58617c9..09813e7 100644 --- a/nouri/templates/items/list.html +++ b/nouri/templates/items/list.html @@ -162,8 +162,44 @@ {% else %} -
-
+
+ {% if item.can_edit %} + + {{ item.name }} bearbeiten + +
+ {{ csrf_input() }} + +
+ {% endif %} +
+ + + +
+ {{ csrf_input() }} + +
+
+ +
{% if item.photo_filename %} {{ item.name[:1] }}
{% endif %}
-
+ +
+

{{ item.name }}

+
+ +
{% endif %} {% endfor %}