# reddit-reader A Go TUI that monitors subreddits for interesting posts, filters them by keyword and LLM relevance scoring, generates bullet-point summaries, and presents everything in an interactive reading list. Runs as a systemd user service for continuous monitoring. The TUI connects on launch via gRPC. ## Architecture Single binary, three subcommands: - `reddit-reader serve` — monitor daemon + gRPC server - `reddit-reader tui` — interactive reading list client - `reddit-reader setup` — first-run configuration wizard ``` Reddit API ──► Monitor ──► Keyword Filter ──► LLM Scorer ──► SQLite │ TUI ◄──── gRPC ◄──── Server ◄────┘ ``` ## Features - **Keyword + LLM filtering** — cheap regex/keyword pre-filter, then LLM relevance scoring against your interests - **Local-first LLM** — Ollama/llama.cpp by default, Mistral API as fallback - **5-bullet summaries** — generated by the LLM for posts that pass the relevance threshold - **Feedback loop** — thumbs up/down on posts feeds back into relevance scoring as few-shot examples - **Live streaming** — new posts push to the TUI in real-time via gRPC server-side streaming - **Systemd integration** — user service for the daemon, socket activation for on-demand startup ## Requirements - Go 1.26+ - A local LLM via [Ollama](https://ollama.com) (recommended) or a [Mistral API](https://mistral.ai) key - Reddit API credentials ([script app](https://www.reddit.com/prefs/apps)) ## Install ```bash go install somegit.dev/vikingowl/reddit-reader@latest ``` Or build from source: ```bash git clone https://somegit.dev/vikingowl/reddit-reader.git cd reddit-reader go build -o reddit-reader . ``` ## Setup ```bash reddit-reader setup ``` Walks you through: 1. Reddit OAuth credentials 2. LLM backend selection (auto-detects Ollama) 3. Subreddits to monitor 4. Your interests (used for relevance scoring) 5. Optional systemd unit installation Config is stored at `~/.config/reddit-reader/config.toml`. ## Usage Start the monitor daemon: ```bash reddit-reader serve ``` Or enable it as a systemd user service: ```bash systemctl --user enable --now reddit-reader.socket systemctl --user start reddit-reader.service ``` Launch the TUI: ```bash reddit-reader tui ``` ### TUI Keybindings | Key | Action | |-----|--------| | `j/k` | Navigate up/down | | `enter` | Expand/collapse summary | | `s` | Star post | | `d` | Dismiss post | | `o` | Open in browser | | `+/-` | Vote on relevance (feeds back into scoring) | | `tab` | Switch view (Reading List / Starred / Archive / Settings) | | `g/G` | Jump to top/bottom | | `q` | Quit | ## Configuration `~/.config/reddit-reader/config.toml`: ```toml [reddit] client_id = "..." client_secret = "..." username = "..." password = "..." [llm] backend = "ollama" # ollama | llamacpp | mistral endpoint = "http://localhost:11434" model = "ministral-3:8b" relevance_threshold = 0.6 [interests] description = "Go programming, Linux, NixOS, systems programming" [monitor] poll_interval = "2m" max_posts_per_poll = 25 [grpc] socket = "/run/user/1000/reddit-reader.sock" ``` All config values can be overridden with environment variables: `REDDIT_READER_REDDIT_CLIENT_ID`, `REDDIT_READER_LLM_API_KEY`, etc. ## License MIT