Nathan Klieme · iPhone-App mit eigenem Backend
Health Eat
Eine Koch-App, die den Wochenplan gleich mit dem Einkauf zusammendenkt. Rezepte, die zum Ernährungsprofil passen, ein Kochmodus für den Herd, und ein Haushalt, in dem mehrere Leute dieselbe Planung teilen.
in der App
eigenen Backend
Oberfläche
Worum es geht
Das Lästige am gesunden Kochen ist nicht das Kochen. Es ist die Planung davor. Was passt zu meinem Profil, was lässt sich vorbereiten, und was muss ich davon eigentlich einkaufen? Health Eat hängt diese Schritte aneinander: Rezept aussuchen, Woche planen, und der Einkauf ergibt sich von selbst.
Es ist dabei nicht nur eine App auf dem Telefon. Dazu gehört ein eigener Dienst mit Datenbank, den ich geschrieben habe und selbst betreibe. Für Konten, geteilte Haushalte, eigene Rezepte mit Fotos und den Abgleich zwischen Geräten.
- RezepteDurchsuchbar nach Zutaten, Zeit und Kategorie. Die Mengen rechnen sich auf die Portionszahl um.
- WochenplanStellt eine Woche zusammen und achtet darauf, dass sich Zutaten überschneiden. Ein Einkauf statt sieben.
- KochmodusSchritt für Schritt durchs Gericht. Der Bildschirm bleibt an, jeder Schritt sagt, wie lange er dauert.
- ErnährungsprofilVorlieben und Unverträglichkeiten steuern, was überhaupt vorgeschlagen wird.
- HaushaltMehrere Personen teilen dieselbe Planung. Änderungen gleichen sich über den Server ab.
- Eigene RezepteSelbst erfasste Gerichte mit Foto, gespeichert im eigenen Konto.
Ein Rundgang
Aufnahmen aus der laufenden AppVom Telefon bis zur Datenbank
Alles selbst gebaut und selbst betriebenDas ist der Teil, auf den ich am meisten stolz bin. Die App hängt nicht an einem fertigen Dienst, sondern an einem, den ich selbst geschrieben habe. Er läuft in Containern auf meinem Server, hinter einem Reverse Proxy, der sich um die Verschlüsselung kümmert. Zertifikate holt er sich allein.
App
- Expo 54 · iOS
- React Native 0.81
- Expo Router · Navigation
- Zustand · 8 Speicher
Backend
- Fastify 5 · Node
- PostgreSQL 16
- JWT · Anmeldung
- bcrypt · Passwörter
Betrieb
- Docker Compose
- Caddy · TLS von selbst
- Eigener VPS
- Rate-Limit · Missbrauch
Wie es gebaut ist
Acht getrennte Speicher
Anmeldung, Profil, Favoriten, Kochverlauf, Planer, Haushalt, Bewertungen und geteilte Rezepte liegen jeweils für sich. Ein einziger großer Zustand wäre nach kurzer Zeit unübersichtlich geworden.
Farben als System
Ein eigener Satz Farbwerte und Akzente, abgefragt über einen gemeinsamen Zugriff. Im Oberflächencode steht kein einzelner Farbwert.
Lokal und geteilt
Rezepte, Planung und Kochmodus laufen ohne Konto auf dem Gerät. Wer sich anmeldet, bekommt Abgleich, Haushalt und eigene Rezepte dazu.
Einmal laden, dann behalten
Rezeptfotos vom Server landen auf dem Gerät und werden nur neu geholt, wenn sich das Rezept geändert hat. Klappt das nicht, greift die App direkt auf die Server-Adresse zurück.
-
Geprüft wird die Logik, nicht das Aussehen 43 Testdateien decken Planung, Mengenumrechnung, Profil und Anmeldung ab.
-
Rezeptdaten werden erzeugt, nicht getippt Die eingebauten Rezepte entstehen über ein Skript aus der Design-Vorlage. Mengen, Schritte und Nährwerte bleiben so an einer Stelle gepflegt.
-
Gefundene Fehler bleiben im Code erklärt An den heiklen Stellen steht der Grund daneben. Zum Beispiel, warum ein Bild fest an seinen Schlüssel gebunden ist: sonst blitzt in einer Liste kurz das Foto des vorherigen Rezepts auf, wenn die Komponente wiederverwendet wird.
-
Der Server läuft neben anderen Diensten Auf derselben Maschine liegen weitere Projekte von mir. Jeder Dienst hat seinen Container, der Reverse Proxy verteilt nach Adresse.
Auf einen Blick
| Frage | Antwort |
|---|---|
| Plattform | iPhone, gebaut mit Expo; ein gemeinsamer Quellcode für App und Weboberfläche |
| Sprache | TypeScript in der App, JavaScript im Dienst |
| Anmeldung | Token im verschlüsselten Schlüsselspeicher des Geräts, Passwörter serverseitig gehasht |
| Datenhaltung | PostgreSQL auf dem eigenen Server, dazu lokale Daten auf dem Gerät |
| Bilder | Upload über den Dienst, auf dem Gerät zwischengespeichert |
| Betrieb | Docker Compose hinter Caddy, Zertifikate erneuern sich selbst |
| Ohne Konto | Rezepte, Planung und Kochmodus funktionieren auch ohne Anmeldung |
| Stand | In Benutzung, in Arbeit |