Zum Inhalt springen
Alles Automatisch
Guide

Mealie Atelier ohne Home Assistant: die Küchen-App mit Docker

Docker Compose, Mealie-Token, Konten mit Rollen, Kiosk-Tablet, Push-Timer, HTTPS, Backups und Updates.

Fortgeschritten22 Min. LesezeitAktualisiert am

Mealie Atelier braucht kein Home Assistant. Dieselbe Küche, die als Dashboard-Karten in Home Assistant läuft, gibt es auch als eigenständige Web-App: Rezepte mit Fotos, Wochenplan, Einkaufsliste, Kochmodus mit Timern, Vorräte und Druckstudio. Ein kleiner Server auf deinem eigenen Rechner zeigt sie im Browser an, auf dem Handy installierst du sie wie eine App.

Die eigenständige Web-App von Mealie Atelier im Browser, dunkles Design mit Menü links und dem heutigen Gericht Pfannen-Eier mit Tomaten und Basilikum
Die Web-App ohne Home Assistant, hier am Rechner im Browser

Ich gehe in diesem Guide jeden Schritt einzeln durch, vom leeren Ordner bis zum Tablet an der Küchenwand. Was die einzelnen Bereiche können, steht im Überblick. Hast du Home Assistant, ist der Weg über die Bridge meist bequemer. Mealie selbst richtest du vorher mit dem Mealie-Guide ein.

Was die Web-App ist und für wen sie passt

Die Web-App liegt im Karten-Repository im Ordner web/. Sie ist ein kleiner Node-Server ohne zusätzliche npm-Pakete, der zwischen deinem Browser und deinem Mealie sitzt. Der Server bewahrt den Mealie-API-Token auf, verlangt eine Anmeldung und reicht nur die Befehle an Mealie weiter, die die Küche braucht. Der Browser spricht nie direkt mit Mealie und sieht den Token nie.

Sie passt zu dir, wenn

  • du Mealie nutzt, aber kein Home Assistant hast,
  • du eine eigene Küchen-App fürs Handy willst, die nicht in einem Smart-Home-Dashboard steckt,
  • ein Tablet in der Küche nur Rezepte und Wochenplan zeigen soll,
  • Familienmitglieder ein eigenes Konto mit eigenen Rechten bekommen sollen, ohne Zugang zu deinem Smart Home.
Web-App ohne Home AssistantKarten in Home Assistant
Was läuftEin Server per Docker Compose oder Node.js 22Die Bridge (Integration) und die Karten
AnmeldungGemeinsames Passwort oder Konten pro Person mit RollenDeine Home-Assistant-Konten
Wo der Mealie-Token liegtIn der Datei .env auf dem ServerIn Home Assistant
Benutzt wird esIm Browser oder als installierte AppIm Dashboard und in der Companion App
Timer im HintergrundWeb Push im BrowserBenachrichtigung über Home Assistant
Einkaufs-Sync nach Bring!neinja
InstallationEin paar Befehle im TerminalMarketplace oder HACS

Was fehlt: Der Einkaufs-Sync zu Bring! und anderen Listen gehört zur Bridge in Home Assistant. Die Web-App sendet keine Einkaufsdaten an Dritte. Ein Server bedient genau einen Mealie-Token und damit einen Haushalt. Beide Wege können gleichzeitig an demselben Mealie laufen.

Was du brauchst

  • Mealie 3, eingerichtet und mit ein paar Rezepten. Das Projekt testet mit Mealie 3.29.
  • Einen Rechner, der dauerhaft läuft, zum Beispiel ein Mini-PC, ein NAS oder der Server, auf dem schon Mealie läuft. Der Container ist auf 256 MB Arbeitsspeicher begrenzt.
  • Darauf Docker mit Compose oder Node.js 22 oder neuer.
  • Git, um den Code zu holen.
  • Eine Mealie-Adresse, die dieser Rechner erreicht, zum Beispiel http://192.168.1.20:9925.
  • Für Handy und Tablet: einen Reverse Proxy mit HTTPS oder ein privates Netz wie Tailscale. Installation als App und Push-Nachrichten gehen nur über HTTPS.

Die Schritte im Überblick

  1. Einen Mealie-API-Token anlegen
  2. Den Code holen
  3. Die Einstellungen in der .env anlegen
  4. Starten und anmelden
  5. Gemeinsames Passwort oder Konten pro Person
  6. HTTPS für Handy und Tablet
  7. Als App installieren
  8. Küchentimer als Push-Nachricht (optional)

Schritt 1: Einen Mealie-API-Token anlegen

Mit dem Token greift die Web-App in deinem Namen auf Mealie zu. Was das Mealie-Konto darf, darf später auch die Web-App. Leg für sie einen eigenen Token an, dann kannst du genau diesen später löschen.

  1. Melde dich in Mealie mit dem Konto an, dessen Rezepte, Wochenplan und Einkaufslisten die Küche zeigen soll.
  2. Klicke oben links auf deinen Namen und öffne API-Token (die Adresse endet auf /user/profile/api-tokens).
  3. Trage bei Token-Name zum Beispiel Atelier Web-App ein und klicke auf Erzeugen.
  4. Kopiere den Token sofort. Mealie zeigt ihn nur dieses eine Mal.
Mealie-Seite API-Token mit dem Feld Token-Name, dem Knopf Erzeugen und einem aktiven Token in der Liste
Die Seite API-Token in Mealie

Typischer Fehler: Der Token gehört zu dem Konto, mit dem du gerade angemeldet bist. Legst du ihn in einem anderen Haushalt an, siehst du später fremde oder gar keine Einkaufslisten.

Schritt 2: Den Code holen

Ein fertiges Docker-Image gibt es nicht, Docker baut es bei dir aus dem Code. Öffne auf dem Server ein Terminal und hol dir das Repository:

bash
git clone https://github.com/mealie-atelier/mealie-atelier-cards.git
cd mealie-atelier-cards/web

Alle weiteren Befehle laufen in diesem Ordner web.

Schritt 3: Die Einstellungen in der .env anlegen

Alle Einstellungen stehen in einer Datei namens .env. Kopiere die Vorlage und öffne die Kopie in einem Editor, zum Beispiel mit nano .env:

bash
cp .env.example .env

Drei Werte musst du anpassen:

bash
MEALIE_URL=http://192.168.1.20:9925
MEALIE_API_TOKEN=DEIN_MEALIE_TOKEN
ATELIER_PASSWORD=DEIN_LANGES_PASSWORT
  • MEALIE_URL ist die Adresse deines Mealie, mit http:// oder https:// und Port. Zugangsdaten oder etwas hinter einem ? dürfen nicht darin stehen.
  • MEALIE_API_TOKEN ist der Token aus Schritt 1.
  • ATELIER_PASSWORD ist das gemeinsame Passwort für die Web-App. Es braucht mindestens 12 Zeichen, sonst startet der Server nicht. Wer sich damit anmeldet, hat Admin-Rechte.

Dazu zwei Zeilen, die in der Vorlage schon stehen:

  • ATELIER_USERNAME=home ist der Benutzername zum gemeinsamen Passwort. Löschst du die Zeile, heißt er atelier.
  • ATELIER_READ_ONLY=true schaltet den Nur-Lesen-Modus ein. Der Server lehnt dann jede Änderung ab, du kannst also nur ansehen. Willst du abhaken, planen und Rezepte bearbeiten, setze ATELIER_READ_ONLY=false. Mehr dazu unter Kiosk-Tablet.

Typischer Fehler: MEALIE_URL=http://localhost:9925. Läuft die Web-App in Docker, ist localhost der Container selbst und nicht dein Server. Nimm die IP-Adresse oder den Hostnamen des Rechners, auf dem Mealie läuft.

Die .env enthält deinen Token. Sie gehört nie in Git, nie in ein Docker-Image und nie in einen Screenshot. Alle weiteren Einstellungen stehen in der Tabelle Alle Einstellungen.

Schritt 4: Starten und anmelden

Mit Docker:

bash
docker compose up -d --build

Der erste Start dauert etwa eine Minute, weil Docker das Image baut. Der Container startet nach einem Neustart des Servers von selbst wieder und prüft alle 30 Sekunden, ob er antwortet.

Danach ist die Web-App unter http://localhost:3008 erreichbar, allerdings nur auf dem Server selbst. Das ist Absicht: compose.yaml veröffentlicht den Port ausschließlich auf der Loopback-Adresse des Servers, also nicht im Netzwerk. Von deinem Laptop oder Handy aus erreichst du sie erst nach Schritt 6. Hat der Server keinen Bildschirm, prüfst du den Start direkt im Terminal:

bash
curl -I http://localhost:3008

Kommt HTTP/1.1 401 Unauthorized zurück, läuft die Web-App und wartet auf die Anmeldung. Den Port auf dem Server änderst du mit ATELIER_HOST_PORT in der .env. Eine Zeile PORT=... ändert bei Docker nichts, weil im Container immer Port 3000 gilt.

Ohne Docker, mit Node.js 22:

bash
npm start

Der Befehl liest die .env selbst und startet den Server auf Port 3000. Weitere Pakete musst du nicht installieren. Damit der Server einen Neustart des Rechners übersteht, brauchst du hier selbst einen Dienst, etwa systemd. Mit Docker ist das schon erledigt.

Die Anmeldung: Beim Öffnen erscheint keine gestaltete Login-Seite, sondern ein schlichtes Fenster deines Browsers mit Benutzername und Passwort. Es gehört zum Browser und sieht überall etwas anders aus. Trag die Werte aus deiner .env ein. Der Browser merkt sich die Anmeldung, bis du ihn ganz schließt.

Danach siehst du die Übersicht mit dem heutigen Gericht, links das Menü mit Heute, Kochinspo, Rezepte, Wochenplan, Vorräte, Einkaufsliste, Gemeinsam kochen, Kochbuch und Verwalten.

Typische Fehler:

  • Der Server startet nicht. Er nennt den Grund in seiner Ausgabe: bei Docker mit docker compose logs, bei Node direkt im Terminal. Die Meldungen erklärt die Fehlerbehebung.
  • Statt der Küche steht nur {"error":"Sign in to Mealie Atelier"} auf der Seite. Du hast das Anmeldefenster abgebrochen. Lade die Seite neu.
  • Nach mehreren falschen Passwörtern antwortet der Server mit Too many failed sign-ins. Try again later. Die Sperre dauert höchstens 60 Sekunden.

Schritt 5: Gemeinsames Passwort oder Konten pro Person

Ein gemeinsames Passwort ist der einfachste Weg: Alle melden sich mit demselben Namen an und dürfen alles. Soll jede Person ein eigenes Konto mit eigenen Rechten bekommen, nutzt du ATELIER_USERS mit drei Rollen:

RolleDarf
adminAlles: Rezepte anlegen, bearbeiten und importieren, Fotos hochladen, Nährwerte speichern, Zutaten bearbeiten
writerEinkaufslisten, Wochenplan und Küchendaten wie Vorräte ändern. Keine Rezepte bearbeiten, keine Familienmitglieder oder Helferaufgaben anlegen.
readerNur ansehen. Eigene Küchentimer und das Kochjournal gehen trotzdem.

Passwörter stehen dabei nie im Klartext in der .env, sondern nur als Hash. Den erzeugst du für jede Person im Ordner web. Hast du Node.js 22 auf dem Rechner:

bash
npm run hash-password

Läuft bei dir nur Docker, geht es auch mit einem kurzlebigen Node-Container. Das Docker-Image der Web-App enthält das Skript nicht:

bash
docker run --rm -it -v "$PWD":/app:ro -w /app node:22-alpine node scripts/hash-password.mjs

Der Befehl fragt nach Password:. Was du tippst, erscheint nicht auf dem Bildschirm und landet nicht im Verlauf deiner Shell. Auch hier gilt: mindestens 12 Zeichen, sonst kommt Use a password with at least 12 characters. Als Antwort kommt eine lange Zeile, die mit scrypt$ beginnt. Das ist der Hash.

Die Einträge schreibst du als Name:Rolle:Hash in die .env, getrennt durch Semikolon. Setze den ganzen Wert in einfache Anführungszeichen, weil der Hash $-Zeichen enthält, die Docker Compose sonst als Variablen liest:

bash
ATELIER_USERS='anna:admin:scrypt$16384$8$1$SALT$KEY;ben:writer:scrypt$16384$8$1$SALT$KEY;kueche:reader:scrypt$16384$8$1$SALT$KEY'

Danach startest du den Server neu, bei Docker mit docker compose up -d.

Was dabei gilt:

  • Benutzernamen bestehen aus Kleinbuchstaben, Ziffern, Punkt, Unterstrich und Bindestrich, höchstens 40 Zeichen.
  • Sobald ATELIER_USERS gesetzt ist, kannst du ATELIER_PASSWORD weglassen. Behältst du es, meldet es sich weiter als Admin unter ATELIER_USERNAME an. Derselbe Name darf dann nicht auch in ATELIER_USERS stehen, sonst startet der Server nicht.
  • Ein fehlerhafter Eintrag verhindert den Start. Die Meldung nennt die Position des Eintrags, nie den Hash.
  • Der Nur-Lesen-Modus schlägt jede Rolle.
  • Die Oberfläche blendet Knöpfe aus, die eine Rolle nicht nutzen darf. Der Server prüft trotzdem jede Änderung selbst.
  • Vorräte, Kochjournal, Familie und Kochsessions teilt sich der ganze Haushalt. Die Konten regeln, wer schreiben darf. Sie trennen keine persönlichen Daten.

Schritt 6: HTTPS für Handy und Tablet

Mit Docker hört die Web-App nur auf der Loopback-Adresse des Servers (localhost). Von anderen Geräten aus erreichst du sie also nicht, auch nicht über die IP-Adresse des Servers. Stell den Container nicht direkt ins Internet: Die Anmeldung über das Browserfenster ist über http:// in fremden Netzen unsicher. Es gibt drei Wege, such dir einen aus.

Weg 1: Reverse Proxy auf demselben Server (empfohlen). Der Proxy nimmt Anfragen mit HTTPS an und reicht sie an localhost:3008 weiter. Mit Caddy genügt diese Caddyfile:

caddy
kueche.example.de {
    reverse_proxy localhost:3008
}

Ersetze kueche.example.de durch einen Namen, der auf deinen Server zeigt. Caddy holt das Zertifikat selbst. Dafür muss der Name öffentlich auflösbar sein und Caddy braucht die Ports 80 und 443. Nginx Proxy Manager oder Traefik gehen genauso, wichtig ist nur das Ziel localhost:3008. Läuft der Proxy selbst in Docker, zeigt localhost auf seinen eigenen Container. Dann nimm Weg 2 oder Weg 3.

Weg 2: Im Heimnetz direkt per Port. Ändere in compose.yaml die Zeile unter ports:, die den Port nur auf der Loopback-Adresse veröffentlicht, so:

yaml
services:
  mealie-atelier:
    ports:
      - "3008:3000"

Nach docker compose up -d ist die Web-App unter http://IP-DES-SERVERS:3008 erreichbar. Der Preis: Die Anmeldung läuft unverschlüsselt durchs Netz, jeder im selben WLAN kann mitlesen. Installation als App und Push-Nachrichten gehen ohne HTTPS nicht. Gib den Port nie im Router frei. Weil sich eine Datei aus dem Repository ändert, kann ein späteres git pull Konflikte melden. Ohne Docker hört npm start schon auf allen Adressen (HOST=0.0.0.0) auf Port 3000. Willst du das nicht, setze HOST=localhost.

Weg 3: Ein privates Netz wie Tailscale. Tailscale Serve auf dem Server leitet Anfragen aus deinem Tailnet an den lokalen Port weiter und bringt HTTPS mit:

bash
tailscale serve --bg 3008

Der Befehl nennt dir die Adresse, die du auf deinen Geräten im Tailnet öffnest. HTTPS-Zertifikate müssen dafür in deinem Tailnet aktiviert sein. Für alle anderen bleibt die Seite unerreichbar.

Wichtig bei einem Proxy: die Sperre nach falschen Passwörtern. Hinter einem Reverse Proxy kommen alle Anfragen von der Adresse des Proxys. Die Sperre würde dann alle Nutzer wie einen einzigen behandeln, ein Fremder könnte mit falschen Versuchen alle aussperren. Trag deshalb die Adresse ein, von der der Proxy bei der Web-App ankommt:

bash
ATELIER_TRUSTED_PROXIES=172.18.0.0/16,::1

Das ist das Beispiel aus dem Projekt. Bei Docker kommt ein Proxy auf dem Server meist über das Gateway des Netzes an, das Compose für die Web-App anlegt. Den Bereich zeigt docker network inspect web_default im Feld Subnet. Nur von diesen Adressen glaubt der Server die mitgeschickte Client-Adresse (X-Forwarded-For). Fehlt die Einstellung, warnt der Server einmal in seiner Ausgabe, sobald ein Proxy aus dem Heimnetz diesen Header schickt.

Schritt 7: Als App installieren

Auf Handy und Tablet fühlt sich die Web-App wie eine echte App an, wenn du sie installierst: eigenes Symbol auf dem Home-Bildschirm, eigenes Fenster ohne Adressleiste. Ganz unten auf der Seite steht dafür App installieren. Der Knopf öffnet Dein Küchenstudio. Immer griffbereit. mit den Schritten für dein Gerät.

Fenster Dein Küchenstudio. Immer griffbereit. auf dem Handy mit zwei Schritten zur Installation über das Browser-Menü und dem Knopf Später
Die Anleitung zur Installation, hier für einen Android-Browser ohne eigenes Installationsfenster
Die Web-App auf dem Handy im dunklen Design mit der Statusleiste Synchronisierung und Küchentimer und den Reitern Übersicht, Heute, Kochinspo und Rezepte
So sieht die Küche danach auf dem Handy aus

Auf Android und mit Chrome oder Edge am Rechner gilt: Steht im Fenster Jetzt installieren, tippst du darauf. Der Browser zeigt dann sein eigenes Bestätigungsfenster mit Symbol und Namen der App. Fehlt der Knopf, wählst du im Browser-Menü App installieren oder Zum Startbildschirm hinzufügen. Am Rechner steht das Symbol dafür oft rechts in der Adressleiste.

Auf iPhone und iPad öffnest du die Seite in Safari. Andere Browser bieten die Installation dort meist nicht an. Tippe auf Teilen, wähle Zum Home-Bildschirm (falls nötig unter Mehr), lass Als Web-App öffnen an und tippe auf Hinzufügen.

Auf dem Home-Bildschirm heißt die App Atelier. Ist sie installiert, verschwindet der Knopf App installieren in der App. Die Installation ändert nichts an deinem Mealie-Konto. Private Rezeptdaten und Fotos legt die App dabei nicht im Offline-Speicher des Geräts ab.

Typischer Fehler: Der Browser bietet keine Installation an. Die Seite läuft dann über http:// mit einer IP-Adresse. Installieren lässt sie sich nur über eine vertrauenswürdige https://-Adresse, zum Ausprobieren auch über localhost.

Schritt 8: Küchentimer als Push-Nachricht

Im Kochmodus stellst du Küchentimer. Solange die Seite offen ist, meldet sich der Timer dort. Damit er sich auch meldet, wenn die App längst zu ist, brauchst du Web Push. Das ist optional.

1. Schlüssel erzeugen. Im Ordner web mit Node.js 22:

bash
npm run vapid

Läuft nur Docker und der Container schon, geht es auch dort, denn dieses Skript steckt im Image:

bash
docker compose exec mealie-atelier node scripts-generate-vapid.mjs

Der Befehl gibt drei Zeilen mit Schlüsseln aus: ATELIER_VAPID_PUBLIC_KEY=..., ATELIER_VAPID_PRIVATE_KEY=... sowie ATELIER_VAPID_SUBJECT=mailto:you@example.com. Darunter steht ein Hinweis zum Aufbewahren.

2. In die .env kopieren. Übernimm die drei Schlüsselzeilen. Ersetze in ATELIER_VAPID_SUBJECT die Beispieladresse durch eine eigene mailto:-Adresse oder eine https://-Adresse. Die drei gehören zusammen, einzeln funktioniert keiner. Den privaten Schlüssel hältst du geheim, änderst ihn nicht mehr und sicherst ihn mit der .env. Ein neuer Schlüssel macht alle bisherigen Freigaben ungültig.

3. Neu starten: docker compose up -d oder npm start.

4. Im Browser erlauben. Öffne oben die Statusleiste Synchronisierung & Küchentimer. Unter Hintergrund-Timer steht jetzt Web Push konfiguriert (Berechtigung erforderlich). Tippe auf Push erlauben und bestätige die Frage des Browsers. Danach steht auf dem Knopf Push eingerichtet. Das machst du auf jedem Gerät, das Nachrichten bekommen soll.

Aufgeklappte Statusleiste Synchronisierung und Küchentimer mit den Bereichen Offline-Einkauf und Hintergrund-Timer, dort der Hinweis Kein Alarmkanal konfiguriert
Die Statusleiste vor der Einrichtung: Kein Alarmkanal konfiguriert

Was du wissen solltest:

  • Web Push braucht HTTPS. Über http:// mit einer IP-Adresse fragt der Browser gar nicht erst.
  • Auf iPhone und iPad bekommt nur die installierte App aus Schritt 7 Push-Nachrichten, nicht der Safari-Tab.
  • ATELIER_ALARM_CHANNEL bleibt auf dem Standard both. Das schickt über Web Push und zusätzlich über Home Assistant, falls du eins eingetragen hast. Setze nie ha, wenn du kein Home Assistant verbunden hast, sonst kommt keine Nachricht an.
  • Die Zustellung läuft über den Push-Dienst des Browser-Herstellers. Dass sie ankommt, ist nicht garantiert.

In derselben Statusleiste schaltest du mit Offline aktivieren den Offline-Einkauf ein: Abgehakte Artikel warten dann auf dem Gerät, bis die Verbindung wieder steht. Die Einkaufslisten liegen dafür auf dem Gerät, aktiviere es nicht auf fremden oder öffentlichen Geräten.

Die Küche im Alltag

Die Web-App zeigt dieselben Bereiche wie die Komplette-Küche-Karte in Home Assistant. Ein paar Beispiele mit den erfundenen Testrezepten:

Wochenplan Die Woche im Blick mit sieben Tagesspalten von Montag bis Sonntag und eingeplanten Abendessen von Donnerstag bis Sonntag
Der Wochenplan: Mit dem Plus unter einem Tag planst du ein Rezept ein, Drucken macht ein A4-Blatt daraus
Rezept Gnocchi alla Sorrentina mit Titelfoto und den Knöpfen Kochen starten, Nährwerte, Meine Kochnotizen, Drucken / PDF, Einplanen, Zutaten einkaufen und Bearbeiten
Ein Rezept mit allen Werkzeugen, vom Kochmodus bis zum Editor
Kochmodus mit Schritt 1 von 3, dem Haken Bildschirm beim Kochen anlassen, einem Küchentimer mit 5, 10 und 15 Minuten und den Knöpfen Zurück und Weiter
Der Kochmodus: ein Schritt pro Bildschirm, mit Küchentimer
Einkaufsliste Wocheneinkauf mit fünf offenen und einem abgehakten Artikel, den Knöpfen Einkaufs-Sync, Neue Liste und Erledigte entfernen und dem Knopf App installieren unter dem Fenster
Die Einkaufsliste. Abhaken landet direkt in Mealie.

Der Knopf Einkaufs-Sync ist auch in der Web-App da. Er erklärt aber nur, dass der Live-Sync zu Bring! Home Assistant mit der Bridge braucht.

Fenster Einkaufs-Sync in der Web-App mit dem Hinweis, dass der Live-Sync zu Bring und anderen Listen Home Assistant mit der Mealie Atelier Bridge braucht
Der Einkaufs-Sync in der Web-App: nur ein Hinweis auf die Bridge

Aussehen und Sprache stellst du über das Zahnrad oben rechts im Design Studio ein: Erscheinungsbild (Dunkel oder Hell), Akzentfarbe, Abstände, Spalten, Sprache, Bewegung & Übergänge, Bildformat, Ecken und Rezeptbilder anzeigen. Das gilt nur für das Gerät, auf dem du es einstellst. So kann das Wandtablet hell sein, während dein Handy dunkel bleibt.

Design Studio mit den Bereichen Erscheinungsbild (Automatisch, Dunkel oder Hell), Akzentfarbe mit fünf Farben, Abstände Kompakt oder Komfortabel, Spalten, Sprache und Bewegung & Übergänge
Das Design Studio: Einstellungen pro Gerät

Ein Tablet nur zum Anschauen (Kiosk)

Ein Tablet an der Küchenwand soll Rezepte und den Wochenplan zeigen, aber niemand soll aus Versehen etwas löschen. Dafür gibt es zwei Wege. Der Unterschied ist wichtig:

  • ATELIER_READ_ONLY=true gilt für den ganzen Server. Dann darf niemand mehr etwas ändern, auch du am Handy nicht. Auch Küchentimer und Kochjournal sind gesperrt. Das passt, wenn die Web-App ausschließlich als Anzeige läuft und du in Mealie selbst planst.
  • Ein eigenes Konto mit der Rolle reader gilt nur für dieses Gerät. Lege zum Beispiel ein Konto kueche als reader an (Schritt 5) und melde das Tablet damit an. Alle anderen behalten ihre Rechte. Küchentimer und Kochjournal gehen auf dem Tablet trotzdem.

Für die meisten Haushalte ist das reader-Konto der bessere Weg. Danach:

  1. Öffne die Web-App auf dem Tablet und installiere sie wie in Schritt 7. Als App läuft sie ohne Adressleiste im Vollbild.
  2. Stell im Design Studio die Darstellung ein, die man aus zwei Metern lesen kann, etwa Hell und Komfortabel.
  3. Im Kochmodus bleibt der Bildschirm an, solange Bildschirm beim Kochen anlassen angehakt ist. Für die Zeit dazwischen regelst du das in den Einstellungen des Tablets.
  4. Damit niemand die App verlässt, nutzt du die Bildschirmfixierung des Tablets: unter Android „App anpinnen“, auf dem iPad „Geführter Zugriff“.

Optionale Funktionen

Alles hier ist zunächst aus. Nach jeder Änderung an der .env startest du den Server neu.

Rezept-Editor mit strukturierten Zutaten: ATELIER_STRUCTURED_EDITS=true. Admins bearbeiten dann Zutaten mit Menge, Einheit und verknüpftem Lebensmittel. Nur mit Mealie 3 und nur nach einem Mealie-Backup. Vor jeder Änderung legt die Web-App eine eigene Sicherung unter recipe-backups/ im Datenordner an (die letzten 10 pro Rezept, bei Titelfotos die letzten 3). Im Versionsverlauf des Editors holst du jede zurück. Fotos lädst du als JPEG, PNG oder WebP mit höchstens 10 MiB hoch.

Nährwertlabor: USDA_FDC_API_KEY schaltet die Nährwertsuche in FoodData Central frei. Den kostenlosen Key bekommst du auf fdc.nal.usda.gov/api-key-signup, wie im Einrichtungs-Guide beschrieben.

KI-Hilfen: Mit einem eigenen API-Key von OpenAI (OPENAI_API_KEY) oder Anthropic (ANTHROPIC_API_KEY) kommen englische Suchbegriffe fürs Nährwertlabor, Ersatzvorschläge für eine Zutat und eine Rezeptprüfung dazu. Setzt du beide Keys, wählt ATELIER_AI_PROVIDER mit openai oder anthropic den Anbieter, sonst startet der Server nicht. Daten gehen erst nach deinem Klick an den gewählten Anbieter. Die Nährwerte selbst kommen nie von der KI. Alle Keys bleiben auf dem Server.

Timer über Home Assistant: Hast du doch ein Home Assistant, kann die Web-App Timer-Nachrichten auch darüber schicken. Dafür setzt du ATELIER_HA_URL, ATELIER_HA_TOKEN (ein langlebiges Zugriffstoken) und ATELIER_HA_NOTIFY_SERVICE, etwa notify.mobile_app_annas_handy. Nur alle drei zusammen.

Drucken: Rezepte, Einkaufslisten und der Wochenplan öffnen dasselbe Druckstudio wie in Home Assistant. Gedruckt oder als PDF gespeichert wird im Browser. Der Mealie-Token steckt nie im Druckdokument.

Alle Einstellungen der Web-App

Alle Werte stehen in der .env. Nach einer Änderung startest du den Server neu.

VariableStandardPflichtWofür
MEALIE_URLkeinerjaAdresse deines Mealie, http:// oder https://, ohne Zugangsdaten
MEALIE_API_TOKENkeinerjaDein Mealie-API-Token
ATELIER_PASSWORDkeinerja, wenn ATELIER_USERS fehltGemeinsames Passwort mit Admin-Rechten, mindestens 12 Zeichen
ATELIER_USERNAMEatelierneinBenutzername zum gemeinsamen Passwort. Die Vorlage setzt home.
ATELIER_USERSleerja, wenn ATELIER_PASSWORD fehltKonten pro Person als Name:Rolle:Hash, getrennt durch Semikolon
ATELIER_READ_ONLYfalseneintrue, 1 oder yes sperrt jede Änderung auf dem Server. Die Vorlage setzt true.
PORT3000neinPort bei npm start. Bei Docker immer 3000.
ATELIER_HOST_PORT3008neinPort auf dem Server bei Docker, nur auf dem Server selbst erreichbar (Loopback)
HOST0.0.0.0neinAdresse, auf der der Server bei npm start hört
ATELIER_TRUSTED_PROXIESleerneinIP-Adressen und Bereiche deines Reverse Proxys, durch Komma getrennt
ATELIER_DATA_DIR./dataneinOrdner für die Küchendaten. Docker nutzt immer /app/data.
ATELIER_STRUCTURED_EDITSfalseneintrue schaltet den Editor mit strukturierten Zutaten ein
USDA_FDC_API_KEYleerneinNährwertsuche im Nährwertlabor
OPENAI_API_KEYleerneinDie drei KI-Hilfen mit OpenAI
ANTHROPIC_API_KEYleerneinDieselben KI-Hilfen mit Anthropic (Claude)
ATELIER_AI_PROVIDERleerja, wenn beide KI-Keys gesetzt sindopenai oder anthropic
ATELIER_ALARM_CHANNELbothneinWeg für Timer-Nachrichten: both, push oder ha
ATELIER_VAPID_PUBLIC_KEY, ATELIER_VAPID_PRIVATE_KEY, ATELIER_VAPID_SUBJECTleerneinSchlüssel für Web Push, nur alle drei zusammen
ATELIER_HA_URL, ATELIER_HA_TOKEN, ATELIER_HA_NOTIFY_SERVICEleerneinTimer-Nachrichten über Home Assistant, nur alle drei zusammen
ATELIER_EXPERIMENTAL_INGREDIENTSfalseneinVeraltet und ohne Wirkung. Nimm ATELIER_STRUCTURED_EDITS.

Daten und Backups

Rezepte, Wochenplan und Einkaufslisten liegen in Mealie. Die Web-App speichert nur, was Mealie nicht kennt, im Datenordner ATELIER_DATA_DIR:

  • studio.json: Vorräte, Kochjournal, Familie und Kochsessions
  • alarms.json: laufende Küchentimer und die Push-Freigaben der Geräte
  • offline-ledger.json: das Protokoll der Offline-Einkäufe, damit nichts doppelt ankommt
  • recipe-backups/, ingredient-backups/, photo-backups/: Sicherungen vor Rezeptänderungen

Bei Docker liegt der Ordner in einem Volume, das ein Neuanlegen des Containers übersteht. Compose stellt den Namen des Projektordners davor, aus atelier_data wird also meist web_atelier_data. Den genauen Namen zeigt docker volume ls. So packst du das Volume in ein Archiv im aktuellen Ordner:

bash
docker run --rm -v web_atelier_data:/data:ro -v "$PWD":/backup alpine tar czf /backup/atelier-data.tar.gz -C /data .

Sichere zusätzlich die .env, denn darin stehen Token, Passwort-Hashes und der private Push-Schlüssel. Bewahre beides getrennt vom Server auf, so wie dein Mealie-Backup. Die Sicherungen der Web-App ersetzen kein Mealie-Backup.

Updates

Neue Versionen holst du im Ordner web mit Git:

bash
git pull
docker compose up -d --build

Ohne Docker beendest du den Server und startest ihn nach git pull mit npm start neu. Die Küchendaten im Datenordner bleiben erhalten. Die App auf Handy und Tablet lädt die neue Version beim nächsten Öffnen von selbst, weil der Cache an die Versionsnummer gebunden ist. Hast du für Weg 2 die compose.yaml geändert und git pull meldet einen Konflikt, sicherst du deine Änderung mit git stash, holst das Update und spielst sie mit git stash pop wieder ein.

Wenn etwas nicht klappt

Schau zuerst in die Ausgabe des Servers: docker compose logs mealie-atelier oder das Terminal mit npm start. Der Server prüft beim Start seine Einstellungen und bricht mit einer klaren Meldung ab.

Was du siehstWoran es liegt
Configure MEALIE_URL, MEALIE_API_TOKEN and ATELIER_PASSWORD or ATELIER_USERS before starting.Ein Pflichtwert fehlt oder es gibt nur die Vorlage .env.example, keine .env
ATELIER_PASSWORD must be at least 12 characters long.Das Passwort ist zu kurz
MEALIE_URL must be an http(s) server URL without credentials or query.http:// oder https:// fehlt, oder die Adresse enthält Zugangsdaten oder Parameter
ATELIER_USERS repeats the ATELIER_USERNAME of the shared password. Rename one of them.Derselbe Name steht in ATELIER_USERNAME und in ATELIER_USERS
Rezepte laden nicht, in der Ausgabe steht Request failed:MEALIE_URL ist vom Server aus nicht erreichbar (oft localhost in Docker) oder der Token wurde in Mealie gelöscht
Nichts lässt sich ändernATELIER_READ_ONLY=true aus der Vorlage oder ein Konto mit der Rolle reader
Kein Installieren, kein Push erlaubenDie Seite läuft nicht über HTTPS
Andere Geräte erreichen die Seite nichtDocker veröffentlicht den Port nur auf dem Server selbst, siehe Schritt 6

Alle Fälle mit Erklärung stehen in der Fehlerbehebung unter Web-App ohne Home Assistant. Fragen und Erfahrungen sind in den GitHub Discussions willkommen. Poste dort nie deine .env, Tokens oder Passwort-Hashes.

Weiterführende Inhalte

Läuft deine Küche auf einem Tablet an der Wand oder vor allem auf dem Handy?

Community

Unterstütze den Kanal

Hat dir der Beitrag geholfen? Es gibt zwei Wege, etwas zurückzugeben.