Automated curation of Medium articles based on your interests, with AI-powered scoring and email delivery.
- RSS-based fetching - No API keys needed for reading Medium
- AI-powered scoring - Claude analyzes articles for relevance (optional)
- Keyword matching - Fast, free filtering based on your interests
- Email digests - Beautiful HTML emails delivered daily
- Deduplication - Never see the same article twice
- Cross-platform - Works on Windows, Mac, and Linux
cd ~/.claude/projects/medium-curator
# Create virtual environment (recommended)
python -m venv venv
# Activate (Windows)
venv\Scripts\activate
# Activate (Mac/Linux)
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt# Copy example config
cp .env.example .env
# Edit with your settings
# At minimum, set EMAIL_RECIPIENT and one email provider# Dry run (no email)
python src/main.py --dry-run
# Full run with email
python src/main.pyWindows (Task Scheduler):
# Run as Administrator
powershell -ExecutionPolicy Bypass -File scripts/setup_scheduler.ps1 -Time "08:00"Mac/Linux (cron):
# Add to crontab
crontab -e
# Add this line (runs at 8 AM daily)
0 8 * * * /path/to/medium-curator/scripts/run_curator.shEdit config/interests.yaml to customize your interests:
categories:
wealth_building:
weight: 100 # Higher = more important
keywords:
- passive income
- micro-saas
- solopreneur
negative_keywords:
- crypto scam
scoring:
min_score_threshold: 60 # Minimum score to include
max_articles_per_digest: 20- Sign up at resend.com
- Get API key from dashboard
- Set
RESEND_API_KEYin.env
- Enable 2FA on Google Account
- Create App Password at myaccount.google.com/apppasswords
- Set
SMTP_*variables in.env
# Show help
python src/main.py --help
# Curate last 3 days
python src/main.py --days 3
# Send to specific email
python src/main.py --email other@email.com
# Skip email (just curate)
python src/main.py --no-email
# Dry run
python src/main.py --dry-runFor more accurate scoring, enable Claude AI:
- Get API key from console.anthropic.com
- Set
ANTHROPIC_API_KEYin.env - AI will analyze borderline articles (score 40-70)
Cost: ~$0.0007 per article (using claude-3-5-haiku)
medium-curator/
├── config/
│ ├── interests.yaml # Your interest configuration
│ └── email.yaml # Email settings (optional)
├── data/
│ └── articles.db # SQLite database
├── src/
│ ├── main.py # CLI entry point
│ ├── curator.py # Core curation logic
│ ├── ai_scorer.py # AI scoring (optional)
│ └── email_sender.py # Email delivery
├── scripts/
│ ├── run_curator.bat # Windows runner
│ ├── run_curator.sh # Unix runner
│ └── setup_scheduler.ps1 # Windows scheduler setup
├── requirements.txt
├── .env.example
└── README.md
Edit config/interests.yaml:
categories:
my_new_category:
weight: 85
keywords:
- keyword1
- keyword2priority_authors:
- favorite-author
- another-author
priority_publications:
- Towards Data Science
- Better ProgrammingEdit src/email_sender.py _render_html() method to customize the email appearance.
- Check if Medium RSS feeds are accessible
- Lower
min_score_thresholdininterests.yaml - Increase
--daysparameter
- Verify email provider credentials
- Check spam folder
- Test with
--dry-runfirst to verify curation works
- Medium may rate limit RSS requests
- Add delay between requests if needed
MIT - Use freely for personal automation.