Our solution was to build an App for the Clover POS App ecosystem. This app is intended to provide useful information to POS operators, based on proximity events emitted through a BLE infrastructure. This information allows restaurant sites to provide a more personal and helpful experience to end users, as well as presenting insight into previous orders and other consumer history, linking into a rudimentary loyalty system.
On the backend we built a REST(ish) API using the Slim framework running on PHP 7.0 FPM behind an Nginx web server. The database was MySQL. The libraries we depended on for the backend solution (from Packagist) were Guzzle (for making requests to the Clover REST API), Pusher (for realtime updates to our user app and our on-POS app via the Pusher.com websocket services), as well as utilities such as Monolog and Kint (for logging and debugging respectively.) Our solution was collaborated and version controlled using Github.
Our frontend solution consists of two Android applications. The first is a client application, intended to be used by the end-users. It allows for customer registration, creating orders and also listens for Beacon signals. Whenever the customer - and their device - is within a predefined range of the Beacon, it notifies the backend API. The backend API in turn then relays the message to a second app.
This second app runs on the Clover POS. It connects with our backend API, using both a REST API as well as subscribing to “Pusher” notifications, emitted over a websocket. This app also communicates to the core Clover POS data sources, using the publicised POS API in order retrieve orders, amend orders and apply discounts dynamically.