# Nouri Nouri ist eine kleine private Flask-App für einen Haushalt, um Essensideen, Einkäufe, vorhandene Lebensmittel und eine einfache Tages- oder Wochenplanung ruhig und alltagsnah festzuhalten. ## Merkmale in Version 1.0.0 - Lebensmittel und Mahlzeitenideen anlegen - Fotos lokal hochladen - Einkaufsliste mit Abhaken - „Zuhause“ als sichtbarer Vorrat mit Tageszeit-Filtern - Archiv mit Suche und schneller Wiederaufnahme - Tagesplan mit schnellen Vorschlägen je Tageszeit - Wochenansicht für die nächsten 7 Tage - einfache Suche und Filter für Lebensmittel und Mahlzeitenideen - mehrere Haushaltsnutzer mit Rollen - gemeinsame und persönliche Inhalte - Profilseite und Passwortänderung - kleine Admin-Verwaltung für Nutzer - kompaktere mobile Navigation mit Bottom-Bar - Tagesvorlagen und Wochenvorlagen - kleine Pakete für wiederkehrende Einkaufs- oder Planungsbausteine - ruhige Hinweise und Vorschläge aus Zuhause, Archiv und bisherigen Planungen - globale Kategorien pro Haushalt - „Für wen?“ direkt an Lebensmitteln und Mahlzeiten - Einkaufsrhythmus mit geplantem Einkaufstag und später aktivierten Bedarfen - PWA-Grundlage mit Web App Manifest, Service Worker und optionalem Web Push ## Lokal starten ```bash python3 -m venv .venv . .venv/bin/activate pip install -r requirements.txt flask --app wsgi run --debug ``` Dann `http://127.0.0.1:5000` öffnen und beim ersten Start einen ersten Haushalt-Benutzer unter `/auth/setup` anlegen. ## Konfiguration Die App legt Daten standardmäßig unter `./data` ab. Wichtige Umgebungsvariablen: - `NOURI_SECRET_KEY`: Session-Secret für Produktion - `NOURI_DATA_DIR`: Pfad für Datenbank und Uploads, lokal standardmäßig `./data`, auf Cloudron `/app/data` - `NOURI_MAX_UPLOAD_MB`: maximales Upload-Limit in MB, Standard `5` - `NOURI_SECURE_COOKIES`: bei HTTPS in Produktion auf `1` setzen - `NOURI_TIMEZONE`: lokale Zeitzone, z. B. `Europe/Berlin` - `NOURI_VAPID_PUBLIC_KEY`: öffentlicher VAPID-Schlüssel für Web Push - `NOURI_VAPID_PRIVATE_KEY`: privater VAPID-Schlüssel für Web Push - `NOURI_VAPID_SUBJECT`: Kontaktangabe für Web Push, z. B. `mailto:mail@hnz.io` ## Migration und Datenhaltung Beim Start erweitert Nouri das SQLite-Schema pragmatisch direkt weiter. Vorhandene Daten bleiben dabei erhalten und werden weiterverwendet. Wichtig für die Trennung zwischen lokal und Produktion: - lokal nutzt Nouri ohne gesetzte Variable standardmäßig `./data` - auf Cloudron nutzt Nouri `/app/data` - `data/` ist nicht für Git oder das Paket gedacht - produktive Daten unter `/app/data` bleiben bei Updates erhalten ## Cloudron Nouri ist so vorbereitet, dass Code und persistente Daten sauber getrennt bleiben: - Code liegt im Container unter `/app/code` - persistente Daten liegen unter `/app/data` - Datenbank und Uploads werden nicht aus dem lokalen `./data` nach Produktion übernommen - Updates ersetzen den Code, aber nicht die produktiven Inhalte in `/app/data` ### Neu installieren 1. Paket oder Image bauen und nach Cloudron hochladen. 2. Die App einmal per Cloudron installieren. 3. Nach dem ersten Start Nouri öffnen. 4. Den ersten Haushalt-Zugang unter `/auth/setup` anlegen. 5. Danach Push, Erinnerungen und Einkaufstag in den Optionen einrichten. ### Bestehende Installation aktualisieren Wenn Nouri bereits installiert ist, bitte **kein neues `cloudron install`** ausführen. Stattdessen die bestehende App aktualisieren, zum Beispiel mit: ```bash cloudron update --no-backup --app --server --token ``` Dabei gilt: - produktive Daten unter `/app/data` bleiben erhalten - lokale Testdaten aus `./data` werden nicht mit hochgeladen - die bestehende Installation läuft mit demselben persistenten Datenordner weiter ### Wichtige Cloudron-Variablen Für eine saubere produktive Installation sind diese Werte sinnvoll: - `NOURI_DATA_DIR=/app/data` - `NOURI_SECURE_COOKIES=1` - `NOURI_TIMEZONE=Europe/Berlin` - `NOURI_SECRET_KEY=` - `NOURI_VAPID_PUBLIC_KEY=` - `NOURI_VAPID_PRIVATE_KEY=` - `NOURI_VAPID_SUBJECT=mailto:mail@hnz.io` ## Push einrichten ### 1. VAPID-Schlüssel erzeugen Die Schritte dafür stehen kompakt in [PUSH_SETUP.md](PUSH_SETUP.md). ### 2. VAPID-Werte in Cloudron setzen Zum Beispiel so: ```bash cloudron env set --app \ NOURI_VAPID_PUBLIC_KEY='...' \ NOURI_VAPID_PRIVATE_KEY='...' \ NOURI_VAPID_SUBJECT='mailto:mail@hnz.io' ``` Danach die App neu starten: ```bash cloudron restart --app ``` ### 3. Push auf dem Gerät aktivieren 1. Nouri im Browser oder auf dem iPhone öffnen. 2. In `Optionen` auf **Push erlauben** tippen. 3. Optional eine Test-Mitteilung senden. 4. Auf dem iPhone Nouri am besten zusätzlich zum Home-Bildschirm hinzufügen. Wichtig: - Push funktioniert nur auf Geräten, die sich einmal aktiv registriert haben. - Ohne VAPID-Werte bleibt Push bewusst deaktiviert. - Die Browser- oder iPhone-Freigabe allein reicht nicht: Hinweise müssen zusätzlich in Nouri eingeschaltet sein. ## Lizenz Nouri ist in diesem Repository für private, nicht-kommerzielle Nutzung freigegeben. Details stehen in [LICENSE.md](LICENSE.md).