Falling back in love with RSS
I’ve been trying to be more deliberate about my online consumption this year. To that end, I’ve moved most of my “scroll and read” time into an RSS reader, specifically Miniflux over Tailscale.
So far, it has managed to displace a lot of my Reddit scrolling with something that makes me feel more informed and inspired. I have full control of what ends up in my feed. Filling it with content was mostly straight-forward:
- Many blogs and sites still publish working RSS feeds.
- For the newsletters that don’t, Kill The Newsletter! creates a feed from emails.
- reddit-top-rss makes a feed from the top posts on a my favorite subreddits.
- hnrss.org helps me pull in new submissions with >300 points.
News frequency is hard to tune
I hoped to also use RSS for news, but that turned out to be harder to balance. My first attempt was to just subscribe to BBC’s World News feed, but that filled my feed with too many stories. Most days, I’d get 20-30 items or so which felt overwhelming.
To reduce the number of items, I tried using reddit-top-rss to pull in the top ≈5 posts from /r/worldnews every day. That reduced the volume, but it meant that I only saw a handful of stories. I was missing the bigger picture.
The result: rss-summary
As a third attempt, I decided to quickly build something.
The result is rss-summary. It’s a very small Python app that takes a list of RSS feeds and an LLM API key, makes a summary of your sources, and re-publishes it as a new feed. As a result, I now get daily news summaries in Miniflux. The sources, frequency and system prompt is all easy to tweak as I go.
I currently have it set up to generate a news summary at 9 AM and 9 PM every day. So far, it’s doing a great job of helping me stay on top of major news stories without doomscrolling.
This felt like the perfect time to ask Aider and Gemini 2.5 Pro to throw something together for me: It won’t be hosted online, is fairly low stakes, and is highly specialized to my personal needs. A few months ago, I would have spent a weekend building something like that but now I could do it in 2 hours.
I’m adding an example of a summary as well as my full Docker Compose setup below.
Example news summary
Kashmir Crisis: India Launches Major Crackdown After Terror Attack
Tensions Rise as India Detains Hundreds in Kashmir Following Pahalgam Attack
India has launched a major security operation in Kashmir, detaining over 1,500 people and destroying homes following a terror attack in Pahalgam that killed multiple civilians. Security forces are conducting raids across the region, with authorities accusing militants of orchestrating the attack. The crackdown has sparked tensions with Pakistan, as Indian forces hunt for suspected militants while destroying properties allegedly linked to insurgents.
Vancouver Festival Tragedy: Car Ramming Kills 11
Driver Plows Into Filipino Street Festival Crowd
Sources: PBS, The New York Times
A tragic incident at a Filipino street festival in Vancouver has left 11 people dead after a driver plowed through a crowd. The victims ranged in age from 5 to 65, according to police. The 30-year-old suspect, who had a history of mental health issues, has been arrested and charged. The incident has deeply shaken Vancouver’s Filipino community, which was celebrating Lapu Lapu Day when the tragedy occurred.
Trump’s Second Term: 100 Days Mark Shows Record Low Approval
Polls Indicate Historically Low Support
Sources: USA Today
President Trump has recorded the lowest 100-day approval rating in 80 years during his second term. Polls show declining support among both Republicans and independents, with only about half of Republican voters saying Trump has focused on the right priorities. The administration faces growing criticism over its major policy initiatives and handling of key issues.
Pope Francis’s Passing: Vatican Reveals Tomb at Santa Maria Maggiore
First Images of Final Resting Place Released
Sources: New York Post, BBC
The Vatican has released the first images of Pope Francis’s tomb at the Papal Basilica of St. Mary Major in Rome, following his private burial ceremony on Saturday. The late pontiff was laid to rest after a public funeral that drew hundreds of thousands of mourners. Cardinals and faithful have begun visiting the tomb to pay their respects, as the Church prepares for the upcoming conclave to select his successor.
Docker Compose setup
# compose.yml
services:
miniflux:
image: miniflux/miniflux:latest
restart: unless-stopped
network_mode: service:tailscale-miniflux
depends_on:
db:
condition: service_healthy
tailscale-miniflux:
condition: service_healthy
env_file: miniflux.env
db:
image: postgres:15
restart: unless-stopped
networks:
default:
env_file: db.env
volumes:
- ./pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "miniflux"]
interval: 10s
start_period: 30s
tailscale-miniflux:
image: tailscale/tailscale:latest
hostname: miniflux
env_file: tailscale.env
volumes:
- ./tailscale/state:/var/lib/tailscale
- ./config:/config
- /dev/net/tun:/dev/net/tun
cap_add:
- net_admin
- sys_module
restart: unless-stopped
healthcheck:
test: ["CMD", "ping", "-c", "1", "100.100.100.100"]
interval: 10s
timeout: 5s
retries: 3
reddit-top-rss:
image: johnny5w/reddit-top-rss
container_name: reddit-top-rss
restart: unless-stopped
ports:
- 8084:8080
env_file: reddit.env
mercury-parser:
image: wangqiru/mercury-parser-api
restart: unless-stopped
rss-summarizer:
image: ghcr.io/felixbouleau/rss-summary:main
env_file:
- .env
volumes:
- rss-summary-feeds:/app/rss
- ./feeds.yml:/app/feeds.yml:ro
restart: unless-stopped
volumes:
rss-summary-feeds:
# db.env
POSTGRES_DB=miniflux
POSTGRES_USER=[redacted]
POSTGRES_PASSWORD=[redacted]
# tailscale.env
TS_AUTHKEY=[redacted]
TS_STATE_DIR=/var/lib/tailscale
TS_USERSPACE=false
TS_SERVE_CONFIG=/config/serve.json
# reddit.env
REDDIT_USER=[redacted]
REDDIT_CLIENT_ID=[redacted]
REDDIT_CLIENT_SECRET=[redacted]
DEFAULT_SUBREDDIT=news
MERCURY_URL=http://mercury-parser:3000
# miniflux.env
DATABASE_URL=postgres://[redacted]@db/miniflux?sslmode=disable
ADMIN_USERNAME=[redacted]
ADMIN_PASSWORD=[redacted]
RUN_MIGRATIONS=1
CREATE_ADMIN=1
PORT=80
// config/serve.json
{
"TCP": {
"443": {
"HTTPS": true
}
},
"Web": {
"${TS_CERT_DOMAIN}:443": {
"Handlers": {
"/": {
"Proxy": "http://127.0.0.1:80"
}
}
}
},
"AllowFunnel": {
"${TS_CERT_DOMAIN}:443": false
}
}