Jeff Bezos has said that the original inspiration for Alexa was the Star Trek computer: An on-demand, cloud-based converational assistant.
As someone who watched a lot of Star Trek when I was younger, I was always impressed by the computer. But I was more impressed by the replicator: An on-demand add-on to the Start Trek computer that could create -- near instantly -- whatever the user asked for -- from "Coffee, black" to "Tea, Earl gray, hot" to any kind of cuisine the user desired.
For me, true magic lies in convenience. While my Alexa has always been able to provide me with on-demand facts about things like the weather, there were no skills that could satisfy my craving for Chinese food -- bringing prepared, local foods to my doorstep in near real-time. The idea for Godfrey was born.
At it's core, Godfrey is all about simplicity. The focus isn't on the conversation or on making choices. It's on stating what you want and trusting the skill to get it for you. There are no long conversations about pizza toppings or which Chinese dishes are your favorite -- you simply tell Godfrey that you want pizza or Chinese food, and it finds the most highly-regarded pizza or Chinese food in your area, delivering it right to your doorstep, just like a replicator.
Taking Star Trek one step further...
Star Trek isn't just about technology -- it's also about human society. The show's vision of humanity's future has always been of a utopia, where all of humankind -- and even alien races -- are equal, and where inequality and poverty no longer exist.
I didn't want Godfrey to be just a convenient way to get food to your doorstep -- I wanted it to be a force for good. I wanted to take voice communication and the advantages of convenience it enables and offer the easiest, most convenient way to do something many privileged people do every day -- order food -- and then take the value captured by my application and donate it directly to those most in need of the service the app was providing.
Four years ago, I started volunteering at my local food bank, and, seeing how many resources they poured into their fledgling delivery operations, I decided that Godfrey would donate all of its proceeds directly to the food bank. In enabling convenience and delivery for its users, it would simulatenously be enabling delivery for those most in need.
From there, the idea grew. How could I get people engaged? Could I make it competitive? When you interact with Godfrey, you'll see statistics about how many meals you've donated to the hungry, as well as how your donations rank compared to your peers.
Statistics can be hard to convey via voice. With a multimodal device, you'll be able to see visually what your impact is with just a quick glance, augmenting the experience of using Godfrey.
What Godfrey Does
Godfrey consists of two pieces:
- A multimodal Alexa skill, and
- A website, located at https://www.godfrey.site
The Alexa skill is Godfrey's main interface. It allows users to quickly and easily order delicious food. Since my focus is on convenience and targeting busy people -- approximating the magic of Star Trek as closely as possible -- I designed it to be a simple interface. The only options the user has are the type of cuisine and the number of people you're ordering for.
Once you've ordered food, you'll see statistics about how much you've donated and how you compare to your peers. On a multimodal device, this information is presented visually so you can see it at a glance.
The website is the secondary interface -- you can login to your account to see your donation history, your latest order, and your order history, as well as your impact.
How It's Built
The front end of Godfrey is built off of Meteor -- a popular Node.js framework -- and vanilla HTML / CSS with Bootstrap.
The back end consists of two servers -- a hosting server, Meteor Galaxy, and a data processing server which I set up on my own. The data processing server runs Python, and regularly polls the database for new orders; when a new order is detected, it springs into action. Its first pass is via Yelp's API -- it searches for restaurants close to the user's address that match the desired cuisine, and downloads menus where available. It then parses the restaurant's reviews and uses NLTK, a Python framework, to discover which menu items have the most positive sentiment associated with them. Once it has compiled an order, it uses Postmates' API to place the order and queues it for delivery.
Just about the only part of Godfrey that isn't automated is the donations at the end of each month to the San Francisco-Marin Food Bank, but that's because I feel some things just shouldn't be automated!
Challenges I Ran Into
Godfrey was challenge after challenge.
This was my first project built on Alexa. Alexa may be convenient, but many aspects of building on it -- eg. account linking -- took time and a lot of testing to get right.
Using APL was a challenge as well. As a new technology, the resources available to learn how it works were limited, and a lot of my work here consisted of hours spent in Amazon's interface-building tool and a good amount of experimenting.
This wasn't my first time putting together a website, but building out the backend and the integrations with the different APIs took weeks of work to get right.
Accomplishments I'm Proud Of
I'm most proud of the impact I've had. I've only tested Godfrey with myself and a few of my friends from school, but, on average, we've been donating more than 500 meals per month to the food bank, and my peers . I'm excited about the potential impact I can have when I roll Godfrey out to more people.
I'm also proud of just how easy I've made Godfrey. When I explain how it works to people, they usually think there must be more to it. I have to work to convince them that all you have to do is tell Godfrey what food you want and for how many people, and that's it! It'll be at your door shortly. Most of my friends and their families have started using it regularly, and that's been a big motivator for me.
What I Learned
- Amazon's Account Linking API was used to syncronize users' Alexa accounts to their account on the Godfrey website.
- Alexa Presentation Language (APL) was used to communicate visual interfaces for multimodal devices.
- APL Authoring Tool was used to construct those visual interfaces.
What's next for Godfrey
I have a few updates in store for Godfrey.
I'd like to make it more social, allowing users to follow other users and see how their donations compare to their friends.
I'd also like to give users more choice. The current iteration of Godfrey only allows you to specify a cuisine, but people I've talked to have told me they'd like to have some choice over what items are ordered, such as specific pizza types.
I'm already working on implementing both of these iterations.