As Tinder users, we have long noticed a lack of ease in finding opening lines to message to one's matches. It is often difficult to figure out what to message a match in order the first time to get a positive response, or one at all. So, we decided to help people in this endeavor.
What it does
Tinder Pal is a web app that shows you your matches, and suggests opening messages to send to them. Once the user picks a category of messages to search from, Tinder Pal goes to work analyzing the match's bio and pictures, and picks out key words from these. It then matches these words with tags in its database, that are associated with opening messages that are stored as well, and returns a suitable message. If no tags match, a random message from the selected category is returned. Tinder Pal also allows the user to message their match, thereby providing a complete in-app experience.
How we built it
We built the web app in Django with a SQLite database in development (it will be moved to PostgreSQL when deployed to Heroku). The user is authenticated with Facebook's login authentication flow (Facebook Login API). This returns an access token and a user id that we use to query Tinder's API and return an access token. Next, we use Pynder, an unofficial Python client for the Tinder API (which is private and has no public documentation, but can be queried anyway), to create a landing page with a list of the user's matches, displaying their main profile picture, name and age. Each of these matches is clickable, which leads to a profile page which displays all the pictures of the match as well as their bio. Below that is a form for picking a category to find an opening message from, as well as the messaging history between the user and the match. At the end of the messaging history is a form for sending messages to the match.
Recommendation engine: The database contains messages along with tags describing them and categories they are a part of. We populated this ourselves, but the idea is to eventually let users submit to our database of messages. The reason behind this decision is that we see a lot of great Tinder messages submitted by users on websites like Reddit, Brobible and other, and aggregated by publications like GQ, Esquire, etc, and wanted to harness this power in our app so that we can provide great opening message suggestions that have worked for other Tinder users.
Once the user submits the form on a match's profile to pick a quote from a category (say, "funny"), the match's bio is tokenized by the Natural Language Toolkit Library (nltk) and the words are tagged by grammatical identifiers like "noun", "verb", "preposition", etc. We then filter out everything but nouns, verbs and adverbs. We also run the match's profile pictures through the Google Vision API and retrieve words describing these images. We combine the words ("tags") from the bio and the pictures, and look for a possible match with opening messages in our database, which are associated with their own tags. Finally, the message with the highest number of tag matches for the specified category is returned. If there is no message with tag matches, a random message in that category is returned.
Challenges we ran into
- Since Tinder's API isn't public, we had issues with authentication. Pynder did not offer a clear way of accomplishing this either, but we eventually found a workaround in the comments for one of the issues in the Pynder Github repository.
- We faced some issues with authentication with the Google Vision API as well.
- We didn't have enough time to deploy the app publicly (but have a demo-able local version)
Accomplishments that we're proud of
- We're proud of having completed a working prototype in about 24 hours, an having created a product that we would personally use.
- We're proud of our recommendation engine's analysis capabilities, which analyzes the match's bio and pictures and suggests messages based on the analysis.
- We're proud of getting through the multiple authentication hoops that we faced, particularly with Tinder's API.
- This was the first hackathon for one of us, and the first hackathon project for both of us, and we are very proud of that.
What we learned
- We learned more about Django, having had limited experience with it in the past.
- We learned a lot more about authentication through various APIs, having used three in this project (Facebook Login API, Tinder API, Google Vision API)
What's next for Tinder Pal
- The first step for Tinder Pal is deployment to Heroku, and use of a PostgreSQL database. We have already registered the domains tinderpal.com and mytinderpal.com
- We will change the login flow to make it more secure and easy-to-use before we let our friends use Tinder Pal.
- We will add a portal for users to submit their own messages into our database. We will store these is Amazon Web Services S3 buckets, and move the existing store of messages to S3 as well.
- We plan to provide further message suggestions for conversations that the user may already have going on with their matches, basing these suggestions on the contents of the messages exchanged.
- We plan to make the messages more gender specific, providing different recommendations based on the gender of the match.
- We will share the app with our friends and the community, and ask for feedback for further features and improvements.