In a constantly shifting technological world, mobile banking has been having trouble keeping pace. With all of our team members being members of various banks and credit union institutions, we have all experienced how our banks and credit unions have been slow to adopt the latest payment and innovative solutions available, in particular around usability, compared to the rest of the world. However, increasing usability should not come at the cost of security. We believe that Dash can answer that problem.

What it does

Dash is a brand new, next generation mobile banking app to help users navigate their banking experience more easily. It accomplishes this by offering users the ability to converse with it as it is a conversational bot. When logging in, users have the option to securely access their accounts via unique voice recognition. Additionally, once logged in, a text chat with the bot can be opened to issue commands for checking balances, as well as transferring funds between accounts. However, we still provide users with a familiar banking experience, with information about current account funds available at the very top, as well as the ability to obtain info to contact your local branch.

How we built it

The application was built as an Android mobile app that then connects to a variety of Flask microservices that are built with Python. The entire application is deployed in the cloud, with the aid of AWS Elastic Beanstalk and AWS RDS which provides us with PostgreSQL database services. While building the application, we also used Jenkins CI to auto-deploy and evaluate our builds from GitHub to AWS Elastic Beanstalk. Natural language processing was handled by Microsoft's Cognitive Services, with following services:

  • Authentication: Speaker Recognition API
  • Speech Recognition: LUIS

Challenges we ran into

  1. AWS failing to deploy: Towards the end of our development period, prior to testing, our AWS environment failed to deploy one of our essential microservices within an AWS EB instance. However, after a thorough investigation with various mentors and reverting commit messages, we discovered that SSLify manage to trudge through this enormous difficulty to finally deploy successfully.

  2. Repairing APIs & managing a project with multiple components As a result of having various microservices, it was challenging to ensure that all of them were communicating correctly not only with our application, but also between themselves. We found it was important to specify the input/output conditions of our APIs, and to communicate this clearly to our other team members.

Accomplishments that we're proud of

  1. AWS EB: Making it work, eventually!!
  2. Designing for security: Ensuring that our protocols, implementation, and architecture were secured from the ground up. Speaking of which...
  3. Token-based authentication protocol: Designing and implementing a capability-based authentication protocol!
  4. Front-End UI/UX design: The messaging interface with Dash appears clean and professional, and the design process from mockups to implementing in Android Studio were thorough and helped to make sure that the UX was as simple yet effective.
  5. Effective use of CI: "Jenkins is awesome. Period." - Paul Sajna, 2018

What we learned

  1. Modular design
  2. API specification
  3. Natural language processing and Machine Learning technologies
  4. Security considerations in large scale systems

What's next for Dash

  1. Expand the app's natural language processing functionality: We would like to further expand our ability to use LUIS to handle a larger variety of commands so that Dash can answer more dynamic questions from its users.

  2. Improve speaker recognition models: Theoretically, the machine learning models would improve over time with more samples to work with. In the future, we would provide the Speaker Recognition API with more of these to have more confidence in the results it provides. For such a new API, we believe that its behaviour will become more accurate over time as well.

Built With

Share this project: