Skip to content

guillevc/menugrab-ios

Repository files navigation

Menugrab

Overview

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).

Features

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 and canceled.
  • 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.

Repositories

The platform implementation consists on the projects contained in the following repositories:

iOS App

Xcode build

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.

designs

app_clip_ios.mp4

UI/UX design

Overall, it consisted on the following steps:

Architecture

It's based off of Alexey Naumov's Clean Architecture for SwiftUI article and his MVVM version implementation (clean-architecture-swiftui).

Requirements

  • Xcode 10.15+
  • iOS 14+
  • Firebase projects for Firebase Authentication.

Quick start

  • 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 to Menugrab and MenugrabAppClip folders.
    • Point to your running menugrab-server instance in AppEnvironment.swift.