-
Notifications
You must be signed in to change notification settings - Fork 0
MVP Definition
The goal of the Minimum Viable Product is to provide a functional replacement to the basic elements of a dating application, without the for-profit motive. This will consist of a relatively similar frontend, with a backend matching algorithm that isn't designed to hook users. All we need to do is remove the intentional manipulation on the backend.
We don't have to reinvent the wheel here, existing apps have the majority of the desired functionality, so it makes sense to start with a decent one as a base. Start by copying Hinge UI and then remove/add elements. Then make our own design and backend.
Essentially the same as a normal dating app (e.g. Hinge) but without the predatory business practices and algorithm manipulation.
- person signs up for application
- goes to profile creation, and makes their profile
- sets their filters
- goes to the home page, and starts swiping on people they find attractive
- get match
- chats with match
- leaves app
There will be an application capable of running on IOS, Android, and Web that connects to the backend via API calls. It follows a relatively standard app architecture:
Flutter + Dart
- Cross platform
- Supported by Google
- Other option would be ReactNative.
Libraries:
- GoRouter: Recommended by the flutter team for applications that want complex navigation.
Android Studio:
- Works well with flutter
- Has emulators built in
- Simple setup
Database: Postgres
- Open Source
- Relational
- Mature and reliable
Content Delivery System (Images): TBD
Server: TBD
- strong types (so not python or javascript)
- Threads
- Commonly used among programmers that may join the project.
- Springboot + Java?
- Rust?
Authentication Service: TBD
- Could be custom, using ID tokens.
A REST API will be used between frontend and backend
API Spec
The majority of these will be similar to existing dating apps, but we list them all explicitly so that the MVP spec is complete and clear to all developers:
One of the core elements of the app is the ability to create a profile that showcases your photos and some description of your interests and preferences.
This functionality gives the ability to sort from the potentially large number of people in a given area down to the ones you're potentially interested in seeing.
A note about filters: In this application, each filter should be bidirectional, meaning that you should only see people who:
- Meet your filters
- You meet their filters
In that manner, every person that you see should have at least the possibility of a match.
- Distance: How far from you
- Age: Specify an acceptable range
- Gender: the gender of the people you want to see.
For the purposes of testing, I believe it's worth adding an in-app way for people to give feedback to the devs. This would simply be stored to a database table in text format.
Profile Elements: Consider referencing apps that do a good job ex Hinge/OkCupid.
- Gender? Sex?
-
do we push people that liked you higher in the stack? Or put them in another stack so that they are visible?
-
what is the best database engine for distance queries and filtering.
-
each person is in a grid square of NxN, then there are 8 grids around theirs. So when you do the distance calc, you simply match based on the Union of your grid and the 8 surrounding grids
A route within the Flutter application refers to a specific page in the app. We will define each page for the MVP and it's desired function.
Login flow for the app.
- Login button
- signup button
To edit your filters
To edit your profile
Page to discover new profiles.
The view of profiles of people who liked you, and what they commented on.
the list of your matches, and the active chats you have with them
the chat with a given match. Will require a parameter to indicate which match you're talking with.
Contains necessary settings for the application
- Pause profile
- Delete Account
- feedback
- Notification settings
- Measurement units (metric vs imperial)
- terms of service
- privacy policy
TBD. We have some basic branding and a name, but it's not set in stone yet.