Your daily personalized news digest with a modern web interface, smart filtering, and customizable RSS feed management.
- 9 News Categories: Technology, Finance, General News, Sports, Science, Business, Entertainment, Music, and Health
- 70+ Premium RSS Sources: Curated feeds from top publications across all categories
- 27+ Additional Feeds Available: Easily add more sources to customize your news experience
- Real-time Updates: Articles cached for 30 minutes with manual refresh option
- Real-time Trend Analysis: Identifies trending topics from the last 24 hours of articles
- Smart Keyword Extraction: Uses frequency analysis with 2-3 word phrase detection
- Filtered Results: Removes 200+ common stopwords and generic terms for meaningful trends
- Live Sidebar: Always-visible trending topics panel with related articles
- Sticky Navigation: Sidebar scrolls independently for easy browsing
- View Active Feeds: See all your current RSS sources in one organized dashboard
- Hide/Unhide Feeds: Temporarily disable feeds you don't want without permanently removing them
- Add New Feeds: Browse and activate additional RSS sources from our curated collection
- Search & Filter: Quickly find specific feeds by name, URL, or category
- Persistent Settings: Your feed preferences are saved and restored on restart
- Beautiful Responsive Design: Works seamlessly on desktop, tablet, and mobile
- Dark/Light Theme: Toggle between themes with persistent preference
- Smooth Animations: Professional transitions and micro-interactions
- Category-coded Design: Blue color scheme for easy visual scanning
- Category Filtering: Click any category to focus on specific topics
- Live Search: Real-time search across titles and summaries
- Smart Results: Instant filtering without page reloads
- Keyboard Shortcuts:
Ctrl+Kto focus search,Escto clear
- Daily Digest: Automated email delivery at 9:00 AM
- HTML Formatting: Beautiful, responsive email templates
- Grouped by Category: Organized presentation of articles
- Customizable Schedule: Easy to adjust timing in code
- Python 3.8+ installed
- Git (optional, for cloning)
# Clone the repository
git clone https://github.com/yourusername/InTheLoop.git
cd InTheLoop
# Install dependencies
pip install -r requirements.txtCreate a .env file in the project root:
SENDER_EMAIL=your_gmail_address@gmail.com
APP_PASSWORD=your_gmail_app_password
RECEIVER_EMAIL=recipient_email_address@gmail.comGmail Users: Use an App Password if you have 2FA enabled (NOT your regular password).
python main.pyThe web interface will be available at: http://localhost:5000
- Open your browser to
http://localhost:5000 - Browse articles from all categories or filter by specific topics
- Use the search bar to find articles by keyword
- Click category badges to filter content
- Toggle between light/dark themes with the moon/sun icon
- Click "Read More" on any article to view the full story
- Click the gear icon in the top right corner
- Active Feeds Tab: View and manage your current RSS sources
- See which feeds are active or hidden
- Hide feeds you don't want by clicking "Hide Feed"
- Restore hidden feeds by clicking "Restore Feed"
- Search through your active feeds
- Add New Feeds Tab: Browse and add new RSS sources
- Filter by category or search for specific feeds
- Click "Add Feed" to activate new sources
- See which feeds are already added
- Emails are automatically sent daily at 9:00 AM
- Email contains all articles formatted in a clean, readable layout
- Articles are grouped by category for easy navigation
InTheLoop is fully responsive and optimized for mobile devices:
- Touch-friendly interface
- Swipeable category filters
- Optimized card layouts
- Fast loading times
- Readable typography
Edit the rss_feeds dictionary in main.py:
rss_feeds = {
"Your Category": [
"https://example.com/feed.xml",
"https://another-source.com/rss"
]
}Or use the web interface to add feeds from the available collection.
Modify the schedule line in main.py:
# Change from 9:00 AM to your preferred time
schedule.every().day.at("06:00").do(job) # 6 AMUpdate the cache timeout in the fetch_articles function:
if age < timedelta(minutes=60): # Change from 30 to 60 minutesEdit the available_feeds dictionary in main.py to add more options to the feed browser:
available_feeds = {
"Category": [
{"url": "https://newfeed.com/rss", "name": "New Feed Name"},
]
}- Backend: Python 3.8+, Flask
- Frontend: Vanilla JavaScript, CSS3, HTML5
- RSS Parsing: feedparser
- Email: smtplib with HTML templates
- Scheduling: schedule library
- Storage: File-based persistence for settings
- Icons: Font Awesome 6
- Fonts: Inter (Google Fonts)
InTheLoop/
├── main.py # Flask application and RSS feed logic
├── requirements.txt # Python dependencies
├── hidden_feeds.txt # User's hidden feeds (auto-generated)
├── .env # Environment variables (create this)
├── templates/
│ ├── index.html # Main news page
│ └── feeds.html # Feed management page
└── static/
├── css/
│ ├── style.css # Main styles
│ └── feeds.css # Feed management styles
└── js/
├── app.js # Main application logic
└── feeds.js # Feed management logic
- Open Task Scheduler
- Create a new task to run
python main.pyat startup - Set it to run whether user is logged in or not
# Add to crontab (crontab -e)
@reboot cd /path/to/InTheLoop && python3 main.pyWe're working on Docker support for even easier deployment!
# Change the port in main.py
app.run(debug=True, host='0.0.0.0', port=5001)- Verify your
.envfile is in the correct location - Confirm you're using an App Password (not your regular password)
- Check that your Gmail account has "Less secure app access" enabled if needed
- Check your internet connection
- Some RSS feeds may be temporarily unavailable
- Try the refresh button to force a new fetch
- Ensure the application has write permissions in its directory
- Check that
hidden_feeds.txtcan be created/modified - Review console logs for any error messages
This project is open source and available under the MIT License.
Contributions are welcome! Feel free to:
- Report bugs
- Suggest new features
- Submit pull requests
- Add new RSS feed sources
- Developer: Leif Heaney
Contact: leif@leifheaney.com Portfolio: www.leifheaney.com GitHub: https://github.com/leifheaney5
Stay up to date with your daily news using InTheLoop!