# RSS Feed Manager
A FastAPI application for managing RSS feeds with SQLite database.
## Project Structure
```
.
├── app.py # Main FastAPI application
├── routers.py # API routes
├── requirements.txt # Python dependencies
├── feeds.db # SQLite database (auto-created)
└── templates/ # Jinja2 templates
├── base.html # Base template
├── index.html # Main splash screen
├── manage_list.html # Feed list view
├── manage_create.html # Create form
├── manage_upload.html # Upload form
├── manage_sync.html # Sync page with live updates
├── manage_edit.html # Edit form
├── newspapers_list.html # Newspapers list
├── newspaper_view.html # Pure newspaper layout
└── sync_logs_list.html # Detailed sync history
```
## Installation
1. Install dependencies:
```bash
pip install -r requirements.txt
```
2. Run the application:
```bash
python app.py
```
3. Open browser at `http://localhost:8000`
## Features
- **Upload JSON**: Upload RSS feed configuration files
- **Sync by URL**: Automatically upsert feeds based on URL (unique field)
- **CRUD Operations**: Create, Read, Update, Delete feeds
- **Google Search Theme**: Clean, familiar interface
- **Backend Rendered**: All pages rendered server-side with Jinja2
## Database
Uses SQLite with `dataset` library (1.6.2) for simple ORM operations.
### Feeds Table
- id (auto-generated)
- name
- url (unique identifier for upsert)
- type
- category
- structure (JSON field)
- last_synced (timestamp)
### Articles Table
- id (auto-generated)
- feed_name
- feed_url
- title
- link
- description
- content (clean text extracted by trafilatura)
- published
- author
- guid (unique identifier for upsert)
- created_at (timestamp)
- last_synchronized (timestamp)
### Sync Logs Table
- id (auto-generated)
- sync_time (timestamp)
- total_feeds (integer)
- completed_feeds (integer)
- failed_feeds (integer)
- total_articles_processed (integer)
- new_articles (integer)
- elapsed_seconds (float)
- avg_req_per_sec (float)
- timed_out (boolean)
### Newspapers Table
- id (auto-generated)
- created_at (timestamp)
- article_count (integer)
- articles_json (JSON string)
## Routes
- `/` - Main splash screen
- `/manage` - List all feeds
- `/manage/create` - Create new feed
- `/manage/upload` - Upload JSON file
- `/manage/sync` - Synchronize all RSS feeds
- `/manage/edit/{id}` - Edit feed
- `/manage/delete/{id}` - Delete feed
- `/newspapers` - List all newspapers
- `/newspaper/{id}` - View newspaper (pure newspaper layout)
- `/sync-logs` - View complete synchronization history with detailed statistics
- `/ws/sync` - WebSocket endpoint for live sync updates