An open API service indexing awesome lists of open source software.

https://github.com/program247365/hackertuah

A CLI for Hacker News
https://github.com/program247365/hackertuah

cli hackernews-cli rust

Last synced: 2 months ago
JSON representation

A CLI for Hacker News

Awesome Lists containing this project

README

          

# Hacker News TUI

A terminal-based user interface for browsing Hacker News with Vim-style navigation and Claude AI integration for story summarization.

![Hacker News TUI Demo](./demo.gif)

## Quickstart

### Install Rust

Install Rust by going here and following the instructions: [https://www.rust-lang.org/tools/install](https://www.rust-lang.org/tools/install)

### Install Hackertauh

Install and run immediately with Cargo:

```bash
git clone https://github.com/program247365/hackertuah.git
cd hackertuah
cargo run --release
```

Or install globally from the latest source:

```bash
cargo install --git https://github.com/program247365/hackertuah
```

Now you can call it on your commandline:

```bash
hackertuah
```

## Features

- 🚀 **Browse** top Hacker News stories in your terminal
- ⌨️ **Vim-style navigation** (j/k, arrows, etc.)
- 🤖 **Claude AI integration** for story summarization
- 🌐 **Open stories** directly in your default browser
- 💚 **Classic green-on-black** terminal aesthetic
- 🎯 **Minimalist, distraction-free interface**
- 🔍 **Instant search/filter**: Press `/` or use the command palette to filter stories as you type
- 🧑‍💻 **Command Palette**: Press `Ctrl+K` to access all commands, including search, section switching, and more
- 📝 **Options menu** for each story (summarize, open, close)
- 🏷️ **Section switching**: Top, Ask, Show, Jobs
- 🛠️ **Easy install & run** with Cargo

## Command Palette 🧑‍💻

Press `Ctrl+K` to open the command palette:

- 🔎 **Search for commands** as you type
- ⚡ **Quickly switch sections** (Top, Ask, Show, Jobs)
- 🔄 **Refresh** current or all sections
- 🔍 **Activate search mode** (type 'search' and press Enter)
- 🌐 **Open in browser**, 💬 **Open comments**, 🤖 **Summarize**
- ❌ **Quit** the app
- ⬆️⬇️ Navigate with Up/Down arrows, `Esc` to close

## Search 🔍

- Press `/` to start searching, or open the command palette and type 'search'
- Type to filter stories by title in real-time
- Use Up/Down arrows to navigate filtered results
- Press Enter to open the selected story, or Esc to cancel
- Works across all sections (Top, Ask, Show, Jobs)

## Keyboard Controls

- `j` or `↓`: Move down
- `k` or `↑`: Move up
- `Enter`: Open selected story in default browser
- `C`: Open comments for selected story
- `o`: Open options menu
- `q`: Quit application
- `Esc`: Close menus/summaries
- `T`: Switch to Top stories
- `A`: Switch to Ask HN
- `S`: Switch to Show HN
- `J`: Switch to Jobs
- `h`/`l`: Navigate between sections
- `r`: Refresh current section
- `R`: Refresh all sections
- `Ctrl+K`: Open command palette (search and execute commands)
- `/`: Start search (type to filter stories)

## Installation

### Cargo

```bash
cargo install --git https://github.com/program247365/hackertuah
```

### Prerequisites

- Rust and Cargo (Latest stable version)
- A Claude API key from Anthropic

### Setup

1. Clone the repository:
```bash
git clone https://github.com/program247365/hackertuah
cd hackernews-tui
```

2. Add your Claude API key to your environment:
```bash
export CLAUDE_API_KEY=your_key_here
```

3. Build and run:
```bash
cargo build --release
cargo run
```

## Usage

### Keyboard Controls

- `j` or `↓`: Move down
- `k` or `↑`: Move up
- `Enter`: Open selected story in default browser
- `C`: Open comments for selected story
- `o`: Open options menu
- `q`: Quit application
- `Esc`: Close menus/summaries
- `T`: Switch to Top stories
- `A`: Switch to Ask HN
- `S`: Switch to Show HN
- `J`: Switch to Jobs
- `h`/`l`: Navigate between sections
- `r`: Refresh current section
- `R`: Refresh all sections
- `Ctrl+K`: Open command palette (search and execute commands)
- `/`: Start search (type to filter stories)

### Command Palette

Press `Ctrl+K` to open the command palette, which provides:
- Searchable list of all available commands
- Real-time filtering as you type
- Command descriptions
- Execute commands with Enter
- Navigate with Up/Down arrows
- Close with Esc

Available commands now include:
- Open in Browser
- Open Comments
- Summarize
- Search (activate search/filter mode)
- Switch to Top/Ask/Show/Jobs
- Refresh/Refresh All
- Quit

### Options Menu

Press `o` to open the options menu, which provides:
1. Summarize this post (uses Claude AI)
2. Open in browser
3. Close menu

### Story Information

Each story displays:
- Title
- Score
- Author
- Direct link to article or discussion

## Dependencies

```toml
[dependencies]
ratatui = "0.21.0"
crossterm = "0.26.0"
tokio = { version = "1.0", features = ["full"] }
reqwest = { version = "0.11", features = ["json"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
open = "3.2"
```

## Project Structure

```
src/
├── main.rs # Main application logic
├── types.rs # Data structures and type definitions
├── ui.rs # UI rendering and layout
└── hn_api.rs # Hacker News API integration
```

## Features in Detail

### Hacker News Integration
- Fetches top 30 stories from Hacker News API
- Real-time score and comment updates
- Direct access to article URLs and discussion pages

### Claude AI Integration
- Summarizes long articles and discussions
- Provides concise, intelligent summaries of complex topics
- Accessible through the options menu with `o`

### Terminal UI
- Built with ratatui for smooth rendering
- Classic green-on-black color scheme
- Efficient memory usage and fast rendering
- Responsive layout that adapts to terminal size

## Contributing

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.