A swipe-based RSS reader that learns your preferences. Swipe through articles to train a personalized ML model that recommends content you'll enjoy.
# Clone and setup
git clone https://github.com/philippdubach/rss-swipr.git
cd rss-swipr
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
# Run
python app.pyOpen http://127.0.0.1:5000 in your browser.
- Click Settings (gear icon)
- Go to Feeds tab
- Paste CSV or upload a file:
name,url Hacker News,https://news.ycombinator.com/rss TechCrunch,https://techcrunch.com/feed/
- Click Refresh Feeds to fetch articles
- Swipe right = Like
- Swipe up = Neutral
- Swipe left = Dislike
The app tracks your votes, link clicks, and reading time to build training data.
Once you have enough votes (50+ recommended):
- Export: Settings → Export → Download Training Data (CSV)
- Train: Open the Google Colab notebook, upload your CSV, run all cells
- Upload: Settings → Models → Upload the generated
.pklfile - Activate: Click "Activate" to use your model for recommendations
To use your training data on a fresh install:
- Keep your
training_data.csvfrom the export step - On new install: import feeds, refresh to fetch articles
- Settings → Export → Import Training Data (upload your CSV)
This restores your voting history by matching articles via URL.
- Thompson Sampling: 80% exploit (best predictions), 20% explore (diversity)
- Hybrid Features: Combines text analysis with behavioral signals
- No cloud dependency: All data stays local in SQLite databases
rss-swipr/
├── app.py # Flask server
├── src/ # Python modules (feeds, tracking, models)
├── ml/ # ML pipeline and trained models
├── static/ # Frontend (JS, CSS)
├── templates/ # HTML
└── notebooks/ # Model training notebook
- Python 3.8+
- Dependencies: Flask, pandas, scikit-learn, xgboost, feedparser
MIT