A personal RSS aggregator – all important news at a glance.
Live: dailydose.agentnebel.workers.dev (or your Cloudflare URL)
Daily Dose is a lean, self-hosted RSS reader that bundles my favorite feeds for tech, photography, Bitcoin & more in one place. Instead of jumping through dozens of sites, get the latest articles compact and clearly presented.
- No tracking – No Google, no algorithm telling me what to read
- Self-determined – I decide which sources I see
- Fast – Loads feeds once per hour, caches locally
- Papernice – Responsive design, Dark Mode, mobile-first
| Feature | Description |
|---|---|
| 🌓 Dark Mode | Automatic or manual toggle, persists in browser |
| 🔄 Force Refresh | Clears cache and reloads all feeds (with spinning animation) |
| 📱 Mobile-optimized | Fixed header, touch-friendly, responsive layout |
| 💾 Smart Caching | 1-hour cache via localStorage, saves API requests |
| 🖼️ Image Preview | Extracts Open Graph images from feeds |
| 🏷️ Source Badges | Recognize the source at a glance |
| 🚀 Lightweight | Vanilla JS, no frameworks, < 30KB minified |
Frontend: Vanilla HTML5 + CSS3 + ES6 JavaScript
Styling: CSS Custom Properties (Variables), Flexbox, Grid
Hosting: Cloudflare Workers / Pages (static assets)
Build: None needed – pure HTML file
API: rss2json.com (RSS → JSON conversion)
Currently subscribed sources:
| Source | Category | URL |
|---|---|---|
| Blocktrainer | Bitcoin & Crypto | blocktrainer.de/feed |
| PetaPixel | Photography News | petapixel.com/feed |
| iFun.de | Apple & Tech | ifun.de/feed |
| stadt-bremerhaven.de | Regional & Tech | stadt-bremerhaven.de/feed |
| Streetletter | Street Photography | streetletter.substack.com/feed |
| UP Photographers | Photography Portfolio | upphotographers.com/feed |
| eortizfoto | Photography Blog | Substack |
| Tarnkappe.info | Tech & Privacy | tarnkappe.info/feed |
| Kuketz-Blog | Privacy | kuketz-blog.de/feed |
Note: Feeds are fetched via RSS standard (XML → JSON → Rendered HTML).
Since this is a static HTML file, no complex setup is needed:
# Clone repository
git clone <repo-url>
cd dailydose
# Start local server (e.g., with Python)
python3 -m http.server 8000
# Or with Node.js
npx serve .
# Or simply open index.html in browser
open index.htmlImportant: For RSS fetching, an API key is required (rss2json). This is hardcoded in the source – for production use, it should be stored server-side for security (Workers Secrets).
-
Install Wrangler CLI:
npm install -g wrangler
-
Login to Cloudflare:
wrangler login
-
Deploy:
wrangler deploy
The wrangler.jsonc is already configured for static asset hosting.
Optional: Automatically deploy on every push to main:
# .github/workflows/deploy.yml (Example)
name: Deploy to Cloudflare
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CF_API_TOKEN }}RSS Feed (XML)
↓
rss2json API
↓
JSON Response
↓
localStorage (1h Cache)
↓
Rendered Article Cards
If the rss2json API fails or CORS issues occur:
- Primary: rss2json API (direct, JSON)
- Fallback: CORS Proxy (corsproxy.io)
- Emergency: Local XML parser in browser
dailydose/
├── index.html ← Main application (HTML + CSS + JS)
├── wrangler.jsonc ← Cloudflare Workers Config
├── .gitignore ← Ignores .wrangler, .env
└── README.md ← This file
KISS Principle: A single HTML file. No bundler, no framework, no dependencies.
- PWA support (Service Worker, offline mode)
- Custom feed categories/filtering
- Search function across all articles
- Favorites/bookmarks saving
- Push notifications for breaking news
- Multi-user support (personal feed lists)
- Idea & Development: Sven Belz
- RSS API: rss2json.com
- CORS Proxy: corsproxy.io
- Icons: Native Emoji (no icon library needed)
Personal project – no commercial redistribution intended.
"Less is more. No distractions, no algorithms, just the news I want." – Sven
🌫️ Built with ☕ and minimalism.