Files
Vorrania/docs/ROADMAP.md
Scarriffle ea67e6c1b0 Umbenennung Pantry -> Project-Good; README mit echter Clone-URL
- Anzeigename, Paketname, Token-Key, DB-/Volume-Namen auf project_good
- README Clone-Abschnitt mit git.scarriffle.com/Scarriffle/project-good

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 09:24:54 +02:00

1.8 KiB
Raw Blame History

Project-Good Roadmap

Selfhostbare Lebensmittel-Lagerverwaltung. Aufbau in mehreren Schritten.

Schritt 1 Fundament (dieser Stand)

  • Backend (FastAPI + PostgreSQL): Datenmodell, Auth mit Rollen, FEFO-Auslagern, Einheiten-Umrechnung, Open-Food-Facts-Lookup mit lokalem Fallback.
  • Web-UI (React/Vite): Login, Dashboard, Ein-/Auslagern, Produkte, Lagerorte, Benutzerverwaltung, Einkaufsliste rollenabhängig.
  • Deployment: Docker Compose + install.sh, erster Admin beim Setup.
  • Tests: pytest für FEFO-Abbuchung und Einheiten-Umrechnung.

Schritt 2 Native iOS-App (SwiftUI)

  • Login (Server-URL + Passwort, Token im Keychain).
  • Barcode-Scan (VisionKit / AVFoundation).
  • Einlagern-Flow: scannen → Lookup/Vorbefüllung → Menge + Einheit + MHD → speichern.
  • Auslagern-Flow: scannen → Menge/Einheit (ganz oder Teilmenge g/l) → FEFO.
  • Einkaufsliste- und „bald ablaufend“-Ansicht.
  • Optional: unbekannte Produkte direkt in der App anlegen.

Schritt 3 Fortgeschrittene Features

  • Gruppen-Intelligenz: Produkt beim Einlagern automatisch einer Gruppe zuordnen (Ableitung aus OFF-Kategorie), manuell korrigierbar.
  • Mindestbestände auf Gruppen (z. B. „Nudeln“ gesamt), nicht nur einzelne Produkte. (DB-Spalte groups.min_stock ist bereits vorbereitet.)
  • Unterlagerorte (Regal xy / Fach xy). (DB-Spalte locations.parent_id vorbereitet.)
  • Einheiten-Umwandlung nachträglich (Packung ↔ g/l) komfortabel in Web + App.
  • Ablauf-Push-Benachrichtigungen via APNs.
  • Produktbilder aus OFF anzeigen (Web + App) + lokaler Bild-Cache.
  • Einkaufsliste verfeinern: Mengenvorschläge, manuelle Ergänzungen, Abhaken/Erledigen.
  • Bewegungsverlauf/Statistik (wer/was wann ein-/ausgelagert) Tabelle movements wird bereits befüllt, es fehlt nur die Ansicht.