← Alle Projekte
Mobile-App 2022

Mealbox

Plattform für Essensbestellungen im Unternehmen für Android und iOS, entwickelt bei Prima IT Consulting.

Flutter-App für Mitarbeitende einer betrieblichen Essensbestellplattform, gestützt auf ein GraphQL-Gateway, das ich ebenfalls auf NestJS und MongoDB gebaut habe.

#flutter#graphql#nestjs#mongodb#offline-cache#b2b

Mealbox ist eine Plattform für betriebliche Essensbestellungen unter Android und iOS, entstanden während meiner Zeit bei Prima IT Consulting. Mitarbeitende melden sich über ihr Unternehmen an, durchsuchen das Tagesmenü nach Gängen, legen Gerichte in den Warenkorb und verwalten ihr Profil.

Ich habe beide Seiten des GraphQL-Gateways bearbeitet: Schema und Resolver auf einem NestJS-Dienst mit MongoDB über Mongoose, sowie den Flutter-Client. Token-Anmeldung, Firmensuche per Name oder Gerätestandort und Menüabfragen über Hive nach einer Cache-und-Netzwerk-Strategie.

Hauptfunktionen

Anmeldung über das Unternehmen

Token-Authentifizierung, begrenzt auf das Unternehmen der Mitarbeitenden: Jede Person sieht ausschließlich Menüs und Preise der eigenen Organisation.

Menü nach Gängen

Das Tagesmenü ist nach Gängen gegliedert, sodass sich eine vollständige Bestellung zusammenstellen lässt, statt einzelne Gerichte aus einer flachen Liste zu wählen.

Firmensuche

Mitarbeitende finden ihre Organisation per Name oder Gerätestandort, wodurch firmenspezifische Codes entfallen.

Warenkorb und Profil

Zusammenstellung der Bestellung und Profilverwaltung im Client; der Bestellzustand bleibt bis zum Absenden lokal.

Tech-Stack

FlutterDartProviderGraphQLNestJSMongoDBMongooseHive

Architektur

Der Client spricht ein einzelnes GraphQL-Gateway an statt einer Reihe von REST-Endpunkten: Die App fordert genau die Felder an, die ein Screen benötigt, statt eine feste Nutzlast zu empfangen. Das Gateway ist ein NestJS-Dienst, die Persistenz läuft über MongoDB mit Mongoose.

Menüabfragen folgen einer Cache-und-Netzwerk-Strategie auf Basis von Hive: Das zwischengespeicherte Menü erscheint sofort, während die Netzwerkanfrage im Hintergrund aufgelöst wird.

Herausforderungen & Lösungen

Die schwierigen Probleme, und wie ich sie gelöst habe.

01

Mit einem Menü statt einem Ladebalken öffnen

Menüs wechseln täglich, die App wird aber zu vorhersehbaren Zeiten geöffnet, oft in einem ausgelasteten Firmennetz. Bei jedem Start neu zu laden bedeutete sichtbares Warten auf Inhalte, die meist nur wenige Stunden alt waren. Zuerst aus einem Hive-Cache auszuliefern und danach mit dem Netzwerk abzugleichen macht das erste Bild nutzbar: um den Preis, kurz ein möglicherweise veraltetes Menü zu zeigen.
02

Jede Abfrage auf das richtige Unternehmen begrenzen

Ein Deployment bedient mehrere Unternehmen; eine falsche Begrenzung gibt Menüs und Preise eines Kunden an einen anderen preis. Die Begrenzung wird im Gateway anhand des Tokens erzwungen statt vom Client übergeben, sodass dieser keine Daten außerhalb der eigenen Organisation anfordern kann.

Interesse an einer Zusammenarbeit?

Ich bin immer offen für Gespräche über neue Projekte und Möglichkeiten.