STO-RES - A Quarantine-Friendly Store Reservation System
This project was created as a part of the ZuriHack "CodeVsCOVID19" hackathon.
Table of Contents
- About the Project
- Technical Details
About The Project
Switzerland is on lockdown. Restaurants, bars, museums, etc. have been closed and all social events have been cancelled. The Swiss Federal Council has imposed strict social distancing rules on the Swiss people and has advised them to stay at home, if possible. Recent data seems to suggest that the people are following this advice.
However, for grocery shopping or getting medical prescriptions from the drug store, people still have to leave their homes. As there are strict regulations on how many people are allowed to be in a room, we often encounter long queues in front of stores like Migros or Coop. In the latter case, people are given a numbered card upon entry that they have to return when leaving the store. This solution is unhygienic and inefficient.
A Real-Time View of Store Capacity
STO-RES is an app that runs on both iOS and Android smartphones and displays real-time data on stores arround your current or a custom location:
- The maximum number of people allowed in the store.
- The current number of people that are in the store.
- Historic data that show when stores are the most- and least crowded.
From the user's perspective, STO-RES allows him or her to shop more efficiently and avoid people by choosing to shop in the least crowded store. From a higher perspective, STO-RES helps to reduce the risk of transmission of Covid-19 by providing load-balancing across stores for an essential activity where people have to leave their homes.
A Store Management System
The STO-RES app offers both a customer and a store side. The security personnel at the store entrance can use the app to increase and decrease the people count when people enter and leave the store, respectively, which updates the database in real-time. The app can be operated by multiple security personnel at once in case there are multiple entrances and exits.
This increases efficiency as the database takes care of synchronization accross multiple users and also increases hygiene because it eliminates the need for entry cards that potentially hundreds of people touch over the course of a single day.
A Reservation System for Fast Store Access
STO-RES additionally offers a reservation system for entry slots. Each store dedicates a percentage of its available entry slots to online reservation. Users can then book a such slot for a store at a designated date and time and be granted direct access by skipping the line. The process is as follows:
- The user selects a store, a date and a desired entry time on the app.
- The user makes a confirmation request by pressing the "Book" button.
- If the reservation is granted, the user receives a QR-code that is stored locally in the app.
- The user can skip the queue at the store and the security personnel scans the QR code with the app, allowing entry if the check was successful. (INFO: We allow for a +/- 10 minute tolerance with respect to the entry time)
The reservation system allows a user to plan his or her shopping more comfortably as he is guaranteed immediate entry, thus further reducing his or her time away from home.
You will need a working installation of Node.js as well as Flutter. Please follow their instructions of how to set up here and here, respectively.
Running the App
Open the folder server and frontend. Start the server by runnning
yarn install and then
yarn start. The server listens to port 8000 on localhost. Next, start the frontend app by running
flutter run in the frontend folder. Navigate on the emulator to test the app.
Important: Depending on whether you run the simulator on iOS, you will need to change the server variable of the local server in the file HTTPRequests.dart, i.e 10.0.2.2:8000 for Android and localhost:8000 for iOS.
The entire system system consists of multiple entities, of which only the iOS and Android app for both customers are publicly visible, which we introduce shortly
iOS and Android App
The app allows customers to see stores around them on a map with their capacity and current utilization, to make reservations for a store and time slot and to skip the queue via a saved QR code, while the app allows multiple security personnel at store entries and exits to enforce the government regulations. The app is programmed in Dart.
Server Backend and API
The public API enables not only our app to gather the relevant information but also offers the possibility for other websites or applications to access it. While some functionality requires authentication (e.g. things that only store security personnel should be able to control) and is therefore not available for the public, other information can be requested through simple GET and POST requests. This would e.g. allow for displaying the current number of customers in a store on the retailers website in realtime, making this important information available for everybody.
All information is stored in a centralized database system based on MySQL 5.7. This includes data about stores (e.g. geolocation, address, number of people in stores), reservations, security personnel credentials, but also historic store activity data. The database system communicates with the server backend and processes all the requests that the latter receives from the app. It is thus the database that ensures data consistency and integrity.
We are four students that have recently graduated with a BSc. in Computer Science from ETH Zurich and will start our master's degree this fall.
Log in or sign up for Devpost to join the conversation.