Challenge Overview
Project Overview
On Wheels is an innovative mobile app (iOS and Android) that redefines urban accessibility for wheelchair users. The goal of On Wheels is to “create the ultimate accessibility guide for all people in wheelchairs by providing a better mobility experience”.
After running a series of successful ideation and design challenges, we’re well aware that one of the functionalities that would offer the biggest improvement in the app would be to have user accounts. This will open the door to many exciting personalization options in the app.
Competition Task Overview
In this challenge, we are looking for your help to build the user accounts api and a demo app that utilizes the api.
In our On Wheels ecosystem we have native apps for both iOS and Android, and a web app designed for desktop use. The backend is powered by IBM’s Bluemix platform, and On Wheels were happy to receive support from IBM’s Global Entrepreneurship fund to get us going on this platform. We run a moderator portal connected to Bluemix which is used by people from our organization to keep the location data in order.
The parts of the tech stack that you will interact with looks like this:
The requirements of this challenge include the following:
1. The user system should be as good fit as possible to the existing system
1.1. Based on the existing node server
1.2. Using new database instances added to the existing cloudant environment (or if really necessary, something else from the Bluemix catalogue -- that is not too expensive to be scaled to 100000 users)
2. Probably create an authorization system using JWTs
2.1. system includes access tokens (eg. 1 day)
2.2. refresh tokens (don’t expire, but can be blacklisted).
2.3. handles protected and non-protected routes.
3. Create a new account functionality
3.1. Submitting email and a password (check that the password is not too easy)
3.2. Cloudant documents have an _id property which can be the primary key
3.3. Handle uniqueness -> e.g. cannot have multiple accounts for the same email address
3.4. Consistent and thorough error handling (same for all requirements)
3.5. Send an automatic email to the user when account is created to welcome them and confirm email
4. User login functionality
4.1. Login with email and password
5. Create a basic user profile with fields such as:
5.1. Name / email / profile pic / wheelchair user (boolean) / chair width / how high a step they can get up
5.2. Perform basic server side validation to make sure users do not set impossible values
6. Methods to edit the account and profile info
7. Password management, including
7.1. Forgot password system, ex: using email to send password reset link, with a page to reset
7.2. Change password functionality and consequently revoking access as needed (eg. Blacklisting the refresh token)
8. Login through Google and Facebook and link a user’s account to social accounts.
8.1. Existing libraries can be used for this
8.2. Please include specifics of how social logins should be integrated (backend database architecture / merging social accounts with regular On Wheels account etc.)
8.3. This is an optional task, there's a $200 bonus for this task but you will need to pass review and be in the top 2 to qualify for this prize
9. The following are also pretty important to us:
9.1. Security
9.2. Following rest principles as well as possible (even though the existing code doesn’t do this)
9.3. The web server is currently written as one ever growing javascript file (in Node.js). We are aware that this is not the best way to go as the project grows, and would really like you to use a more structured approach, something along the models / controllers mentioned in https://www.terlici.com/2014/08/25/best-practices-express-structure.html
9.4. Good / readable / structured / commented code
9.5. Works on android / iOS / browser through web calls
9.6. Using free providers (as we don't really want to sign up to a paid platform like Auth0 which has limited free users)
10. Provide a basic UI to demo all the functionalities, we are looking for a simple web app demo. It doesn’t need to be pretty, as we will integrate the system into the existing mobile and web apps.
Please note for this challenge we are using the new scorecard: https://software.topcoder.com/review/actions/ViewScorecard?scid=30001971
Setup
A suggested way of working is to setup a bluemix trial account, copy our code, and push up your code to your own bluemix account (using the cf command line tools).
Technology Overview
Node.js
Bluemix
Cloudant
HTML5
Javascript
CSS
REST
Documentation Provided
There's no documented provided for this challenge, all requirments are listed above.
Final Submission Guidelines
Submission Deliverables
Below is an overview of the deliverables:
1. Backend API that covers all requirements
2. Demo web app that demonstrates how the API should be used.
3. A complete and detailed deployment document explaining how to deploy the application including configuration information.
4. Access to your Bluemix deployment for the api and web app.
Final Submission
For each member, the final submission should be uploaded via the challenge detail page on topcoder.com.