A public rss reader for your friends
Find a file
Pablo Murad e89a10f4cb
Some checks failed
CI / lint (push) Has been cancelled
CI / typecheck (push) Has been cancelled
CI / build (push) Has been cancelled
Security Scan / npm-audit (push) Has been cancelled
Security Scan / docker-scan (push) Has been cancelled
parser
2025-11-04 12:36:19 -03:00
.github/workflows small fix 3.1 2025-10-31 10:45:32 -03:00
apps parser 2025-11-04 12:36:19 -03:00
public README.md 2025-11-03 20:28:46 -03:00
.dockerignore feat: add pagination, OPML export, enhanced YouTube support, and email improvements 2025-10-31 10:21:21 -03:00
.env.example feat: add pagination, OPML export, enhanced YouTube support, and email improvements 2025-10-31 10:21:21 -03:00
.gitconfig.example feat: v0.0.1 - Release with UX improvements, GitHub Actions, and dual repo support 2025-10-23 22:13:16 -03:00
.gitignore small fix 3.1 2025-10-31 10:45:32 -03:00
CHANGELOG.md feat: add pagination, OPML export, enhanced YouTube support, and email improvements 2025-10-31 10:21:21 -03:00
CONTRIBUTING.md small fix 2 2025-10-31 10:38:16 -03:00
docker-compose.yml timezone 2025-11-04 12:31:46 -03:00
docker-entrypoint-web.sh small fix 3.2 2025-10-31 10:50:46 -03:00
docker-entrypoint-worker.sh small fix 3.2 2025-10-31 10:50:46 -03:00
Dockerfile Import lists 2025-11-03 19:58:51 -03:00
guidetofeed.md chore: bump version to 0.5.0 and add new feeds 2025-10-24 16:28:42 -03:00
LICENSE feat: v0.0.1 - Release with UX improvements, GitHub Actions, and dual repo support 2025-10-23 22:13:16 -03:00
package.json small fix 3 2025-10-31 10:42:57 -03:00
README.md README.md 2025-11-03 20:28:46 -03:00
VERSION.md chore: bump version to 0.5.0 and add new feeds 2025-10-24 16:28:42 -03:00

TheFeeder - Modern RSS Aggregator

A modern RSS feed aggregator with daily email digest, built with Next.js 15, PostgreSQL, and Redis.

Screenshots

TheFeeder Interface

TheFeeder Dashboard

Version: 2.0.0 - Node.js Edition
Author: Pablo Murad pablomurad@pm.me
Repository: GitHub


Features

Core Features

  • 🎨 Retro/Vaporwave Design: Beautiful neon-themed UI with cyber aesthetic
  • πŸ“° RSS/Atom Feed Aggregation: Supports RSS, Atom, and JSON feeds
  • πŸ” Auto Discovery: Automatically discovers feeds from websites, Reddit, YouTube, GitHub
  • πŸ“§ Daily Email Digest: Send curated daily digests to subscribers
  • πŸ‘€ Admin Dashboard: Full CRUD interface for managing feeds
  • πŸ” Secure Authentication: NextAuth with role-based access control
  • ⚑ Background Jobs: BullMQ for reliable feed fetching and email delivery
  • 🌐 Multi-timezone Support: Configured timezone support (default: America/Sao_Paulo)
  • πŸ“± Responsive Design: Works perfectly on desktop and mobile

Feed Management

  • Auto Discovery: Enter a URL and automatically find RSS feeds
  • OPML Import/Export: Import and export feed lists via OPML files
  • Duplicate Prevention: Automatic URL normalization prevents duplicate feeds
  • Reddit Support: Auto-converts subreddit URLs to RSS feeds
  • YouTube Support: Detects YouTube channels and converts to RSS
  • GitHub Support: Supports GitHub user and repository feeds
  • Rate Limiting: Intelligent rate limiting (Reddit: 1 hour minimum)
  • User Agent Rotation: Random user agents to prevent blocking
  • Custom Intervals: Set refresh intervals per feed (minimum 10 minutes)
  • Immediate Fetch: New feeds are automatically fetched upon creation or import
  • Auto Cleanup: Automatically maintains up to 50,000 articles (oldest are removed)

Technical Stack

  • Frontend: Next.js 15 (App Router), React 18, Tailwind CSS
  • Backend: Next.js API Routes
  • Database: PostgreSQL with Prisma ORM
  • Queue: BullMQ with Redis
  • Email: Nodemailer
  • Auth: NextAuth v5

Quick Start

Prerequisites

  • Node.js 20+
  • PostgreSQL 16+
  • Redis 7+
  • Docker & Docker Compose (optional)

Installation

  1. Clone the repository:
git clone https://github.com/runawaydevil/thefeeder.git
cd thefeeder
  1. Install dependencies:
npm run install:all
  1. Configure environment:
cp .env.example .env
# Edit .env with your settings
  1. Setup database:
npm run prisma:generate
npm run prisma:migrate:dev
npm run prisma:seed
  1. Start development servers:
npm run dev

This starts both:

Default Admin Credentials

  • Email: admin@example.com
  • Password: admin123

⚠️ Change these in production!


Docker Deployment

docker compose up -d --build

This starts all services:

  • Web app (port 8041)
  • Worker API (port 7388)
  • PostgreSQL (port 5432)
  • Redis (port 6379)

Environment Variables

Key variables in .env:

# Database
DATABASE_URL=postgresql://user:pass@localhost:15432/thefeeder

# Redis
REDIS_URL=redis://localhost:16379

# NextAuth
NEXTAUTH_SECRET=your-secret-here
NEXTAUTH_URL=https://feeder.works

# Site URL
NEXT_PUBLIC_SITE_URL=https://feeder.works

# Worker API
WORKER_API_URL=http://localhost:7388
WORKER_API_TOKEN=your-token-here

# Timezone
TZ=America/Sao_Paulo

# Daily Digest
DIGEST_TIME=09:00

# SMTP (optional)
SMTP_HOST=smtp.example.com
SMTP_USER=user@example.com
SMTP_PASS=password

See .env.example for all available options.


Project Structure

thefeeder/
β”œβ”€β”€ apps/
β”‚   β”œβ”€β”€ web/              # Next.js web application
β”‚   β”‚   β”œβ”€β”€ app/          # Pages and API routes
β”‚   β”‚   β”œβ”€β”€ src/          # Components and utilities
β”‚   β”‚   └── prisma/       # Database schema
β”‚   └── worker/           # Background worker (BullMQ)
β”‚       └── src/          # Job processors
β”œβ”€β”€ .env                  # Environment variables (root)
β”œβ”€β”€ .env.example         # Environment template
β”œβ”€β”€ package.json          # Root package.json with scripts
β”œβ”€β”€ docker-compose.yml    # Docker Compose configuration
└── Dockerfile            # Multi-stage Dockerfile

Scripts

From the root directory:

npm run dev              # Start web + worker in dev mode
npm run build            # Build both services
npm run start            # Start both in production
npm run install:all      # Install all dependencies
npm run prisma:generate  # Generate Prisma client
npm run prisma:migrate:dev  # Run migrations
npm run prisma:seed      # Seed database

Development

Running Individual Services

# Web app only
cd apps/web && npm run dev

# Worker only
cd apps/worker && npm run dev

Database Management

# Open Prisma Studio
npm run prisma:studio

# Create migration
npm run prisma:migrate:dev

# Reset database
cd apps/web && npx prisma migrate reset

Feed Discovery

The admin dashboard includes an auto-discovery feature:

  1. Click "πŸ” Discover" in the feeds manager
  2. Enter a URL (website, Reddit, YouTube, GitHub, etc.)
  3. Select a discovered feed to add it

Supported formats:

  • Regular websites (searches for RSS/Atom links)
  • Reddit: r/subreddit or https://reddit.com/r/subreddit
  • YouTube: Channel URLs or channel IDs
  • GitHub: User or repository URLs

OPML Import/Export

You can import and export feed lists via OPML files:

  1. Import OPML: Click "πŸ“€ Import OPML" in the feeds manager and select an OPML file
  2. Export OPML: Click "πŸ“₯ Export OPML" to download your current feed list

The system automatically:

  • Normalizes URLs to prevent duplicates
  • Triggers immediate fetch for all imported feeds
  • Skips feeds that already exist

Contributing

See CONTRIBUTING.md for guidelines.


License

See LICENSE file.


Built with ❀️ by Pablo Murad