218 lines
6.3 KiB
Markdown
218 lines
6.3 KiB
Markdown
# Owly News
|
|
|
|
Owly News is a modern web application that fetches news articles from various RSS feeds, uses an LLM (Large Language Model) to summarize them, and presents them in a clean, user-friendly interface.
|
|
|
|
## Features
|
|
|
|
- Fetches news from configurable RSS feeds
|
|
- Automatically summarizes articles using Ollama LLM
|
|
- **AI-powered intelligent tagging** with geographic, category, and source tags
|
|
- **Advanced multi-criteria filtering** with hierarchical tag support
|
|
- Progressive Web App (PWA) support for offline access
|
|
- Scheduled background updates
|
|
- High-performance Rust backend for optimal resource usage
|
|
- Modern Vue.js frontend with TypeScript support
|
|
- **Comprehensive analytics** and reading statistics
|
|
- **Flexible sharing system** with multiple format options
|
|
|
|
## Project Structure
|
|
|
|
The project consists of multiple components:
|
|
|
|
- **Backend (Rust)**: Primary backend written in Rust using Axum framework for high performance (`backend-rust/`)
|
|
- **Backend (Python)**: Legacy FastAPI backend (`backend/`)
|
|
- **Frontend**: Modern Vue.js 3 application with TypeScript and Tailwind CSS (`frontend/`)
|
|
|
|
## Prerequisites
|
|
|
|
### For Rust Backend (Recommended)
|
|
- Rust 1.88.0+
|
|
- [Ollama](https://ollama.ai/) for article summarization and tagging
|
|
- SQLite (handled automatically by SQLx)
|
|
|
|
### For Python Backend (Legacy)
|
|
- Python 3.8+
|
|
- [Ollama](https://ollama.ai/) for article summarization
|
|
|
|
### For Frontend
|
|
- Node.js 22+ and npm
|
|
- Modern web browser with PWA support
|
|
|
|
## Setup
|
|
|
|
### Rust Backend Setup (Recommended)
|
|
|
|
1. Navigate to the Rust backend directory:
|
|
```bash
|
|
cd backend-rust
|
|
```
|
|
|
|
2. Create a `.env` file based on the example:
|
|
```bash
|
|
cp example.env .env
|
|
```
|
|
|
|
3. Customize the `.env` file as needed:
|
|
- `DATABASE_URL`: SQLite database connection string
|
|
- `OLLAMA_BASE_URL`: URL for the Ollama service (default: http://localhost:11434)
|
|
- Other configuration options as documented in the example file
|
|
|
|
4. Run database migrations:
|
|
```bash
|
|
cargo install sqlx-cli
|
|
sqlx migrate run
|
|
```
|
|
|
|
### Frontend Setup
|
|
|
|
1. Navigate to the frontend directory:
|
|
```bash
|
|
cd frontend
|
|
```
|
|
|
|
2. Install dependencies:
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
## Running the Application
|
|
|
|
### Running the Rust Backend
|
|
|
|
1. Navigate to the Rust backend directory:
|
|
```bash
|
|
cd backend-rust
|
|
```
|
|
|
|
2. Start the backend server:
|
|
```bash
|
|
cargo run
|
|
```
|
|
|
|
The backend will be available at http://localhost:3000
|
|
|
|
### Running the Frontend
|
|
|
|
1. Navigate to the frontend directory:
|
|
```bash
|
|
cd frontend
|
|
```
|
|
|
|
2. Start the development server:
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
The frontend will be available at http://localhost:5173
|
|
|
|
## Key Features
|
|
|
|
### Intelligent Content Organization
|
|
- **AI-Powered Tagging**: Automatic classification with geographic, topical, and source tags
|
|
- **Hierarchical Filtering**: Multi-level filtering by location (country → region → city), categories, and content types
|
|
- **Smart Search**: Advanced filtering with suggestions based on tag relationships and usage patterns
|
|
- **Legacy Migration**: Seamless upgrade from simple country-based filtering to comprehensive tag-based system
|
|
|
|
### Advanced Analytics
|
|
- **Reading Statistics**: Track reading time, completion rates, and engagement patterns
|
|
- **Content Analytics**: Source performance, tag usage, and trending topics analysis
|
|
- **Geographic Insights**: Location-based content distribution and reading preferences
|
|
- **Goal Tracking**: Personal reading goals with progress monitoring
|
|
|
|
### Flexible Article Display
|
|
- **Compact View**: Title, excerpt, tags, and action buttons for quick browsing
|
|
- **On-Demand Loading**: Full content, AI summaries, and source links as needed
|
|
- **Visual Tag System**: Color-coded, hierarchical tags with click-to-filter functionality
|
|
- **Reading Status**: Visual indicators for read/unread status and progress tracking
|
|
|
|
### Enhanced Sharing
|
|
- **Multiple Formats**: Text, Markdown, HTML, and JSON export options
|
|
- **Custom Templates**: User-configurable sharing formats
|
|
- **One-Click Operations**: Copy to clipboard with formatted content
|
|
- **Privacy Controls**: Configurable information inclusion in shared content
|
|
|
|
## Building for Production
|
|
|
|
### Building the Rust Backend
|
|
|
|
1. Navigate to the Rust backend directory:
|
|
```bash
|
|
cd backend-rust
|
|
```
|
|
|
|
2. Build the optimized release binary:
|
|
```bash
|
|
cargo build --release
|
|
```
|
|
|
|
The binary will be available at `target/release/owly-news`
|
|
|
|
### Building the Frontend
|
|
|
|
1. Navigate to the frontend directory:
|
|
```bash
|
|
cd frontend
|
|
```
|
|
|
|
2. Build the frontend:
|
|
```bash
|
|
npm run build
|
|
```
|
|
|
|
The built files will be in the `dist` directory and can be served by any static file server.
|
|
|
|
## Development
|
|
|
|
### Code Quality
|
|
|
|
The project includes comprehensive tooling for code quality:
|
|
|
|
**Frontend:**
|
|
- ESLint with Vue and TypeScript support
|
|
- Prettier for code formatting
|
|
- Vitest for testing
|
|
- TypeScript for type safety
|
|
- Oxlint for additional linting
|
|
|
|
**Backend (Rust):**
|
|
- Standard Rust tooling (`cargo fmt`, `cargo clippy`)
|
|
- SQLx for compile-time checked SQL queries
|
|
|
|
### Testing
|
|
|
|
Run frontend tests:
|
|
```bash
|
|
cd frontend
|
|
npm run test
|
|
```
|
|
|
|
## Configuration
|
|
|
|
The application uses a comprehensive configuration system via `config.toml`:
|
|
|
|
- **AI Settings**: Configure Ollama integration for summaries and tagging
|
|
- **Display Preferences**: Default views, themes, and UI customization
|
|
- **Analytics**: Control data collection and retention policies
|
|
- **Filtering**: Smart suggestions, saved filters, and geographic hierarchy
|
|
- **Sharing**: Default formats and custom templates
|
|
|
|
See the example configuration in the project for detailed options.
|
|
|
|
## Migration from Legacy Systems
|
|
|
|
The application includes automatic migration tools for upgrading from simpler filtering systems:
|
|
|
|
- **Country Filter Migration**: Automatic conversion to hierarchical geographic tags
|
|
- **Data Preservation**: Maintains historical data during migration
|
|
- **Backward Compatibility**: Gradual transition with user control
|
|
- **Validation Tools**: Ensure data integrity throughout the migration process
|
|
|
|
## Future Roadmap
|
|
|
|
The project is evolving through three phases:
|
|
1. **Phase 1**: High-performance Rust backend with advanced filtering and analytics
|
|
2. **Phase 2**: CLI application for power users and automation
|
|
3. **Phase 3**: Migration to Dioxus for a full Rust stack
|
|
|
|
See `ROADMAP.md` for detailed development plans and architectural decisions.
|