Discovery, Search and Recommendations
Big and dangerous to Feature. Backend / recommendation engine to be done by Mark. UI can be divvied up.
## API
| Endpoint | Method | Notes |
| -------- | ------ | ------ |
| api/v2/discovery/suggested | GET | |
| api/v2/discovery/suggested/users | POST | Sends up an array of phone numbers |
###Example response
```json
{
"status": "success",
"suggestions": [],
"load-next": "..."
}
```
## PHP structure
`Core/Suggestions/Manager`
```php
const ALGORITHMS = [
AddressBookAlgorithm::class,
HashtagsVotedOnAlgorithm::class
];
```
`Core/Suggestions/Algorithms/*`
## Current Recommendation Systems in Production
(need more placements, other apps have this stuff everywhere)
- Search Results
- Discovery Feeds
- Suggested Channels
- Suggested Groups
- Suggested Hashtags
- Boosts (outlier)
- Potential
- Notifications
- Empty feeds
## Hypotheses
- Increased core, casual users
- User will subscribe to more channels
- User will join more groups
- User will engage on content more often (Votes, Comments, Reminds)
## Factors for Recommendation Logic (in no particular order)
**Data (only with consent and controls to delete from being used)**
- Personal connection (phone number only with consent) (email?) - mobile only
- Top feeds based on tags
- Location
- NSFW
- Friends of friends
- Birthday
- Channels/groups that are posting hashtags that you frequently vote on, post about, or have set as your preferred hashtags
- Channels or groups your subscriptions are subscribing to / joining
- Channels or groups the subscriptions of your subscriptions are subscribing to / joining
- Amount of engagement receive
**Legitimacy of channels**
- Recently active
- Banner setup
- Avatar setup
- Social links
- Onchain setup
- Strikes
- Messenger setup
## Architecture
- Plugable algorithms that can be swapped in and out
- Unleash integration for easily turning these on / off
- A/B to metrics index for better results
- experimentId
- expirementVariant
- actionsSource
- Apply experiments to action stored. Unleash client configuration needs to be tracked so we can tell what experiments are running
- Investigate GEO with elasticsearch
## Top Level Concerns
- Data collection without breach of privacy
- Activity stream/console with privacy controls
- Consent required for more sensitive information to be used (phone number, location, birthday)
- Transparency about why specific recommendations are served to you
- Self-curation and feed control without censorship
- Better controls to hide or see more of certain tags
- Scalable, non-stigmatized system for classifying content
- Politics tag?
- Need better classification/tagging on all content, channels and groups
## Collaborative recommendations:
- https://en.wikipedia.org/wiki/Netflix_Prize
- https://en.wikipedia.org/wiki/Collaborative_filtering
- The high-level idea is: similar people like the same things… i.e. if I like the Movies X and Y, and another user like X, Y and Z…. then I may like Z.
## Correlation with T3?
- Trusted channels based on community / decentralized consensus mechanism
- Trust that we are not recommending bad actors
- Building a web of a trust you enter where you get trusted recommendations
- Push -> https://gitlab.com/minds/engine/blob/master/Core/Notification/Extensions/Push.php
- Views -> https://gitlab.com/minds/front/blob/master/src/app/modules/notifications/notification.component.html#L19
## Next Steps
- Design mobile consent and address sync
- Design suggestions for new users
- Design privacy console
- Mark/Brian to look at architecture and plan out
## Milestones
| Milestone | Link |
| --------- | ------ |
| TODO | |
## Merge Requests & Branches
| | |
| ------ | ------ |
| TODO | |
## Mockups
| | |
| ------ | ------ |
| TODO | |
## Developers
| Developer | Focus |
| ------ | ------ |
| @edgebal | backend |
epic