When I heard about the various financial hacking challenges at this competition, I wanted in somehow. I looked at a bunch of the API's provided, and Blackrock's seemed pretty cool. The original idea was a mobile app that acted as an investment advisor, but that's boooooringggg. Enter Alexa. Half the fun and value of an investment advisor is that human connection. When you can hear somebody, you feel a stronger connection and are more likely to pay attention. Alexadvisor brings Blackrock's API's to the consumer in a fun and interesting way providing valuable and personalized insight.
What it does
Alexadvisor is a portfolio management tool and an investment advisor all in one. Starting from scratch? Tell Alexa what stocks you want to buy and how much money you want to spend on each. Already have a portfolio going? Ask Alexa to list your stocks, give you portfolio information, or give you information on each stock. Don't know what to do? Literally ask Alexa "what should I do?" for a personalized investment plan based on your portfolio's weaknesses and strengths.
How I built it
I started off following Amazon's tutorial on programming an adventure game for Alexa using Node.js, AWS Lambda, and DynamoDB. That didn't really fit my needs, so I found a cool tutorial by BigNerdRanch on making a cake baking Alexa skill. This fit a little better with my project, so I ended up keeping a bit of the shell code. I had a ton of problems with DynamoDB later on, so I ended up just brewing up my own separate Node.js and Express API with a Postgres database. After finally integrating Alexa with my API and getting the portfolio CRUD operations going, I started adding the Blackrock API into the mix. I made the directives for portfolio analysis, stock analysis, and investment advice using values from Blackrock. Finally, I added ElasticSearch and Kibana support for nice visualization of the project.
Challenges I ran into
Alexa is very cumbersome to get started with. Learning how it integrates with AWS Lambda, how intents work, how slotting works for variable speech arguments, how utterances are made, how to debug your code when it inevitably goes wrong, and dealing with synchronous/asynchronous issues are all some of the hurdles any Alexa developer will face. Getting Alexa to work with http requests was a huge task and I spent a ton of time trying to get it to work until I cheated and found a synchronous http library for Node.js.
Accomplishments that I'm proud of
If this were a mobile application or a website and I was having this much trouble, I probably would have given up mid way. Alexa is special, because of the whole speech element. Seeing your creation speak to you with your custom logic is something I have never been able to experience before. I am very proud of just the fact I was able to make a dynamic and persistent storage Alexa hack.
What I learned
I learned a lot about AWS. AWS Lambda and AWS ElasticSearch are actually really cool things I'm glad that I know more about now. Learning how Alexa works at the API level with intents, slotting, and utterances was very cool and fun. The only thing I sadly had to learn was how Alexa handles intents and how everything needs to be synchronous (with the client library I used).
What's next for Alexadvisor
Alexadvisor needs to just work. After HackGT, I plan on getting my own echo dot, fixing some of the bugs that are still hanging around, and publishing the Alexa skill. In the future, adding more intelligent algorithms, information, and advisory are all things I'd like to work on.