Files
reddit-reader/README.md

133 lines
3.3 KiB
Markdown

# 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