~ / projects / likelihood
Overview
Likelihood is a matchmaking app built around questions rather than photos. Instead of swiping on appearances, you write a question and it gets sent to a random user. If you like their answer, you send another. Once two people have exchanged enough questions and mutual interest is established, a match happens — and only then can they chat freely.
Motivation
Most dating apps put appearance front and centre. The conversation — if it ever happens — is an afterthought. I wanted to flip that: lead with words, let curiosity drive the connection, and only reveal the social layer once there's genuine mutual interest. The app tries to recreate the feeling of meeting someone through a great conversation rather than a great profile picture.
How it works
When you open the app you're shown an answer from a random user. You don't know who wrote it — just the answer to a question. If it resonates, you reply with a question of your own. The other person answers and can ask one back. This goes back and forth; at any point either side can stop. Once both users have passed a threshold of exchanges and each has liked the other's answers, the app unlocks a match and a direct chat opens.
The backend runs on Firebase: Firestore handles the question/answer document graph and real-time updates, Firebase Auth manages accounts, and Cloud Functions enforce the matching logic server-side so it can't be gamed client-side.
What I learned
Designing a graph-like data model in Firestore where questions reference answers which reference next questions was the biggest architectural challenge. Early versions hit Firestore read limits quickly — I had to restructure collections and use composite indexes carefully. Firebase Cloud Functions were new territory; I used them to keep business logic off the client and to send push notifications when a match occurred.
On the Flutter side, managing async streams across multiple documents without UI jitter pushed me to get comfortable with StreamBuilder, FutureBuilder, and eventually a lightweight state management approach using ChangeNotifier.