Youtube Playlist: https://www.youtube.com/playlist?list=PLyyLQUBDgDslwM5e0w2uUZHFKCebP67kM
We were inspired by a friend who was having trouble asking his crush out. We soon realized that this was a problem plaguing many introverted high school students - that of having social anxiety of dating and relationships. We set out to make Teender to help awkward teens like ourselves overcome social anxiety.
What it does
Teender is a portmanteau of
Tinder, the dating app. When a user logs into the app using Facebook, they are able to send an anonymous message to the crush of their choice (coming from their Facebook contacts). The crush will be able to see the anonymous message, but will not be able to see what the name of the person is.
However, if the crush from the first scenario decides to send an anonymous message to his/her crush and that crush happens to be the user from the first scenario, then the app discovers that these two people mutually like each other. Then, the app reveals the names of the other person to each other, and the two crushers live happily ever after. :sparkles:
How We built it
This diagram depicts the user flow, including some of the internal checks and actions that the app performs. We used Firebase as our realtime database, which stores data for our messaging and profile information. Both our iOS and Android applications access Firebase for messaging, enabling users to send and receive messages and notifications anywhere. Our cloud-based web back-end is written in Node.js and is running in an automatically scaling Heroku instance. It handles sending email invitations to the application, as well as monitoring Firebase for new users and other such administrative things.
Several advanced measures are implemented to ensure the robustness of the application.
- Only Facebook friends can send crush messages to each other
- When a user wants to send a message to someone not using Teender, the app keeps track of the invitations and automatically syncs the user with the messages that had been sent to him.
- Anonymity is preserved by ensuring that only until both users have a crush on each other, the receiver of the messages does not know who it is.
Challenges I ran into
- The API is inconsistent in its restrictions. For instance, in searching for a user, depending on what characters are present in the query, it would limit the query to different lengths.
- It is not able to get the friend list of a user, which severely limits the practical usability of the API
- The API does not allow searching by email or many potentially useful fields, which unfortunately limits how much we were able to use the API.
- Doesn't allow querying globally all users; it randomly cuts off the query length
- Too many asynchronous operations
Because of all these issues, we had to store user invites as temporary accounts instead of searching the entire Facebook userbase once a user joined, which would make many things much, much easier.
We ran into an issue in that one team member was signed into the wrong account, not allowing him to use the functionality of the git repository.
Facebook Authentication + Firebase
It just wouldn't work :sob: until later
Memory efficiency in chat messages
Sorting chat messages in chronological order without consuming too much memory, as well as ensuring the user's experience was seamless.
Accomplishments that I'm proud of
We're very proud that we were able to build both an iOS and Android application during the 24 hours of the hackathon. Not only that, but we learned how to utilized Firebase for a realtime chat application, and we built a scalable back-end.
What We learned
- Advanced Firebase features such as messaging
- More advanced iOS concepts
- Android app
- RxJava for asynchronous API calls
- Material design
- Glide for images
- Facebook login
- Facebook + Firebase Authentication
What's next for Teender
- Streamline the chat interface
- Improve the user interface and experience
- Optimize all backend calls to reduce data usage
- AI for recommending cute messages