GitHub - andrewarrow/ruie: Relevance, Usefulness & Importance Evaluator - rust desktop app to triage hackernews articles

GitHub

4 min read Original article ↗
Relevance
Usefulness & 
Importance 
Evaluator

RUIE

A native desktop inbox for reviewing new Hacker News posts, built with Rust, GPUI Kit, and Wry. The application opens as HN Review; the Cargo package and binary are named ruie-studio.

What it does

  • Fetches the newest posts in batches of 50 and refreshes every minute.
  • Organizes posts into Inbox, Upvote, Upvote + comment, Spam, and All posts.
  • Searches by title, site, or author.
  • Shows the Hacker News discussion above the article in two equally sized embedded browsers without toolbars, labels, or URL bars.
  • Saves review decisions locally, with undo for reviews.
  • Supports light and dark appearances and compact window layouts.

Review labels are local queues. Marking a post as Spam does not flag it on HN, and selecting Upvote does not cast a vote. Use the upper discussion pane to vote or reply on Hacker News. No API key is required.

On macOS, the app disables keychain authorization dialogs so embedded websites cannot interrupt reading with a “WebCrypto Master Key” password prompt. Cookies and website storage remain persistent. Keychain operations that need approval fail instead; if a site's sign-in or encrypted storage requires that access, use your default browser.

Build and run

Install Rust and Cargo with support for the Rust 2024 edition, along with the native build dependencies for GPUI Kit and Wry. On macOS, install Xcode Command Line Tools with xcode-select --install. See the GPUI Kit checkout's website/docs/installation.md for platform requirements. Linux also needs GTK 3 and WebKitGTK 4.1 development libraries; the embedded browser requires X11 or XWayland.

The project uses a local path dependency on ../gpui-kit/crates/kit. Clone both repositories into the same parent directory:

git clone https://github.com/longbridge/gpui-kit.git
git clone https://github.com/andrewarrow/ruie.git
cd ruie
cargo run --locked

Expected layout:

parent/
├── gpui-kit/
│   └── crates/kit/
└── ruie/

To build a release binary:

cargo build --release --locked
./target/release/ruie-studio

An internet connection is needed to fetch posts and load article and discussion pages. Previously saved posts and reviews are loaded on startup.

Reviewing posts

Select a post to read its article. Right-click a row or use the keyboard shortcuts to move it into a queue. Choose Go to post from a row's context menu to open that post's Hacker News discussion in the upper reader pane. Reviewed posts can be moved back to Inbox or restored with Undo.

Keyboard shortcuts

These review shortcuts apply when the workspace has focus, outside the search field and embedded browser.

Key Action
1 Mark as Spam
2 Queue for Upvote
3 Queue for Upvote + comment
J / ↓ Select the next post
K / ↑ Select the previous post
R Refresh posts
/ Focus search
Esc Return to the post list in compact layouts
Cmd+Z on macOS Undo the last review

On macOS, Cmd+Shift+T toggles appearance and Cmd+Q quits the app. Appearance and Undo also have buttons in the window.

Local data

Cached posts, review decisions, comment drafts, and the last sync timestamp are stored in reviews.json:

Environment Location
XDG_DATA_HOME is set $XDG_DATA_HOME/ruie-review/reviews.json
macOS, otherwise ~/Library/Application Support/ruie-review/reviews.json
Other platforms, otherwise ~/.local/share/ruie-review/reviews.json

The cache keeps reviewed posts, posts with drafts, and the newest 500 remaining posts. Undo history is held in memory for the current session. Back up reviews.json to preserve your reviews and drafts.

Development

Run the tests with the sibling GPUI Kit checkout available:

The suite covers queue filtering, persistence, URL validation, and context-menu review actions at several window sizes.

The active application code lives in:

  • src/main.rs: application startup, menu, and global shortcuts.
  • src/workspace.rs: inbox, reader, review actions, and synchronization.
  • src/browser.rs: embedded Wry browser and native window integration.
  • src/hn.rs: public Hacker News API client and item types.
  • src/model.rs: review queues, search, cache retention, and JSON storage.
  • src/theme.rs: light and dark themes.

License

GNU General Public License v3.0.