Skip to content

Latest commit

ย 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ›ฐ๏ธ DevRadar โ€” GitHub Developer Activity Radar & Trending Monitor

Python PyQt6 License Platform GitHub Stars

English | ไธญๆ–‡็‰ˆ


DevRadar is a desktop application that turns GitHub into your personal developer radar. It monitors trending repositories, tracks developer activity in real time, and generates insightful reports โ€” all from a sleek dark-themed GUI, no browser needed.

Whether you're hunting for the next viral open-source project, keeping tabs on what your favorite developers are committing, or building a personal tech briefing, DevRadar puts the pulse of GitHub on your desktop.


โœจ Features

# Feature Description
๐Ÿ”ฅ GitHub Trending Scrape and browse trending repos by language (daily / weekly / monthly) with automatic failover between HTML scraping and a fallback API
๐Ÿ” Global Search Search GitHub repositories with filters (language, stars range, sort order); rate-limit aware with exponential backoff retry
๐ŸŽฏ Targeted Monitoring Monitor any GitHub user or repository for real-time events โ€” pushes, releases, issues, PRs, stars, forks, and more
๐Ÿ“ก Live Event Stream Real-time event feed with importance-based highlighting (gold for releases/PRs, cyan for issues, gray for pushes) and desktop notifications
โญ Star Snapshot & Chart Automatic periodic star-count collection; visualize growth trends with matplotlib-powered dark-theme charts
๐Ÿ“Š Project Insight Deep-dive into any repo: star history, health metrics (open issues, forks, watchers, license), top contributors, and topic tags
๐Ÿ“‹ Personal Tech Briefing One-click Markdown report generation covering your monitored repos, trending top 5, bookmarks, and search history
๐Ÿ”– Local Bookmarks Save interesting repositories locally with notes, searchable offline
๐Ÿ›ก Full Fault Tolerance Rate-limit warnings, auto-reconnect with exponential backoff, graceful degradation, and comprehensive logging

๐Ÿ–ผ๏ธ Screenshots

[ Coming soon โ€” see the Chinese version for a preview image ]

๐Ÿ—๏ธ Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        DevRadar Desktop App                         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                       โ”‚                       โ”‚                     โ”‚
โ”‚   ๐ŸŽจ GUI Layer        โ”‚   ๐Ÿ”ง Common Layer     โ”‚   ๐Ÿ–ฅ Server Layer    โ”‚
โ”‚   (PyQt6)             โ”‚                       โ”‚                     โ”‚
โ”‚                       โ”‚                       โ”‚                     โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ Search Panel     โ”‚  โ”‚  โ”‚ Config Manager  โ”‚  โ”‚  โ”‚ GitHub API      โ”‚ โ”‚
โ”‚  โ”‚ Trending Panel   โ”‚  โ”‚  โ”‚ (env โ†’ JSON)    โ”‚  โ”‚  โ”‚ (REST, caching) โ”‚ โ”‚
โ”‚  โ”‚ Monitor Panel    โ”‚  โ”‚  โ”‚ Logger          โ”‚  โ”‚  โ”‚ Trending Scraperโ”‚ โ”‚
โ”‚  โ”‚ Stream Panel     โ”‚  โ”‚  โ”‚ (Rotating file) โ”‚  โ”‚  โ”‚ (HTML + API)    โ”‚ โ”‚
โ”‚  โ”‚ Insight Dialog   โ”‚  โ”‚  โ”‚ Protocol        โ”‚  โ”‚  โ”‚ DB Manager      โ”‚ โ”‚
โ”‚  โ”‚ Report Generator โ”‚  โ”‚  โ”‚ (JSON Socket)   โ”‚  โ”‚  โ”‚ (SQLite, WAL)   โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚  โ”‚ Monitor Sched.  โ”‚ โ”‚
โ”‚           โ”‚            โ”‚                       โ”‚  โ”‚ Snapshot Mgr    โ”‚ โ”‚
โ”‚           โ–ผ            โ”‚                       โ”‚  โ”‚ Report Gen.     โ”‚ โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚                       โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚  โ”‚ Socket Client    โ”‚  โ”‚                       โ”‚           โ–ฒ          โ”‚
โ”‚  โ”‚ (auto-reconnect) โ”‚  โ”‚                       โ”‚           โ”‚          โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚                       โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚           โ”‚            โ”‚                       โ”‚  โ”‚  TCP Socket     โ”‚ โ”‚
โ”‚           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”ค  (JSON / \n)    โ”‚ โ”‚
โ”‚                        โ”‚                       โ”‚  โ”‚  127.0.0.1:9669 โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
                                                     โ”‚                  โ”‚
                                              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”           โ”‚
                                              โ”‚   SQLite    โ”‚           โ”‚
                                              โ”‚  devradar.dbโ”‚           โ”‚
                                              โ”‚  6 tables   โ”‚           โ”‚
                                              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Communication Protocol

The client and server communicate over TCP Socket with JSON-delimited messages (\n-terminated). The protocol supports:

  • Commands: add/remove/list monitors, search repos, fetch trending, generate reports, manage bookmarks
  • Push events: real-time event delivery from server to client
  • Heartbeat: keep-alive every 30 seconds
  • Status: rate-limit warnings, connection state

๐Ÿš€ Quick Start

Prerequisites

Installation

# 1. Clone the repository
git clone https://github.com/TrueFurina/DevRadar-GitHub-Trending-Monitor.git
cd DevRadar-GitHub-Trending-Monitor

# 2. Install dependencies
pip install -r requirements.txt

# 3. (Optional) Configure your GitHub token
#    Create data/config.json or set the GITHUB_TOKEN environment variable
echo '{"github_token": "ghp_xxxxxxxxxxxx"}' > data/config.json

Run

python run.py

Or double-click ๅฏๅŠจDevRadar.bat on Windows.


โš™๏ธ Configuration

Configuration is loaded with the following priority: Environment variable > config.json > Defaults.

config.json (optional, created automatically)

Key Default Description
github_token "" GitHub Personal Access Token
poll_interval_seconds 300 Monitor polling interval (5 min)
trending_refresh_seconds 600 Trending auto-refresh interval (10 min)
snapshot_interval_hours 6 Star snapshot interval
report_period weekly Default report period
default_language python Default trending language
notification_enabled true Desktop notifications
max_history_days 30 Event retention period
socket_host 127.0.0.1 Server bind address
socket_port 9669 Server port
trending_source html Trending source: html or api

Environment Variable

# Windows
set GITHUB_TOKEN=ghp_xxxxxxxxxxxx

# Linux / macOS
export GITHUB_TOKEN=ghp_xxxxxxxxxxxx

๐Ÿ“– Usage Guide

First Launch

  1. Start the app โ†’ python run.py
  2. Configure Token โ†’ If not set, press Enter to continue (limited functionality)
  3. Browse Trending โ†’ Select language/period in the Trending panel, click Refresh
  4. Search Projects โ†’ Type in the search bar, use filters to narrow results
  5. Add Bookmarks โ†’ Right-click on any result โ†’ Bookmark
  6. Add Monitor โ†’ In the Monitor panel, enter a username (e.g., torvalds) or repo (torvalds/linux)
  7. Generate Report โ†’ Menu File โ†’ Generate Report or Ctrl+R

Key Operations

Action Method
Search repositories Search bar + Enter
Browse trending Trending panel โ†’ select language/period โ†’ Refresh
Add monitor Monitor panel โ†’ enter username or repo
Edit filter rules Monitor list โ†’ right-click โ†’ Edit filters
Bookmark a repo Search/Trending result โ†’ right-click โ†’ Bookmark
Generate report Menu File โ†’ Generate Report (Ctrl+R)
View insight Trending list โ†’ right-click โ†’ View Insight
Open in browser Double-click any repo, or right-click โ†’ Open in Browser

๐Ÿ—„๏ธ Database Design

The application uses SQLite (data/devradar.db, WAL mode) with 6 tables:

monitors

Field Type Description
id INTEGER PK Primary key
target TEXT UNIQUE Target (username or owner/repo)
type TEXT user or repo
filters TEXT (JSON) Filter rules (event types, keywords)
added_at TIMESTAMP Created timestamp

events

Field Type Description
id INTEGER PK Primary key
monitor_id INTEGER FK References monitors
event_type TEXT GitHub event type
payload TEXT (JSON) Full event payload
repo_name TEXT Repository name
actor TEXT Event actor
url TEXT Event URL
received_at TIMESTAMP Received timestamp

trending_cache

Field Type Description
id INTEGER PK Primary key
language TEXT Programming language
since TEXT daily / weekly / monthly
repo_id TEXT Repository identifier
repo_full_name TEXT Full repository name
data TEXT (JSON) Full data payload
fetched_at TIMESTAMP Fetch timestamp

star_snapshots

Field Type Description
id INTEGER PK Primary key
repo_full_name TEXT Repository name
star_count INTEGER Star count
recorded_at TIMESTAMP Recording timestamp

bookmarks

Field Type Description
id INTEGER PK Primary key
repo_full_name TEXT UNIQUE Repository name
repo_url TEXT Repository URL
description TEXT Description
language TEXT Language
stars INTEGER Star count
note TEXT Personal note
saved_at TIMESTAMP Save timestamp

search_history

Field Type Description
id INTEGER PK Primary key
query TEXT Search query
searched_at TIMESTAMP Search timestamp

๐Ÿ›ก๏ธ Fault Tolerance

Scenario Handling
API Rate Limit Check X-RateLimit-Remaining; orange warning at < 50, pause polling at < 20
Network Timeout timeout=15s, auto-retry 3 times with exponential backoff (1.5x)
Invalid Token Clear 401 error message with guidance
Scraper Failure Auto-fallback to backup API when HTML parsing returns empty
Socket Disconnect Client auto-reconnects with exponential backoff (1s โ†’ 30s), shows reconnection status
Database Error All operations wrapped in try-except, logged, with user-friendly messages
Event Cleanup Auto-purge events older than 30 days every 50 inserts to prevent DB bloat
Empty Chart Data Shows "Data collecting (X/7 days recorded)" instead of crashing
Invalid Monitor Target API validation before adding; 404 targets are rejected

๐Ÿงฐ Tech Stack

Component Technology
GUI Framework PyQt6
Network TCP Socket (JSON protocol)
Database SQLite (WAL mode, thread-safe)
Web Scraping BeautifulSoup4
HTTP Client Requests (retry adapter, connection pooling)
Charts matplotlib (dark theme)
Logging RotatingFileHandler (5MB ร— 3)
Packaging PyInstaller (optional)

๐Ÿค Contributing

Contributions are welcome! Here's how to get started:

  1. Fork the repository
  2. Create a new branch: git checkout -b feature/your-feature-name
  3. Make your changes
  4. Run the application and verify it works
  5. Submit a Pull Request

Development Setup

# Clone your fork
git clone https://github.com/YOUR_USERNAME/DevRadar-GitHub-Trending-Monitor.git
cd DevRadar-GitHub-Trending-Monitor

# Install dev dependencies
pip install -r requirements.txt

# Run in development mode
python run.py

๐Ÿ“ฆ Packaging as EXE

pip install pyinstaller
pyinstaller --onefile --windowed run.py --name DevRadar

Make sure data/ directory is placed alongside the executable.


โ“ FAQ

Q: Can't connect to server after launch? A: Check if port 9669 is in use. If so, change socket_port in data/config.json and restart.

Q: Search returns no results? A: The search API needs network access. Check the status bar for remaining API calls. If 0, you've hit the rate limit.

Q: Trending data is empty? A: The scraper fetches from the GitHub Trending page. If the page changes, the system automatically falls back to a backup API.

Q: Too many notifications? A: Go to Tools โ†’ Settings and uncheck "Enable notifications".

Q: Where is the database file? A: data/devradar.db. Deleting it will lose all monitors and bookmarks; the system will recreate it automatically.


๐Ÿ“„ License

This project is licensed under the MIT License โ€” see the LICENSE file for details.


๐Ÿ™ Acknowledgments

Built with โค๏ธ using Python, PyQt6, and the GitHub REST API.

DevRadar โ€” Your personal window into the open-source universe.


License & Usage Notice

Source-Available ยท All Rights Reserved

This project is source-available and all rights are reserved by the author. The code is provided for viewing and evaluation purposes only โ€” access does not grant any right to copy, modify, redistribute, use commercially, or create derivative works. Unauthorized reuse may carry legal risk. Contact the author for explicit written permission before any other use.

ๆœฌไป“ๅบ“ไธบใ€Œๆบ็ ๅฏๆŸฅใ€ๆƒๅˆฉไฟ็•™ใ€้กน็›ฎ๏ผˆsource-available / all-rights-reserved๏ผ‰ใ€‚ไปฃ็ ไป…ไพ›ๆŸฅ็œ‹ไธŽ่ฏ„ไผฐ๏ผŒๆœชๆŽˆๆƒไปปไฝ•ๅคๅˆถใ€ๅ†ๅˆ†ๅ‘ใ€ไฟฎๆ”นใ€ๅ•†็”จๆˆ–่ก็”Ÿๅˆ›ไฝœใ€‚ๆ“…่‡ชๅ€Ÿ็”จไปฃ็ ๅญ˜ๅœจๆณ•ๅพ‹้ฃŽ้™ฉ๏ผ›ๅฆ‚ๆœ‰้œ€่ฆ่ฏทๅ…ˆ่”็ณปไฝœ่€…่Žทๅ–ๆ˜Ž็กฎไนฆ้ข่ฎธๅฏใ€‚

About

๐Ÿ›ฐ๏ธ GitHub developer activity radar & trending monitor โ€” PyQt6 desktop app tracking repos, stars, and trending signals

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages