The final screen informing the user of their balance, on the merchant app.
Refund confirmation for the merchant.
The same order on the merchant app, after the QR code is scanned.
The QR code, and the order description on the online portal.
Online shopping is a breeze, but there are still a few things we could do better!
For instance, currently, the only way to return items ordered online is to mail them back yourself. Sure, the online retailers help you (Amazon lets you print return labels to stick to your package), but we can make the experience even easier!
What it does
Our system allows users who buy stuff online to return the items to physical retail stores, instead of always having to mail the items back. You bought an H&M shirt from Amazon and want to return it? Just go to an H&M store!
We solve this issue with QR codes which can be easily attached to the receipt the user gets in the package.
There is a web service which acts as a proxy between the physical stores, the customers, and Arvato Bertelsmann's order management system.
The store staff use a simple Android app to scan the new QR code on the user's receipt and mark which items the user wants to return. The app then simply tells Arvato's systems what the user returned, and their balance due is updated automatically. Any necessary refunds are issued.
The customers don't have to do/download anything!
They can log into the QR management app (which in the real world would just get integrated into the online retailer's application) and re-download the QR code, should they happen to misplace the receipt, or if they want to see the status of their order(s)/return(s).
How we built it
We used Python's Flask web framework, with the 'fbone' boilerplate project to ease user/session/auth management. We host on Heroku. The app used by the retail store employees is a plain old Java Android app. The app talks to our Flask service, and the service communicates with Arvato's JSON payment/order API over HTTP. Our web front end (which lets users reprint lost labels, and allows general administration) uses some AngularJS.
Challenges we ran into
Arvato's JSON order and payment APIs are relatively complex, and it took us a while to understand their structure. We also had to quickly iterate and update the web app, redeploy it, and update the Android app as well.
We also experimented with doing some image recognition on the retail employee's side for identifying products automagically, but this is a giant computer vision challenge in and of itself.
Accomplishments that we're proud of
A fully-functioning main workflow (user code -- QR scan -- Arvato API), and bug-free presentations!
We also mocked additional functionality on the Android app, such as the interface allowing users to pay for the remaining items on the spot after returning something, should they choose to do so.
What we learned
We learned about about Android development (none of us had a lot of experience with it). We also learned some new things about Heroku, our hosting platform. We also practiced our agile skills and used a real-life sticky-note-powered Kanban board!
What's next for START Hack 2016 Arvato Bertelsmann Challenge
We're really excited about getting feedback from Arvato Bertelsmann and the main judges. In the future, we can work on integrating the service with the real APIs, including the payment one.
It would also be cool to have SMS notifications and updates for the users, e.g. by using Twilio. The apps can always be made prettier, and there's many infrastructure things we could do (more testing, continuous integration, containerization etc.).