No description
  • Python 91.1%
  • CSS 8.9%
Find a file
2026-06-08 00:18:36 -04:00
.gitignore initial commit 2026-06-07 23:43:42 -04:00
.python-version initial commit 2026-06-07 23:43:42 -04:00
charts.py added a 3 month chart 2026-06-08 00:18:36 -04:00
earnings.py initial commit 2026-06-07 23:43:42 -04:00
main.py added a 3 month chart 2026-06-08 00:18:36 -04:00
pyproject.toml added a 3 month chart 2026-06-08 00:18:36 -04:00
README.md added a 3 month chart 2026-06-08 00:18:36 -04:00
stocktwits.py initial commit 2026-06-07 23:43:42 -04:00
tui.css added a 3 month chart 2026-06-08 00:18:36 -04:00
uv.lock added a 3 month chart 2026-06-08 00:18:36 -04:00

Stocktwits RSS TUI Reader

A multi-pane native Text User Interface (TUI) for Stocktwits and Earnings, built with Textual.

Features

  • Triple-Pane Layout:
    • Top Left (50% vertical, 60% horizontal): Real-time Trending messages.
    • Bottom Left (50% vertical, 60% horizontal): Live feed for a specific ticker symbol.
    • Top Right (50% vertical, 40% horizontal): Upcoming earnings reports for the next 4 days.
    • Bottom Right (50% vertical, 40% horizontal): 3-month price history chart for the selected ticker.
  • Interactive Charts: Visual stock price history using Plotext.
  • Dynamic Ticker Selection: Change the symbol feed and chart on the fly using a hotkey.
  • Black Background: High-contrast, modern terminal aesthetic.
  • Automatic Highlighting: Stock tickers are automatically highlighted in bold royal blue.
  • Live Updates: Background refreshing for all panes simultaneously.

Keybindings

  • q: Quit the application.
  • r: Manual refresh of all feeds.
  • s: Change the ticker for the symbol pane.
  • Esc: Cancel the ticker change prompt.

Installation

This project uses uv. If you don't have it, install it from astral.sh/uv.

# Clone the repository
git clone https://github.com/ghostnomad/rss-reader
cd rss-reader

# Run the TUI
uv run main.py

Usage Options

  • --interval / -i: Refresh interval in seconds (default: 30)
  • --limit / -l: Number of messages to fetch per pane (default: 20)

Example with custom refresh rate:

uv run main.py --interval 60

License

MIT