LikeMinds is a lightweight web tool that helps researchers on Bluesky discover potential collaborators or competitors by analysing overlapping likes on posts. Given a seed group of users (e.g. likers of a conference post, or a list of attendees), it recommends the most similar people you're not yet following.
- Enter your Bluesky handle and a seed group (a post URL or comma-separated handles)
- Fetch recent liked posts via the public AT Protocol API (no login required)
- Filter content to scientific posts only, or match on all posts
- Choose between two matching algorithms:
- TF-IDF similarity — concatenates each user's liked post texts and computes cosine similarity
- Like overlap — scores users by the fraction of shared liked posts
- Exclude users you already follow
- Recommend the top N most similar users (1–10)
git clone [email protected]:CompMotifs/LikeMinds.git
uv sync
uv run streamlit run src/web/app.pyRequires Python 3.12.
LikeMinds/
├── pyproject.toml # Dependencies and build config (uv/hatch)
├── data/
│ ├── logo.png # App logo
│ └── user_likes.csv # Sample data for development
├── src/
│ └── likeminds/
│ ├── config.py # Configuration settings
│ ├── api/
│ │ └── bluesky_api.py # Bluesky AT Protocol API calls
│ ├── recommendation/
│ │ ├── recommender.py # Like-overlap scoring
│ │ ├── recommender_word2vec.py # TF-IDF + cosine similarity
│ │ ├── recommender_sbert.py # Sentence-BERT embeddings (experimental)
│ │ ├── filter_science.py # Science content filter
│ │ └── blind_spot.py # Cluster-based blind spot detection
│ └── web/
│ ├── app.py # Streamlit entry point
│ └── app_functions.py # Helper functions for the UI
├── tests/ # Test stubs
├── notebooks/ # Jupyter/Colab prototypes
└── docs/ # Documentation
| Package | Purpose |
|---|---|
streamlit |
Web UI |
atproto |
Bluesky AT Protocol client |
pandas / numpy |
Data wrangling |
scikit-learn |
TF-IDF vectorisation, cosine similarity, clustering |
sentence-transformers |
SBERT embeddings (experimental) |
