Die App
openplate erfasst Mahlzeiten und schätzt auf Wunsch die Makronährstoffe auf einem Teller anhand eines Fotos. Suche nach einem Lebensmittel oder scanne einen Teller, und der Eintrag landet in deinem Tagebuch für den Tag. Bei einer eigenen Installation gibt es keinen Registrierungsbildschirm: Öffne die App und leg los. Auf der gehosteten Instanz meldest du dich zuerst an.
Das Tagebuch zeigt jeweils einen Tag: die eingetragenen Mahlzeiten, was sie vom Tageslimit verbrauchen und was davon übrig ist.
Diese Ansichten zeigen Beispieldaten, kein echtes Tagebuch.

Kein zwischengeschalteter App-Store
openplate ist eine Web-App (eine PWA), die du direkt aus dem Browser installierst, auf dem Smartphone oder dem Computer. Es gibt keinen App-Store. Niemand benötigt ein Apple- oder Google-Konto, und kein Prüfprozess oder Gebührenmodell steht zwischen einem Release und deinem Gerät. Eine Institution, die openplate hostet, stellt die App unter ihrer eigenen Domain bereit, und ein Update erreicht jedes Gerät beim nächsten Öffnen der App.
Erinnerungen sind optional. Wenn du sie aktivierst, werden sie über den Push-Dienst deines Browserherstellers zugestellt, wie bei jedem Web-Push.
Was auf dem Gerät gespeichert wird
Alles, was einem Nutzer gehört (Ernährungsprotokolle, Gewichte, eigene Lebensmittel, Ziele, die KI-Einstellungen), wird im IndexedDB des Browsers auf dem Gerät gespeichert, auf dem es eingegeben wurde (app/lib/local-store/). Es liegt dort im Klartext, weil es dein Gerät ist, und verlässt es nie, außer in zwei von dir gewählten Formen: als JSON-Export, den du herunterlädst, oder als verschlüsselter Sync-Blob.
Der App-Server ist ein einzelner zustandsloser Container. Keine Datenbank, kein ORM, keine Migrationen und kein Secret, das er zum Starten benötigt. Er kann genau ein optionales Secret enthalten, den Schlüssel des Betreibers für die Lebensmitteldatenbank, wie unten beschrieben. Das Löschen des Containers führt zu keinem Datenverlust. Das ist keine Sparsamkeit, es ist das gesamte Versprechen: siehe ADR-0006.
Was das Gerät verlässt
Ein Tellerfoto wird im Browser eingelesen und direkt an den OpenAI-kompatiblen Endpunkt geschickt, den du konfiguriert hast. Der openplate-Server ist an dieser Anfrage nie beteiligt. Es wird hier nicht hochgeladen, nicht auf die Festplatte geschrieben, nicht protokolliert. Nur die berechneten Zahlen werden gespeichert, im lokalen Speicher des Geräts; das Foto verbleibt auf dem Gerät, das es aufgenommen hat, ausgeschlossen von JSON-Exporten wie auch von Sync-Nutzdaten.
Dieser Endpunkt ist entweder ein Cloud-Anbieter, den du bezahlst (der BYOK-Pfad), oder dein eigener openplate-inference-Container. Im selbstgehosteten Fall benennt das Modell die Lebensmittel auf dem Teller und schätzt die Grammzahl, und dann werden Makronährstoffe nachgeschlagen, nicht erfunden: Kohlenhydrate, Protein, Fett und kcal werden anhand des Namens über die konfigurierte Lebensmittelquelle aufgelöst, standardmäßig ein mitgelieferter Auszug aus USDA FoodData Central (8.041 generische Lebensmittel im Image enthalten, kein Netzwerkaufruf, gemeinfrei). Das Sprachmodell erfindet niemals Makronährstoffwerte.
Da der Browser diesen Aufruf ausführt, muss der Endpunkt eine Adresse sein, die ein Browser erreichen kann. Ein Compose-Hostname wie http://inference:8300/v1 funktioniert nicht, auch wenn sich die beiden Container darüber erreichen können. Verwende die LAN-Adresse des Hosts, einen Tailnet-Namen oder einen Hostnamen auf deinem Reverse-Proxy.
Doku: Architektur, Self-Hosting