Your daily developer digest, delivered.
- Multi-LLM Support 🎉
Use Groq, OpenAI, Anthropic, or Ollama via LiteLLM for digest generation. - Plugin Architecture 🧩
Extensible source system for adding new data sources. - Parallel Fetching ⚡
All sources fetched concurrently for faster performance. - Rate Limit Awareness 🛡️
Auto-waits when GitHub API rate limits are hit.
| Category | Features |
|---|---|
| 🔗 Data Sources | GitHub activity (commits, PRs, issues), HuggingFace trending (papers & models), Reddit highlights (configurable subreddits), Dev.to articles (by tags), GitHub Trending (by language) |
| 📬 Digest Delivery | Email digest (Markdown→HTML via Gmail SMTP), Slack & Discord webhooks, Digest preview before sending |
| 🎛️ Customization & Control | Configurable schedule, Multi‑LLM support (Groq, OpenAI, Anthropic, Ollama via LiteLLM), Plugin architecture for custom sources |
| 🖥️ UI & Experience | First‑run wizard for API keys, Digest history (search/export), System tray with background scheduler |
| ⚡ Performance & Reliability | Parallel fetching for speed, Retry logic with exponential backoff, Rate limit awareness with auto‑wait |
| Category | Technologies |
|---|---|
| Core | Python 3.10+, PyQt6, Groq/LiteLLM |
| Data Fetching | requests, beautifulsoup4, PyGithub |
| Utilities | mistune, tenacity, python-dotenv, schedule |
| Testing | pytest, pytest-qt, responses |
-
Clone & Install
git clone https://github.com/aliii-codes/Orbit.git cd Orbit uv sync -
Environment Variables
Create a.envfile:GITHUB_TOKEN=your_github_token GROQ_API_KEY=your_groq_api_key GMAIL_USER=your_gmail@gmail.com GMAIL_APP_PASSWORD=your_gmail_app_password
-
Run
python main.py
First-run wizard will guide you through setup
| Action | Command/Steps |
|---|---|
| Fetch Repos | Enter GitHub username → Click "FETCH REPOS" |
| Monitor Repos | Select repos → Click "+ ADD SELECTED" |
| Send Digest | Click "SEND DIGEST NOW" → Review preview → Confirm |
| View History | Switch to HISTORY tab → Search/export digests |
| Configure | SETTINGS tab → Adjust sources, schedule, notifications |
Orbit/
├── Backend/ # Core logic & data sources
│ ├── config.py # Shared config & history management
│ ├── digest_generator.py # LLM-powered digest creation
│ ├── emailer.py # Email, Slack, Discord notifications
│ ├── devto_fetcher.py # Dev.to API fetcher
│ ├── gh_trending_fetcher.py # GitHub Trending scraper
│ ├── github_fetcher.py # GitHub repo activity (commits, PRs, issues)
│ ├── hf_fetcher.py # HuggingFace papers & models
│ ├── reddit_fetcher.py # Reddit hot posts fetcher
│ ├── scheduler.py # Daily schedule runner (background)
│ └── sources/ # Plugin architecture
│ ├── base.py # SourcePlugin abstract base class
│ ├── github_source.py
│ ├── hf_source.py
│ ├── reddit_source.py
│ ├── devto_source.py
│ └── gh_trending_source.py
├── Frontend/ # GUI
│ ├── GUI.py # PyQt6 main window, tray, preview, first-run wizard
│ └── Data/
│ ├── config.json
│ └── history.json
├── tests/ # pytest test suite
│ ├── conftest.py
│ ├── test_config.py
│ ├── test_hf_fetcher.py
│ ├── test_reddit_fetcher.py
│ ├── test_devto_fetcher.py
│ ├── test_digest_generator.py
│ └── test_emailer.py
├── Orbit.spec # PyInstaller build spec
├── main.py # Entry point
└── pyproject.toml
- Fork the repository
- Create your feature branch (
git checkout -b feature/fooBar) - Commit your changes (
git commit -m 'Add fooBar') - Push to the branch (
git push origin feature/fooBar) - Open a pull request
Use the issue tracker for:
- Bug reports (use the bug template)
- Feature requests (use the feature template)
Acknowledgements
Built with ❤️ using PyQt6, Groq, LiteLLM, and many other open-source libraries. Special thanks to the maintainers of these projects.