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

  • Rust 1.88.0+
  • Ollama for article summarization and tagging
  • SQLite (handled automatically by SQLx)

For Python Backend (Legacy)

  • Python 3.8+
  • Ollama for article summarization

For Frontend

  • Node.js 22+ and npm
  • Modern web browser with PWA support

Setup

  1. Navigate to the Rust backend directory:

    cd backend-rust
    
  2. Create a .env file based on the example:

    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:

    cargo install sqlx-cli
    sqlx migrate run
    

Frontend Setup

  1. Navigate to the frontend directory:

    cd frontend
    
  2. Install dependencies:

    npm install
    

Running the Application

Running the Rust Backend

  1. Navigate to the Rust backend directory:

    cd backend-rust
    
  2. Start the backend server:

    cargo run
    

    The backend will be available at http://localhost:3000

Running the Frontend

  1. Navigate to the frontend directory:

    cd frontend
    
  2. Start the development server:

    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:

    cd backend-rust
    
  2. Build the optimized release binary:

    cargo build --release
    

    The binary will be available at target/release/owly-news

Building the Frontend

  1. Navigate to the frontend directory:

    cd frontend
    
  2. Build the frontend:

    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:

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.

Description
No description provided
Readme 5.3 MiB
Languages
Python 43%
Vue 41.7%
TypeScript 10.4%
CSS 4.5%
HTML 0.4%