148 lines
5.1 KiB
Markdown
148 lines
5.1 KiB
Markdown
# 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 <deine-app> --server <dein-server> --token <dein-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=<eigenes-secret>`
|
|
- `NOURI_VAPID_PUBLIC_KEY=<public-key>`
|
|
- `NOURI_VAPID_PRIVATE_KEY=<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 <deine-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 <deine-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).
|