# RSS Reader A modern web-based RSS feed reader built with Rust and Rocket. Features a clean, dark-themed interface that allows you to: - Add and manage RSS/Atom feeds - View feed entries with titles, summaries, and timestamps - Poll feeds for updates - Organize feeds with categories - Multi-user support with admin capabilities ## Installation ### Using Nix This project is packaged with Nix flakes. To install and run it: 1. Make sure you have Nix installed with flakes enabled. Add this to your `/etc/nix/nix.conf` if you haven't already: ``` experimental-features = nix-command flakes ``` 2. Install the package: ```bash nix profile install git+https://code.everydayimshuflin.com/greg/rss-reader ``` Or run it directly: ```bash # Run with a persistent database nix run git+https://code.everydayimshuflin.com/greg/rss-reader -- -d /path/to/database.sqlite # Or try it out in demo mode (uses in-memory database) nix run git+https://code.everydayimshuflin.com/greg/rss-reader -- --demo ``` The application requires a `SECRET_KEY` environment variable to be set in order to run. This key is used for encrypting cookies and other security-related functionality. This is the same secret key described in [Rocket's documentation](https://rocket.rs/guide/v0.5/configuration/#secret-key). You can generate a suitable secret key using OpenSSL: ```bash export SECRET_KEY=$(openssl rand -base64 32) ``` ### Development To set up a development environment: 1. Clone the repository: ```bash git clone https://code.everydayimshuflin.com/greg/rss-reader.git cd rss-reader ``` 2. Generate a secret key and set it in your environment: ```bash export SECRET_KEY=$(openssl rand -base64 32) ``` 3. Enter the development shell: ```bash nix develop ``` 4. Build and run the application from source: ```bash # Run with a persistent database on default port (8000) cargo run -- -d rss-reader.db # Run on a specific port cargo run -- -d rss-reader.db -p 3000 # Run in demo mode with custom port cargo run -- --demo -p 8080 ``` The application will be available at `http://localhost:` (default port is 8000). ### Command Line Options - `-d, --database ` - Path to the SQLite database file (required unless in demo mode) - `--demo` - Run in demo mode with an in-memory database - `-p, --port ` - Port to listen on (default: 8000) ### Running in Production For production deployments, make sure to: 1. Generate a strong secret key: ```bash openssl rand -base64 32 ``` 2. Set it permanently in your environment or service configuration: ```bash export SECRET_KEY="your-generated-key" ``` 3. Keep this key consistent across application restarts to maintain user sessions 4. Never share or commit this key to version control ### Demo Mode When running in demo mode (using the `--demo` flag), the application will: - Use an in-memory SQLite database that is cleared when the application stops - Create two pre-configured users: - Admin user: username `admin`, password `admin` - Regular user: username `demo`, password `demo`