7pm Thursday – A Dating App for the Next Generation
How do you find true love? It’s a question everyone asks themselves at least once in their life. In the last century, everything was simple: if you liked a person, you just went to them and started communicating. As simple as that. But these days it doesn't work like that, so check out how we created a true dating app of the future.
Many people use the Internet as a modern way to find true love, which raises lots of new questions: does that profile photo reflect reality or only good Photoshop skills? Is the bio fact or fiction? Does the person even exist?
Well, 7pm Thursday helps with that.
So what is it?
7pm Thursday is a dating app based solely on video content. A typical profile contains an introductory video that other users can watch and like. Then, at 7 p.m. on Thursday, people can talk with each other during live video-call sessions. The best part is that the video format helps avoid the trap of dishonesty. A video profile reflects the person’s real gestures and emotions, you can hear their voice and see their smile. It lets you decide whether you like an actual person, not another potentially deceptive picture.
How it works
Getting started with 7pm Thursday is super easy: you download the free app, answer some simple questions, record an introductory video for your profile, choose your best shot for the user pic, and start connecting with people!
During the week you can watch other people’s profile videos and like them. If the person you liked likes you back – congrats, it’s a match! The total number of matches is shown on a counter at the corner of the screen, but you can’t see their profiles until 7 p.m. on Thursday.
7 p.m. on Thursday is a magic moment. It marks the start of the three-hour-long live session. What does that mean? It’s the period when you can make video calls to your matches. At that hour, the list of your matches is finally revealed, and you can choose which person to call first.
To allow users to know who is available for a call, we created a system of status colors that displays who is ready to talk to you. It’s simple:
- Green: Online and available for a call
- Yellow: Online, but not available for a call
- Gray: Not online or not available
“And what if I want to talk to someone again?” Well, there is an option for you: after a live session, you can buy an extra call and have another talk with that person. The only requirement here is that the person you call must be someone you talked with during the live session.
Why at 7 p.m. on Thursday?
So it probably seems a bit odd to specify the time so precisely. What is so special about that exact moment? The reason is simple. After a live session, you can think about the people you’ve talked with, choose the person you liked most, and invite them out on a real date. And there’s no better time for a date than Friday or Saturday night.
From the very beginning, the idea sounded totally bizarre and anything but romantic. But the more we talked with the client the more we all realized that the final product could serve a higher cause. This is what inspired the client to come up with this idea for a unique new dating app.
During the entire development process, we kept one statement in mind as our guiding principle for 7pm Thursday. It sounds simple:
Love is love.
It has no religion, no social status, and no gender. That’s why we created an app that can be used by anyone: male, female, fluid, non-binary or transgender.
The team consisted of 7 people:
- Android engineer
- Back-end engineer
- iOS engineer
- Front-end engineer (part-time)
- QA specialist (part-time)
- DevOps (part-time)
- UI/UX designer (part-time)
The full development process took six months, from mid-December 2018 until mid-June 2019.
Our team used an immense technology stack to bring about the best implementation of the app:
iOS SDK, MVVM+C, Twilio services, Swagger, Fabric, Crashlytics, Lotties-iOS, Firebase, CocoaPods
Kotlin, Clean Architecture, MVP (ThirtyInch), Koin, RxJava, Programmable Video and Programmable Chat from Twilio, Alligator, etc.
Amazon Web Services (ECS, EC2, ECR, RDS, S3, Lambda, CloudWatch, SQS, Elemental MediaConvert, Route 53, CloudFront, VPC, Elastic Beanstalk), Google Cloud Platform (PubSub), Twilio API (Programmable Video, Programmable Chat Authy), Mapbox API, SendGrid, Apple Push Notification, App Store API, Firebase, Sentry, New Relic
Spring Boot, Spring Security, Spring Web, Hibernate, Flyway, Docker, JMS, JWT, Swagger API, PostgreSQL, Testcontainers, JUnit
Docker Compose, Gradle, Git, Jira, IntelliJ IDEA
React/Redux and REST API
Challenges and Solutions
Development of any software implies challenges. Sometimes there’s just a few of them. Sometimes there’s a lot. Solving them can be a no-brainer or can require a lot of time and effort. Here what we dealt with while working on 7pm Thursday:
Initially, it wasn’t clear to the user in real-time whether other users were available for live video sessions. Another problem concerned sending notifications about the outgoing calls.
Because we chose REST as the app’s architecture, we had several options for resolving the problem of displaying a user’s status (whether they are available for a call or not). So, we decided to use Twilio Programmable Chat to introduce special service channels for “calls” and “statuses” for each user. This allowed us to develop an extremely informative notification system. By subscribing to these special service channels, any device could receive real-time notifications.
Video processing is a rather complicated procedure. Here we decided not to waste time reinventing the wheel and chose a trusted solution.
Once on the server, the video is immediately uploaded to AWS S3. After that, AWS Lambda, which is configured for the event “new file arrives in S3 bucket”, receives the file’s metadata, generates a descriptor for its processing (in JSON format) for AWS Elemental MediaConvert, and finally starts the processing.
MediaConvert processes the video, loads it into a new bucket, and sends a message that the operation is completed to AWS SQS via the CloudWatch service.
Apple Push Notification Service
A number of problems arose with the Apple Push Notification Service, so for iOS devices, we used VoIP Push Notifications through APNs. However, sending such notifications is not easy, since Apple services support only HTTP/2. In the beginning, our team used JDK 8 that had no built-in mechanisms for this. The appropriate support appeared only in JDK 9. Therefore, we had to transfer the project to the more modern JDK version.
Tracking user access to and exit from the Twilio video room
Tracking user access to the Twilio video room and user exit from it must be controlled in order to understand the user’s current status and to monitor the start/end of each video call. We decided to use Twilio Webhook Events. This mechanism is rather convenient, yet is difficult to test in a range of environments.
Subscriptions/purchases on iOS/Android
Working with subscriptions and purchases on iOS/Android devices remains challenging. For example, Google Play subscriptions possess many statuses and conditions that are difficult to verify.
We decided to use Google Cloud PubSub because it integrates with Google Play services. PubSub can be configured to receive notifications about changes in subscription status, with subsequent initiation of processing on the server, a specific solution for Android devices.
Breaking the video into frames on Android
On most phones, it was initially difficult to break the video into frames for choosing the best shot, so we did it with mp4 decoding.
Playing the video while scrolling on iOS
While a user was scrolling the feed, the introductory video wasn’t able to upload, so the only thing a user saw was a gray loading screen. Now, the picture is loaded first because it loads faster than video, and then the video itself is loaded. This eliminates empty backgrounds.
Different time zones
The USA has six time zones, which makes it difficult to identify the right time for each user to turn on the app. Here our team decided to tie the app to the system time of the user’s phone.
How we monetized it
The app itself is free, but some of its features are only available with a paid premium subscription. This subscription removes a limit on the number of likes you can make daily and puts you at the top of the feed. Moreover, it allows you to see your matches before a live session. Here are the fees:
- $34.99 – One-month premium subscription
- $89.99 – Three-month premium subscription
- $149.99 – Six-month premium subscription
Plus, as we mentioned above, the app has the option of a paid video call after a live session.
What we have now
Currently, we have a fully developed and ready-to-launch dating app for those who truly want to find “that person.” Soon it will appear in the Apple App Store and in Google Play. At the beginning, it will be available only in the US, but the app’s founder wants to expand its market in the future.
When signing up for 7pm Thursday, each new user signs a community pledge:
I pledge to be kind.
I pledge to respect others.
I pledge to be myself.
No matter where you are from, what music you like, or how many books you’ve read, the things people really like about each other is being kind, respectful, and true.
7pm Thursday will help you find that kind of person.
Get weekly updates on the newest design stories, case studies and tips right in your mailbox.
Disclaimer: in this article, we decided not to dwell on the technical details of building a good API, as there are already really good articles on that (links included). Instead, we looked at the API from the usability perspective and compiled a checklist for you to ensure that your API is easy-to-use and secure.
Let’s explore the darkest corners of the insides of chat to help a GIF of a funny cat find its way from your phone to your friend’s phone
Selenium is truly amazing, and there’s a video in this article proving that. Join us to learn about how you can save time and money (and make your testers happier!) on your next project.