We make choices every day — and choices are hard to make. Indecisiveness and indecision plague our everyday lives and put unnecessary stress on top of our already heavy shoulder. We were inspired to change that. We wanted to mobilize the entire community to help one another make decisions, whenever and wherever.
What it does
Wiki Wiki allows users to create and answer simple yet puzzling questions. Tacos or Pasta? Mac or PC? If you’ve ever wanted opinions on questions like these, Wiki Wiki is the perfect app for you. Users have a personalized feed where they can view and answer poll cards pertaining to different categories. The magic of Wiki Wiki is in its simplicity. When viewing a card, simply tap your decision and watch the card disappear or skip the card if it doesn’t interest you. You can answer as many polls as you desire, and of course, if you have a burning question on your mind, ask it to the community and receive opinions in no time. As a poll maker or answerer, users can see the polling distribution for both options to either view other people’s opinions or how they compare to the rest of the voters. Wiki Wiki builds networks and communities through collective efforts to help solve each other’s pressing questions.
How we built it
Front-End // Swift The frontend of Wiki Wiki focuses on delivering a phenomenal user experience through an exceptional user interface and efficient performance. We utilized native frameworks to provide a novel, intriguing experience. Additionally, we utialized some Cocoapods, such as Alamofire and SwiftyJSON, to simplify our communications with our backend server. Hashmaps and other data structures were implemented as needed to enable a truly efficient object oriented application. The MVVM design pattern was implemented and protocols were introduced to make the most out of the information cards. The hardest implementation was the repeated REST API’s that we had to make asynchronous calls to, while updating the user interface simultaneously. We add to implement a variety of different listener objects in order to make the user experience a truly smooth one.
Back-End // Firebase & Node.js The majority of Wiki Wiki’s backend is built on Amazon Web Services’ serverless computing services. AWS API Gateway routes REST API Calls that are made from the iOS application, and AWS Lambda uses Node.JS to execute snippets of code. We found serverless computing to be especially useful for the iOS rest API calls because they’re fast, simple, and prevents us from having to worry about maintaining a Node.js server. A few years ago, Joseph ran the wrong Node.js server when demoing a hackathon project, and it’s reassuring to know that we won’t have to worry about that this time around. We found the Firebase Realtime Database to be especially easy to use (compared to other DB services we’ve used in the past). The methods were intuitive and the API was extensive and thorough. It also didn’t hurt that a couple of our team members have worked with Firebase in the past.
Machine Learning // Python Machine learning was used to optimize a user’s poll feed to encourage more user engagement. In order to properly integrate machine learning into our product, we built a self-contained web service and hosted it on a Google Cloud VM instance. This container application was built on a virtual environment with a REST API layer and Django framework. We chose to use these technologies because they are scalable and easy to deploy to the cloud. With the Django framework, we used POST to easily communicate with the Node.js backend and thus increase the overall workflow via abstraction. We were then able to use the pandas library in Python to build training and testing data sets based on poll data sent from the Node.js backend and built a machine learning model using the algorithms from the scikit library. Using these data sets and the machine learning model, our service can predict the probability that a specific user will vote on a poll. Using this information, we were able to optimize user feeds to their interests. The final container application is able to receive data and return results with over 95% accuracy in under a second.
Challenges we ran into
- Creating a realistic data set to train our machine learning model
- Deploying our backend to the cloud
- Configuring the container web service
- Finding the best web service for our use case
- Finding the optimal machine learning algorithm for our data sets
Accomplishments that we're proud of
- UI/UX Design
- Machine Learning integration for feed optimization
- Scalably structured database
- Self-contained Django web application
- Serverless computing
What we learned
- Deploying container applications on Google Cloud
- Using REST API with Node.js and Django
- Data Modeling/Analysis for our specific use case
- Good practices in structuring a Firebase database as opposed to a SQL database.
- How to successfully integrate three software layers to generate a consistent and fluid final product.
What's next for Wiki Wiki
- Improving the Machine Learning Model
- Natural Language Processing
- Optimized Backend Performance
- Add more poll categories
- Increase voting options for polls