A sophisticated, intelligent news aggregator that fetches, deduplicates, and presents tech news from multiple RSS feeds in a clean, interactive interface.
- 7 Premium Tech Sources: TechCrunch, VentureBeat, The Verge, Hacker News, Wired, Ars Technica, MIT Technology Review
- Smart Deduplication: AI-powered similarity detection to eliminate duplicate articles
- Real-time Fetching: Fresh content with progress indicators
- Smart Summaries: Auto-generated article summaries with highlighted key metrics
- Quantifiable Highlighting: Automatically bold numbers, percentages, and financial data
- Timestamp Parsing: Robust handling of various RSS date formats
- Domain Extraction: Clean source attribution
- Like System: Save interesting articles for later reading
- Discard Functionality: Remove unwanted articles permanently
- Read Tracking: Mark articles as read with detailed analysis
- Persistent Storage: TinyDB-based local storage for user preferences
- Real-time Search: Filter articles by title, summary, or source
- Multiple Sort Options:
- 🕒 Most Recent
- 🔤 Alphabetical
- 📰 By Source
- Expandable Articles: Click to view detailed summaries without scrolling
- Responsive Design: Clean, modern interface with smooth animations
- Interactive Elements: Hover effects and visual feedback
- Keyboard Shortcuts: Quick navigation and actions
- Progress Indicators: Visual feedback during content fetching
- Python 3.8 or higher
- pip package manager
-
Clone the repository
git clone <repository-url> cd briefs
-
Create a virtual environment
python -m venv env source env/bin/activate # On Windows: env\Scripts\activate
-
Install dependencies
pip install -r requirements.txt
-
Run the application
streamlit run app.py
-
Open your browser Navigate to
http://localhost:8501
- First Launch: The app automatically fetches the latest articles from all sources
- Browse Articles: Scroll through the main article list in the left column
- Expand Details: Click any article tile to view detailed summary and actions
- Like Articles: Use the ❤️ button to save articles to your liked collection
- Search & Filter: Use the search bar in the sidebar to find specific content
| Shortcut | Action |
|---|---|
r |
Refresh articles |
s |
Focus search bar |
Esc |
Clear selection |
- ❤️ Like: Save article to your collection
- ✅ Mark as Read: Add detailed analysis and mark as read
- 🗑️ Discard: Remove article from view permanently
- 🔄 Refresh: Fetch latest articles
- 📄 Collapse: Hide expanded article details
The app integrates with 7 premium tech news sources:
| Source | URL | Color |
|---|---|---|
| TechCrunch | techcrunch.com/feed/ |
#ff6b6b |
| VentureBeat | venturebeat.com/feed/ |
#4ecdc4 |
| The Verge | theverge.com/rss/index.xml |
#45b7d1 |
| Hacker News | hnrss.org/frontpage |
#ffa726 |
| Wired | wired.com/feed/rss |
#ab47bc |
| Ars Technica | feeds.arstechnica.com/arstechnica/index |
#26a69a |
| MIT Technology Review | technologyreview.com/feed/ |
#42a5f5 |
- Fetch: Retrieve articles from RSS feeds with progress tracking
- Parse: Extract title, summary, link, and timestamp
- Clean: Remove HTML tags and normalize text
- Deduplicate: Group similar articles using sequence matching
- Enhance: Highlight quantifiable data and format timestamps
- Store: Save to local database with user interactions
- TinyDB: Lightweight JSON-based database
- Session State: Streamlit session management for UI state
- User Preferences: Liked articles, discarded items, read status
briefs/
├── app.py # Main application file
├── requirements.txt # Python dependencies
├── liked_articles.json # Database file (auto-generated)
├── README.md # This file
└── LICENSE # License information
# Session State Initialization
initialize_session_state()
# Database Operations
initialize_database()
is_liked(), like_article(), discard_article()
# Content Processing
fetch_articles_with_progress()
deduplicate_articles()
summarize_entry()
# UI Components
render_sidebar()
render_article_list()
render_expanded_article()- Session Management: Streamlit session state for UI persistence
- Database Layer: TinyDB for user data storage
- RSS Parser: Feedparser for RSS feed processing
- Content Processing: BeautifulSoup for HTML cleaning
- UI Framework: Streamlit for web interface
Add or modify RSS feeds in the RSS_FEEDS configuration:
RSS_FEEDS = [
{
"name": "Your Source",
"url": "https://yoursource.com/feed/",
"color": "#yourcolor"
}
]Customize sorting options in SORT_OPTIONS:
SORT_OPTIONS = {
"recent": "🕒 Most Recent",
"alphabetical": "🔤 Alphabetical",
"source": "📰 By Source"
}Modify CSS styles in the load_custom_styles() function for custom theming.
Initialize all Streamlit session state variables.
Fetch articles from RSS feeds with progress indicator.
Group similar articles together using similarity matching.
Save article to user's liked collection.
Mark article as discarded and hide from view.
Check if article is in user's liked collection.
Check if article has been discarded.
Get statistics about liked articles and sources.
Render the sidebar with controls, search, and statistics.
Render the main article list with sorting and filtering.
Render detailed article view with actions.
We welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Add tests if applicable
- Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow PEP 8 guidelines
- Add docstrings to all functions
- Use type hints where appropriate
- Keep functions focused and single-purpose
- Add more RSS sources
- Implement article sharing
- Add export functionality
- Create mobile-responsive design
- Add article recommendations
- Implement user accounts
This project is licensed under the MIT License - see the LICENSE file for details.
- Streamlit for the amazing web framework
- Feedparser for robust RSS parsing
- BeautifulSoup for HTML processing
- TinyDB for lightweight data storage
- All RSS feed providers for their excellent content
If you encounter any issues or have questions:
- Check the Issues page
- Create a new issue with detailed information
- Include your Python version and error messages
Made with ❤️ for the tech community
Stay informed, stay ahead with Briefs.