# How to Vibe Code Your Own NewsBlur (and Stop Paying for It)

> A personal news reader bringing people together to talk about the world

- Site: https://newsblur.com
- Category: News / RSS Aggregator
- Verdict: **Solid side project** (62/100 vibecodeable)
- Estimated effort: 3-4 weeks part-time

## Verdict

You can build a functional personal RSS reader clone with AI intelligence training, but background polling reliability and feed extraction edge cases will test your patience.

NewsBlur is deceptively complex under the hood. While a Next.js frontend backed by Postgres and a background worker can ingest standard RSS feeds and display a River of News, replicating robust DOM extraction for 'Web Feeds', elasticsearch full-text search across archives, and a multi-factor intelligence scoring engine requires substantial engineering effort. Background job timeouts and flaky RSS XML feeds will cause endless little bugs that require manual debugging.

### What you can't replicate

- 15 years of edge-case XML/RSS parser bug fixes
- The massive active user community and shared blurblog network
- Third-party iOS client ecosystem integrations out of the box

## What it does

NewsBlur is a personal news reader and RSS feed aggregator that combines chronological feed reading with a custom Intelligence Training system, full-text search, web scraping, and AI-powered summaries.

### Core features

- OPML feed import & folder management
- Background RSS polling worker queue
- Intelligence training system (author, tag, title, text scoring)
- Full-text article extraction & cleaning
- Full-text search indexing (Elasticsearch/Postgres FTS)
- River of News scrollable folder view
- Saved stories & custom tags
- AI-powered story Q&A and daily briefings

## The business

### Pricing

- Free: $0/year
- Premium: $36/year
- Premium Archive: $99/year
- Premium Pro: $29/month

Founded 2009.
Team size: 1 (Samuel Clay).

## The hard parts

- High-frequency background feed polling at scale without IP bans
- Web scraping unstructured HTML into clean article feeds ('Web Feeds')
- Multi-tier intelligence classifier scoring engine running over incoming streams
- Reliable full-text search and indexing across tens of thousands of articles per user
- Cross-client synchronization of read states and folder trees

## How to vibe code NewsBlur

### Prerequisites

- Node.js (Free): Runtime environment for Next.js full-stack application
- GitHub (Free): Source control and deployment pipeline integration

### Recommended AI tools

- Claude Code: Agentic terminal coding tool capable of scaffolding the Django/Next.js backend and multi-file RSS ingestion pipelines.
- Cursor: AI-native code editor for fine-tuning complex React feed reading layouts, keyboard shortcuts, and UI views.

### Stack

- Frontend: Next.js
- Backend: Next.js API Routes
- Database: Neon
- Auth: better-auth
- Payments: None
- Other: Vercel AI SDK, Tailwind CSS, Cheerio

### Hosting

- Vercel (Hosting the Next.js frontend and serverless API functions): $0/mo
- Neon (Serverless Postgres database for storing feeds, stories, and user intelligence training scores): $0/mo

### Build guide

1. **Project Scaffolding & Database Schema** — Initialize the Next.js application with Tailwind CSS and configure Neon Postgres with Drizzle ORM to model users, subscriptions, folders, feeds, stories, and user intelligence training weights.

```
Scrape together a new Next.js project configured with TypeScript, Tailwind CSS, and Drizzle ORM connected to Neon Postgres. Define relational database schemas for users, folders, feeds (url, title, feed_address, last_fetched), stories (guid, title, author, content, feed_id, pub_date), reading_states (user_id, story_id, read_status, starred), and intelligence_weights (user_id, type [author/tag/title], value, score). Ensure proper foreign keys, indices on story publication dates and feed ids, and a migration script to set up tables. Verify the database connection with a test script.
```

2. **OPML Import & RSS Feed Ingestion Pipeline** — Build an OPML file parser and a robust background fetching utility using rss-parser to fetch, parse, and upsert RSS and Atom feed items into the database.

```
Build an OPML upload and parsing utility in Next.js that reads uploaded XML files, extracts feed titles and XML links, and populates folders and feed records in Neon Postgres. Next, implement a background feed ingestion worker function using 'rss-parser' and node-fetch that iterates through active feeds, fetches XML payloads, normalizes publication dates, checks for duplicate GUIDs, and inserts new stories into the database. Handle network timeouts, malformed XML headers, and HTTP error statuses gracefully without crashing the batch queue.
```

3. **Intelligence Training & Story Scoring Engine** — Implement the core intelligence scoring algorithm that evaluates incoming stories against user-defined author, tag, and title weights to assign focus and hide scores.

```
Implement an intelligence scoring engine function that calculates a score for any given story against a user's saved intelligence weights (author, tag, title match). When a user clicks 'like' or 'dislike' on an author, title keyword, or tag in the UI, save a preference weight (+1 for like, -1 for dislike). When rendering stories or fetching feeds, compute a net score per story. Categorize stories into 'focus' (score > 0), 'neutral' (score == 0), and 'hidden' (score < 0). Provide API endpoints to list user training weights and create/delete preference rules.
```

4. **Dashboard UI & River of News Layout** — Build the multi-pane reading interface featuring folder trees, unread counters, River of News scrollable streams, and keyboard navigation shortcuts.

```
Create a responsive three-pane news reader dashboard in Next.js with Tailwind CSS. The left sidebar displays folders and feeds with real-time unread badges. The middle pane shows a scrollable story list (supporting list, split, and River of News folder views) with intelligence score pills. The right pane displays the active story content with font customization and layout controls. Implement keyboard navigation shortcuts (e.g., 'j' for next story, 'k' for previous story, 'm' to toggle read status, 'v' to open original site) matching classic RSS reader ergonomics.
```

5. **Full-Text Search & Article Extraction** — Implement full-text search across user subscriptions using Postgres FTS and a clean text view extraction fallback for truncated RSS feeds.

```
Add full-text search capabilities across all subscribed stories using Postgres full-text search capabilities (tsvector / tsquery). Build a search input bar in the dashboard header that queries story titles and content filtered by the current user's feed subscriptions. Additionally, implement a reader 'Text View' fallback endpoint that fetches an article's original URL using Cheerio, extracts main article body text by stripping away navbars and footers, and presents clean readable markup.
```

6. **AI Assistant Integration & Polish** — Integrate the Vercel AI SDK to power an 'Ask AI' story assistant and daily briefing summary generator.

```
Integrate the Vercel AI SDK with Anthropic Claude to power an 'Ask AI' drawer inside the story reader pane. Users can select a story and ask questions about its content, receiving streamed answers. Build a 'Daily Briefing' background generator that compiles unread stories from top subscribed feeds over the past 24 hours, sends them to an LLM prompt to generate a structured morning briefing digest, and saves it to a dedicated briefing view for the user.
```

### Cost vs paying

**Starting costs (one-time):**

- Custom domain (optional): $12/yr
- Total: ~$12 one-time

**Ongoing costs (monthly):**

- Anthropic API credits for Ask AI & Summaries: ~$2-5/mo
- Total: ~$3-5/mo

- Paying for the SaaS instead: $3.00/mo ($36/yr)
- Build time: 40-60 hours
- AI tool credits: $20 (Claude Pro / Cursor)
- Break-even: Not rational for savings (purely for custom control and learning)

## Sources

- [NewsBlur Official Website & Features Overview](https://newsblur.com)
- [NewsBlur GitHub Repository & Django Backend Documentation](https://github.com/samuelclay/NewsBlur)
- [OfBrooklyn - Background on NewsBlur Origins & Bootstrapping Philosophy](https://www.ofbrooklyn.com/2011/01/10/for-good-reason-newsblur-will-not-compete-with-the-big-boys/)