Skip to content

LikeMind Initial Design Implementation #1

@slyduda

Description

@slyduda

Hey everyone! My name is Sly and I'm making an app that tracks brands and their impacts on society!

History

I originally started working on this in early 2020 at Gemify under the moniker "Emerald", but the concept got axed at the end of the year due to issues with content moderation and poor project management. I am reviving it today to take a second stab at it as now I have a bit more familiarity with the issues I'll run into as well as some of the solutions for problems I didn't know how to solve 4 years ago.

Purpose

Originally, the purpose of the app was to provide some way to rate organizations to determine which ones to buy from and support based on the 3 pillars of ESG. This goal has been abandoned as the primary goal of LikeMind.

The current main purpose of the app is to disseminate relevant information to users that would otherwise take them a while to dig up had they been sifting through news articles or wiki pages. The secondary goal of the app remains the same as before - to provide a soft boycott or safelist of which brands to engage with.

Additionally, it is worth noting that the looming TikTok ban sets a huge precedent on the governments ability to influence any corporation that it wants to (with arbitrary cause). It is imperative that an app like this is Open Source and in the distant future potentially even federated in case of any gov overreach.

Design

Entities

Entities are people, companies, and/or brands. Entities will find their way onto the platform in two ways: user generated and scraped lists.

Relationships

Relationships are the various connections between Entities whether they be familial in nature or financial. A Relationship allows us to show the various connections among different Entities that a user would not know about without having to do some digging. Relationships are all implicitly bi-directional and each relevant Relationship arc has a diametrically related type eg. parent/child or subsidiary/holding company. Relationships must be corroborated with Evidence.

Activities

Activities are the events that Entities participate in and the foundation of how Entities will be ranked by users. Activities can be with or without duration. Activities with duration can be ongoing or already ended. Activities can be mapped to multiple Entities. Activities must be corroborated with Evidence.

Evidences

Evidence is used to corroborate either a Relationship or an Activity. Evidence should be factual information pertaining to the Activity or Relationship in question. This means that Relationships and Activities should be as factual as possible. Opinionation comes with Reviews

Reviews

Reviews serve as data points for quantitative analysis on the Activities that Entities participate in. With Reviews we can perform analysis on what a User may be interested in learning about based on the way they engage with particular Entities and Activities. The way Reviews work is still up for discussion, but initial thoughts are to have a value between -1.00:1.00 be attached to this model.

Users

A User is anyone who uses the app! :)

Communities

Communities are Groups that you can subscribe to that influence the Activities you see as well as recommendations from Communities that have similar Review habits. These are invitation only to prevent bad actors from influencing your own Reviews. Communities that have similar Review patterns will be recommended similar Activities to look at and optionally review.

Tags

Tags are used to better match Users and Communities with Activities that are similar to the ones that they engage in. Additionally we can do some text based analysis on Evidence to find similarities, but this is the easier route for now.

ERD

Here's the (slightly old) ERD that you can stick in Mermaid to see. I'll update this post with some more information and comments when I have some free time. To see the most up to date ERD, check out /db/schemas:

erDiagram 
    Tag ||--|{ ActivityTagLink : ""
    Activity ||--|{ ActivityTagLink : ""

    Evidence ||--|{ ActivityEvidence : ""
    Evidence ||--|{ RelationshipEvidence : ""
    Relationship ||--|{ RelationshipEvidence : "" 
    Activity ||--|{ ActivityEvidence : ""
    Entity ||--|{ Activity : ""
    Entity ||--|{ RelationshipArc : "2:n"

    
    Activity ||--|{ ActivityReview : ""
    User ||--|{ ActivityReview : ""
    User ||--|{ RelationshipReview : ""
    User ||--|{ UserGroupLink : ""
    UserGroup ||--|{ UserGroupLink : ""

    Relationship ||--|{ RelationshipReview : ""
    Relationship ||--|| RelationshipArc : "2:n"
    

    UserGroup {
        uuid id PK
        string name
    }
    UserGroupLink {
        uuid id PK
        uuid group_id FK
        uuid user_id FK
    }
    User {
        uuid id PK
    }
    Entity {
        uiid id PK
        datetime created_at
    }
    Activity {
        uuid id PK
        datetime started_at
        datetime ended_at
    }
    ActivityReview {
        uuid id PK
        uuid user_id FK
        uuid activity_id FK
    }
    ActivityEvidence {
        uuid id PK
        uuid activity_id FK
        uuid evidence_id FK
    }
    ActivityTagLink {
        uuid id PK
        uuid activity_id FK
        string tag_name FK
    }
    Tag {
        uuid id
        string name PK
    }
    RelationshipArc {
        uuid id PK
        uuid relationship_id FK
        uuid start_entity_id FK
        uuid end_entity_id FK
        string type
    }
    Relationship {
        uuid id PK
        datetime created_at 
    }
    RelationshipEvidence {
        uuid id PK
        uuid relationsip_id FK
        uuid evidence_id FK
    }
    RelationshipReview {
        uuid id PK
        uuid user_id FK
        uuid relationship_id FK
    }
    Evidence {
        uuid id PK
        str source
        str description
    }
Loading

Technologies

I'm using what comes easiest to me: Nuxt/Vue. I can prototype things really fast with it and building fully typed TypeScript app sounds like heaven to me.

  • Nuxt/Vue
  • Postgres
  • Docker
  • DrizzleORM
  • Redis? (Later for Caching and Complex App Analytics)

Will add more to this initial post as I have some more time throughout the week. Apologies for any typos or poorly reviewed copy in advance!

Metadata

Metadata

Assignees

Labels

discussionUsed for discussionrfcRequest For Comments

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions