Menugrab is a working prototype platform to order food from restaurants.
It features an iOS app with a list of restaurants that users can make orders from and a web app (menugrab-webapp) for restaurant management. Both apps feed from a single backend service (menugrab-server).
For clients:
- Pickup orders: Browse nearby restaurants and make an order that should be picked up at the restaurant when completed.
- Table orders: Scan the identifier located in the restaurant table (e.g. NFC tag or QR label). The restaurant menu will be opened in the app and a table order will start. When completed, it should be delivered to the table by the restaurant staff. This feature is available through an App Clip experience, so it can be used without the need of installing the full app.
- Browse restaurants by location
- PUSH notifications about order state changes.
- Estimated time of completion of every order.
For restaurants:
- Order states:
pending
,accepted
,completed
andcanceled
. - Visual summary of recent orders based on their state.
- Fast transition between order states.
- Send user PUSH notifications automatically on order state changes.
- An order must have an estimated time of completion associated before advancing to
pending
state.
The platform implementation consists on the projects contained in the following repositories:
This repository contains the source code of the iPhone app component of Menugrab.
It' built completely using SwiftUI and Combine, reducing to almost zero the use of callbacks and delegates. It relies on Firebase Authentication for user login and in Firebase Cloud Messaging for receiving notifications from the backend server.
app_clip_ios.mp4
Overall, it consisted on the following steps:
- Research and high level analysis. Definition of user stories.
- UX design (concrete functionalities and user flows)
- Wireframes: https://www.figma.com/file/hKtCUhLgBMmh2IZvE6JENS/Wireframe
- Selection of color palette and fonts
- Definitive designs: https://www.figma.com/file/zHZoGCuCigH3fqq0QYCMPL/Design-v2
It's based off of Alexey Naumov's Clean Architecture for SwiftUI article and his MVVM version implementation (clean-architecture-swiftui).
- Xcode 10.15+
- iOS 14+
- Firebase projects for Firebase Authentication.
- Just run the app if you want to use the example
menugrab-server
instance with populated data (https://menugrab.herokuapp.com). - Alternatively:
- Add your own
GoogleService-Info.plist
files toMenugrab
andMenugrabAppClip
folders. - Point to your running menugrab-server instance in
AppEnvironment.swift
.
- Add your own