Project Description - SCCapstone/EZBag GitHub Wiki

Background

Scan-and-go is a form of self-checkout which has recently been growing in popularity with big-box stores. A patron at a participating store can use an app on their phone to scan and pay for items without going through the typical checkout process.

Motivation

While scan-and-go streamlines the shopping experience, and can thus increase sales, scan-and-go requires R&D costs that are too expensive for small-box stores.

Our Solution

EZBag will be a free scan-and-go web application (HTML/CSS/Js/WASM) service targeted at small-box stores which cannot afford to implement such a service by themselves. The goal of this project is to create a minimum viable product that will satisfy the requirements of the following user experience flow:

  • Scan a QR code at the store entrance to open the ezbag web app
  • Enable camera permissions
  • Scan any product's barcode (EAN, UPC) with my mobile phone camera
  • Automatically present scanned product card on screen
    • --> Buzz when product scanned
    • --> Lazily slide to increase the item quanity on the item popup
    • --> Cancel addition of product to cart via X button
    • --> 3 seconds of no product card interaction automatically adds item to user's cart
    • --> Allow scanning of products in background (behind card)
    • --> Upon scan of another product, remove old product card and present newly scanned product's card
  • Open cart view when pressing cart button in top right
    • --> Checkout via Apple Pay
    • --> Checkout via Google Pay
  • Display QR code digital receipt
  • Display input form for email and/or phone number to send the digital receipt to the customer.

Architecture

  • Hosting
    • Digital Ocean droplet
  • Backend
    • Database
      • Firebase realtime database
    • REST API
    • Payment Processing
      • Apple Pay
      • Google Pay
  • Frontend
    • Analytics
      • Google Analytics
    • Design Components
    • Logic and API
      • Vanilla Javascript
    • Barcode Scanner