Should be added now if you refresh your Profile page. I've added an Account Settings button that lets you reset all your card votes and delete your account and all its data.
Haha, this is actually still an open question. My marketing thus far has been exclusively just posting it on a couple subreddits and this Hacker News thread. I don't think I've yet achieved traction because there aren't enough users to sustain interest so most people get bored pretty quickly and log off, but I'm working on it! If I figure this out I'll let you know though.
Wow, this is an incredible reply. Thanks so much for such an in-depth analysis and compliments!
I actually really like your mock-up and really appreciate that you took the time to make it. Hopefully you don't mind if I take quite a bit of inspiration from it, because I definitely think it looks much better than my current one.
Yeah, I agree that the network effect is one of the biggest problems. Retention seems very tricky with a concept like this because while posting it to reddit or HN can result in many registrations, few people stick around because there isn't much to do on the site because there's so few users at the moment. It honestly does make motivation pretty difficult, but I am indeed going to stick with it regardless.
With regard to your last 4 numbered points, currently 0% == not answered == neutral, and this is mostly due to technical limitations. Your default similarity cube is just (0.0, 0.0, 0.0, 0.0, 0.0, ..., 0.0) (50 zeroes), and voting on cards adjusts this accordingly. Such that if you answer 100% to every card in the first cluster and answer no other cards then your CUBE would look like (1.0, 0.0, 0.0, 0.0, 0.0, ..., 0.0)
I was thinking about a potential way to solve this, but as of right now due to the constraints of CUBE similarity matching, this is the current solution.
Regarding the 0.0/default/skipped -- see my other response about "cardsets", which the more I think about it, the more I am convinced will solve nearly all of your issues:
- you don't have to worry about the skipped vs neutral problem (as it is fair to expect a user to answer all cards in a cardset).
- you don't have to worry about clustering. a cardset is a "cluster".
- you can work around technical limitations by having each cardset be its own cube
- you boost retention by being able to have a library of dozens of cardsets (rather than 250 cards). limitless swiping, and swiping on things that your users will find interesting because they are selecting cardsets that are important to them.
- you can make your site viral by allowing users to send a link where the receiver can (anonymously) swipe all the cards of a cardset and see their "similarity" to the link sender. (Then you can ask them to register to be able to send links themselves).
- futures paths for revenue are endless
I think you are 100% right here. Wow, thanks so much. This really is amazing. I'm going to begin work on this soon (just need to get some sleep first!)
Also there is another aspect to cardsets that might be worth thinking about, which is that they are like "polling" done in a fun and easy way (swiping on pictures) -- the fact that you can also show people that answered similar to me doesn't need to be the focus.
Having polls like this can help you grow the site. For example, imagine I make a cardset for "Beatles albums" where I put in each Beatles album, and shoot the link out to, say, r/Beatles or whatever. Your site can let people swipe, then show the aggregate % for each of the cards, thus ranking them.
Of course... having viewed this really fun and quick poll, random pollers might wish to make their own new polls and spread your site.
Enjoy your sleep.. you have a long journey ahead of you!
Yeah, a lot of people have been requesting this. In the interim you can go to the Cards page and click on cards and change your votes there to baseline. This has been a heavily requested feature though and I'll be adding the ability to reset your votes and delete your account this week.
Should be added now if you refresh your profile page and click "Account Settings" there. I've added a feature for resetting all your votes and deleting your entire account.
This is actually something that I'm still trying to figure out, and hopefully can be improved in the future. Maybe you can help me out:
So, the problem we'd like to solve is what set of 250 or so cards has the highest predictive value in that similar answers lead to the best interpersonal matches?
The problem with hobbies is that there are so many of them and not many people feel very strongly one way or the other about many of them. You probably wouldn't not give someone a chance just because they prefer ping pong to pool, for example. Rather, I was looking for what might be deal-breakers.
The Interests page and tagging in general is what I am hoping will fill that need of specifying your individual interests and matching based on them. Here is where you can tag yourself with whatever you'd like and then search for users and posts based on these tags. The card swiping's function is mostly just a first-pass elimination filter.
I had the thought of perhaps doing categories instead with regard to cards. For example, sense of humor is often very important in people. Perhaps 50 of the cards should be memes? And then perhaps 50 of the cards be political, 50 of the cards be hobbies, etc.? Or perhaps there could be multiple similarity percentages, each of a different category? It's still very experimental and I'm not sure what the correct path is.
In the past I've been very isolated because of health issues which kept me in bed for months at a time, and I've thought a lot about how to make friends online. I've come to the following conclusions:
1) You need a common topic of interest to start the spark of friendship, something that keeps you coming back and gives you an excuse to speak to each other and unending content to speak about.
2) You need to force yourself to check up on them daily to weekly about that topic.
3) You need them to be interested in forming a new friendship (it's a lot of work for both parties involved, not everyone cares to extend their circle of friends or to form online friendships).
4) You need chemistry.
5) Things are a lot easier if you belong to a small online community where people know each others.
Among these 5 requirements, (2,3,5) are irrelevant to your problem of matching people.
Requirement (1) you can provide through hobbies/interests card and clustering somewhat easily with the current system.
Requirement (4) I don't know what it is, or what makes it work. With some people it just won't click. I know it's not because of opposite political beliefs, or lack of common interests, because I have friends which are counter-examples for those potential failure cases. I think it has to do with personality, similar thought patterns (not beliefs) or something like that. The categories you mention could be a path towards quantifying that but you'd want them to be soft-indicators because again people with opposite political beliefs, or senses of humour can be great friends. So I don't really know in the end.
Have you looked at online dating research? I bet there's some smart people who worked on compatibility indicators for these kind of applications.
(Forewarning: I haven't had a chance to check out the site yet this is purely based on what I've read in the comments so far) I would also say some hobbies are good to add, just don't be to narrow on it. While pool or ping-pong might not be good so broad topics like watch sports, play board games, video games, (biased) anime. Broad topics like that are typically what I'll discuss with friends even if our specific interests in the topics don't align.
I think the right type of thing are the sorts of questions that get put in buzzfeed lists like “10 questions to find out if your date is the one” and “how compatible are you? 25 questions to predict relationship success with your partner” type things.
The questions are all like “do you like camping”, “would you like to live in a foreign country” etc.
Some questions like this have actually been studied for their predictive ability I think.
> So, the problem we'd like to solve is what set of 250 or so cards has the highest predictive value in that similar answers lead to the best interpersonal matches?
I think ideally you should somehow allow users indicate what kind of "interpersonal" similarity they are looking for. Perhaps right now I want to find intellectually similar people -- but maybe later I want to find people with the same sense of humor. Hell, maybe I just want to find people interested in eating the same food.
Here's an abstraction that I think could be a killer feature, and could solve a lot of "problems" around matching, privacy, etc: Cardsets.
A cardset would be a set of cards with its own theme. My answers to the cardsets can be hidden/shown at will. I can view similar users based on responses to a single cardset, and my "overall matches" would be a weighted similarity across all cardsets, where I can toggle how important each cardset is.
So now imagine the following cardsets:
- Politics. Swipe left for "bad idea", right for "good idea".
- Humor. Swipe left for "not funny", right for "funny".
- Food. Swipe left for "disgusting", right for "delicious".
- Aesthetics. Swipe left for "ugly", right for "beautiful".
- Hobbies.
- Activities I want to try.
- Places I want to go.
- Fashion, technology, programming, ...etc...
I can now find people that have similar fashion taste to me. Or that want to travel to the same places as me. Or that like the same food as me. There's also the nice side effect that I don't have to swipe on cardsets I don't care about, and that there's a lot of swiping I could do, which is potentially fun. Sky's the limit here!
Furthermore, if you want to get "advanced", add a way for me to find "custom matches", by which I weigh the importance of each cardset. Perhaps I want to find people that match based on "Politics" and "Humor" ... so I'd set those as having high weight and the others lower.
You now have a channel by which you can add endless amounts of content, and can iteratively improve your matching and engagement. Adding a new cardset opens up an entirely new set of matches to all of your users, and gives them something to swipe.
I think this concept is extremely powerful and valuable, and opens up endless avenues for future growth. Imagine brands being able to fill out cardsets for "aesthetics", or "food", etc. Now you can match users to brands they care about.
Lastly, to light a fire under your ass, if you don't commit to doing this, I will. The more I think about it, the more I think this is something that could catch on, especially if you let users create cardsets and add other viral features (eg: ability to send a link to someone to fill out a cardset to find out how much they match me).
Another fantastic reply! I really need to get this to take off already so I can hire you before you make your own and out-compete me.
The more I read this reply, the more I agree with it, and I think it may actually not be that difficult of a change. Card sets could be integrated into the existing cluster concept and I could just give users the ability to choose which sets (clusters) they swipe on and the weighting that they apply to each. They could also decide which clusters should be factored into their similarity matching. I _think_ this will all work with the existing CUBE concept, which is exciting, because many other proposed solutions by others didn't fit nicely within that mathematical structure.
You've honestly given me a lot to think about and I think I see a better way forward now. Your insight really increased my mood because I think you've discovered something very important that I am likely going to be spending quite a bit of time on in the next coming weeks and months.
I would advise against folding it into clusters, and instead have each cardset be its own thing. What you have right now is a cardset that I'd label "General" -- abstract the backend so you can create different sets of cards ("Food", "Fashion", etc). If manually curate cardsets, you won't even need to worry about clustering. Yes, it's a shame you spent time on it, but no clustering will ever beat manually creating sets of cards.
In terms of producing a "total match score" with a user, you compute a match score for each cardset that both users have, then use a simple normalized linear combination to get the total.
If users A and B have cardsets X Y and Z in common, you would produce similarity scores "S" for S(A,B,X), S(A,B,Y), and S(A,B,Z). Then, you use the weights that user A selects for each cardset (W(A), W(B), W(C)), normalize such that they add up to 1 but maintain their ratios, and compute total similarity of A matched to B as: W(A) * S(A) + W(B) * S(B) + W(C) * S(C).
As long as you have pre-computed the scores between all user-cardset pairs (your scaling pain point), computing match scores even with weights is trivial and fast.
> You've honestly given me a lot to think about and I think I see a better way forward now. Your insight really increased my mood because I think you've discovered something very important that I am likely going to be spending quite a bit of time on in the next coming weeks and months.
Happy to hear. I've been working on my own project for close to a year and am close to launch, so I think I understand where you are coming from.
It is practically impossible to view your product as someone unfamiliar with it would. So, that leaves you asking for feedback. Next, it is really difficult to distill user feedback (such as found on this thread) into things you should actually work on. Is a comment just a vocal minority complaining or an indication that some concept should be changed? I think you're doing a good job taking feedback to heart and I'm really rooting for you.
> Another fantastic reply! I really need to get this to take off already so I can hire you before you make your own and out-compete me.
If/when it takes off, just make me an adviser and shoot a couple percentage points my way!
In the beginning it was a bit tricky because the migration to async was happening within the Rust community, so that caused some code churn early on. Lately though it's been smooth sailing.
I'm using tokio-postgres for my database library and both it and Rocket are async, so they synchronize very well together. I do not believe Diesel is currently async, but in either case I'm using tokio-postgres instead so I haven't had to look into how to integrate Diesel with Rocket.
Other than that, my needs were pretty simple and I used well-supported platforms, so I haven't really run into any major issues yet.
This is very good insight and I definitely agree. With regard to your first point, I'll look to add a limit to how many users a person can message per day.
I spent some time already and plan to spend a lot more on moderation tools to mitigate the effects of your second point. Ideally fake profiles can be both reported and detected, but as of yet I have not invested too much time into these efforts, other than adding basic reporting features and a moderation page for those with sufficient power.
I tried to mitigate your third point by only allowing users to see your total cluster vote as opposed to your individual card votes. As a result, there is a bit of plausible deniability as your vote for each card is somewhat masked by the average. This could be furthered by reducing the cluster count and thereby making each cluster larger and mask more individual card votes.
This is a total thought experiment and I have not thought deeply about it.
I wonder if you could encourage healthy debates by grouping people based on cluster, such that:
- Eveybody agrees with each other person in the group on the majority of topics.
- Everybody disagrees with the majority opinion on some topic(s).
- Every topic has two people who disagree with the majority.
- No two people share the exact same views.
I'm imagining probably 6-7 people per group. Make sure they know the matching rules.
Basically, I wonder if you could cut through tribalism and encourage nuanced discussion by making it clear from the beginning that everyone mostly agrees on everything, but everyone also has some points of disagreement. Then it becomes more of a "figure out where we disagree and why" type discussion. Maybe seed it with one topic in the center of the cluster that everyone agrees on, to give a "safe" starting talking point.
I could also see it devolving to a conformist atmostphere where nobody wants to voice their minority view, but I'm hoping that would be mitigated by everyone knowing that they all have a minority view, and that one other person shares their particular minority views.
On second thought:
4. I would go for specific leading topics for a person and leave clustering for the rest. Clustering removes the fine granularity you spend so much time voting on in the beginning. The cards also rely on gut instinct plus fat fingers - i found myself mis-swiping on several and didn’t really care to go back and fix them. Instead, you should allow statements of explanation behind the most pertinent topics or highlighting the most relevant topics after one is done swiping and then prioritize matching on those, with the rest lumped into clusters.
5. The topics do conflate two different mental systems and they clash badly: Interests are things you want to pursue more of together. Politics are divisive topics. You and I share an interest in building products that help people with niche interests find each other, we should be able to find each other with your product. Instead, we found each other with the HN discussion. That’s because depth and insights surfaces with content generated by the person, while swiping is low threshold but also too low signal and the gut instinct of one strongly opposing swipe would be to “skip” that person. If you want connection, let users focus on a few key topics to them and let them pick a few they definitely want to avoid in another person, then let people reach out based on your statements of purpose on a topic. If you want to dig into these problems over chat, call, or email, feel free to reach out to me at hnusername at dreamlist dot com.
5 The down side with people matching is the reason why there are no people marching IPOs out there. Once you are successful, you have to leave. The dating sites have all aggregated into one big company which is a cash cow. Don’t converge towards dating unless you want acquired and users churning massively. The interest matching is slightly different, in that a good match doesn’t preclude you from staying on the platform. The politics ones always turn into a dumpster fire, as political preferences can be fleeting based on your in-group. I would stick to interests for things you want to do together.
> I tried to mitigate your third point by only allowing users to see your total cluster vote as opposed to your individual card votes
I find these clusters really strange. For example, this cluster:
> War on Drugs, War on Terror, Fossil Fuels, Drone Strikes, Dark Humor, Military, Police Officers
And
> Yoga, Lower Drinking Age, Gym, Alcohol, TikTok
What does Yoga and Gym have to do with lowering drinking age, or with TikTok? Very weird. So if I create a profile and I am positive towards Yoga and Gym then people are going to think that I want to lower the drinking age? And likewise, they are going to think that just because I support having a military force (which I do), that I also support the war on drugs (which I don’t).
Would be better to not do clustering at all than to group a whole lot of unrelated stuff together and give the wrong impression I think.
So, the clustering situation is a bit of a double-edged sword. Here's the pros and cons I've found:
Pros:
1) Allows for instant similarity-searching. I am using the Postgres CUBE data structure to index users' votes and it has a limit of 100 items. So, if I didn't use clusters then there could only be 100 cards maximum, but ideally you would have even less than that because the CUBE can start to slow down when you approach that limit.
2) It's also a bit of a privacy feature as people can only see how you voted along cluster lines, and not how you voted on individual cards. This provides the aforementioned plausible deniability.
Cons:
1) Not all clusters are ideal, as you've seen. I spent a lot of time exploring different clustering algorithms and none of them were perfect. Some cards were naturally a part of multiple clusters and others didn't align to any at all. I'm sure a lot of this comes down to card choice, which I definitely could improve.
2) Can be confusing to users as opposed to just listing theirs and others votes on cards.
---
If you'd like to help and create better clusters, I'd definitely be open to tweaking them. Most of the required data can be found by navigating to the Cards page. For example, if you go there and click "War on Drugs" and then click "View Correlations", you'll find that "War on Terror" correlates the most with "War on Drugs". This data can then be used to try and create your own clusters. I've found it to be a very tricky puzzle satisfying all the constraints.
In the end, for performance reasons, I felt like I had to choose between either having clusters or only 50-75 cards, and I chose clusters. There's probably a better way of doing it, but I was unable to find it at the time.
Have you manually reviewed some of these clusters? Automatic clustering for subjective topics tend get gamed by users (if they can be influenced by users) or labeled incorrectly.
Yeah, the first pass for the clustering was SciKit's Agglomerative Hierarchical Clustering Function and then the clusters were manually tweaked in an attempt to increase accuracy. Clusters are also manually updated and curated, so hopefully they shouldn't be able to be gamed at the moment.