Skip to content

rzzabakir/RepoPulse

Repository files navigation

RepoPulse

A GitHub Trending alternative that hides the hype. Discover and rank emerging GitHub repositories by momentum, freshness, and hype risk — built for horizon scanning in RegTech/SupTech and any domain you scout.

CI License: MIT

RepoPulse is built for technology horizon scanning in RegTech and SupTech: compliance analysts, supervisors, and technical scouts tracking emerging tooling for AML, regulatory reporting, transaction monitoring, and supervisory work — anyone who regularly asks: "What new projects in this space are gaining real traction, and which ones are just already-famous noise?" It surfaces active, non-mainstream repositories before they become obvious, ranked by momentum rather than raw star count. The engine is domain-agnostic, so the same workflow covers any topic you scout.

It searches recently updated GitHub repositories by topic, scores repository momentum, hides high-hype/mainstream projects by default, and can add short Groq-powered explanations for why each repo may matter in your domain.

python main.py --domain "regtech" --no-explain

No LLM key is required for the basic workflow.

How It Compares

GitHub Trending star-history RepoPulse
Hides already-mainstream repos ✅ by default
Momentum score (velocity + forks + issues + recency)
Per-domain / per-topic scouting partial
Runs from a fresh clone, no API key required

Why I Built It

I wanted to track what was actually growing in regtech and suptech — niches where the genuinely interesting projects rarely surface on GitHub Trending until they are already crowded. The goal is to catch a project early, while it is still small but accelerating, and be among the first to adopt or contribute to something that could go viral. RepoPulse generalizes that idea to any topic you care about.

Why Use It?

  • Avoid obvious results: high-hype repos such as already-mainstream projects are hidden by default.
  • Rank by momentum: combines star velocity, recency, fork ratio, and issue activity.
  • Stay fast: GitHub results are cached for 6 hours; AI explanations are cached per repo/domain.
  • Use CLI or browser: run it in a terminal or launch the Streamlit UI.
  • Export results: download or print JSON for later review.

Visual Proof

RepoPulse can be used from the browser with Streamlit.

RepoPulse home screen

RepoPulse results view

RepoPulse results card view

RepoPulse repository detail view

What It Is Not

RepoPulse is not a perfect trending algorithm. GitHub's public search API does not provide full historical star timelines, so "hype" detection uses practical heuristics: repo age, star count, velocity estimate, missing metadata, and engagement proxies. Candidate discovery uses recently updated topic matches, then RepoPulse ranks that pool locally.

Use it as a scouting shortlist generator, not as a source of truth.

Quick Start

cd RepoPulse
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.lock
copy .env.example .env
python main.py --domain "regtech" --no-explain

On macOS/Linux, activate the virtual environment with:

source .venv/bin/activate

Environment

Create .env from .env.example.

GITHUB_TOKEN=
GROQ_API_KEY=
  • GITHUB_TOKEN is optional but recommended. Without it, GitHub limits unauthenticated search requests more aggressively.
  • GROQ_API_KEY is optional unless you want AI explanations. Use --no-explain to skip LLM calls.

For public repository search, the GitHub token does not need special scopes.

Troubleshooting

Symptom Cause Fix
GitHub rate limit hit. Too many unauthenticated requests (10/min). Add GITHUB_TOKEN to .env.
GitHub token is invalid or expired. Bad or revoked GITHUB_TOKEN. Regenerate the token and update .env.
No repositories found for that domain/date range. The domain is not an exact GitHub topic, or the window is too narrow. Try a broader term, increase --days, or rely on the keyword fallback.
No non-high-hype repositories found. Everything in the pool was flagged as mainstream/high-hype. Broaden the domain/date range, or pass --include-high-hype.
GROQ_API_KEY not set in .env. Explanations requested without a key. Pass --no-explain, or set GROQ_API_KEY in .env.
Groq rate limit hit. / request timed out Groq API throttling or slow response. Wait and retry, or run with --no-explain.

Results are cached for 6 hours in cache/. Delete that folder to force a fresh fetch.

CLI Usage

# Find non-high-hype repos for a topic (the use case RepoPulse was built for)
python main.py --domain "regtech" --no-explain

# Scout an adjacent niche over a longer window
python main.py --domain "suptech" --days 60 --top 20 --no-explain

# Include mainstream/high-hype repos for comparison
python main.py --domain "machine-learning" --include-high-hype --no-explain

# Export JSON
python main.py --domain "AI infrastructure" --days 60 --top 25 --no-explain --output json

If you install the project in editable mode, you can use the repopulse command:

pip install -e .
repopulse --domain "regtech" --no-explain

CLI Output

RepoPulse CLI output

Streamlit UI

streamlit run app.py

The UI lets you choose a topic, date window, result count, whether to include high-hype repos, and whether to request Groq explanations. Results appear as scored cards with JSON export.

Scoring

Signal Weight Meaning
Star velocity 45% Current stars normalized by age-adjusted repository lifetime
Fork ratio 25% Forks-to-stars ratio as a rough usage signal
Issue activity 20% Open issues as a rough community activity signal
Recency 10% How recently the repo was pushed

Recency is intentionally weighted lower because the --days option already filters for recently pushed repositories; the score uses recency only as an activity-confidence signal.

Star velocity uses a soft age cap: repositories older than 180 days still get older, but extra age counts at 25% weight. This keeps older projects from being overly punished by creation date while avoiding a hard reset of their lifetime history.

RepoPulse does not use GitHub stargazer timestamp history or local star snapshots. This keeps the tool usable from a fresh clone and avoids extra API usage, but star velocity remains an estimate rather than true recent star gain.

Hype Filtering

RepoPulse flags high-hype repositories when they are likely to be poor "emerging project" candidates:

  • already mainstream, currently over 5,000 stars
  • too new to score credibly
  • missing basic repo metadata
  • showing an unusually sharp early spike

High-hype repos are hidden by default in both the CLI and UI. Use --include-high-hype or the UI checkbox to include them.

Output Shape

Each result includes:

  • repository name and URL
  • stars, forks, open issues, language, topics, and description
  • momentum_score
  • score breakdown
  • hype_risk and hype_reasons
  • optional AI explanation

JSON output is intended for automation:

python main.py --domain "webassembly" --no-explain --output json

Example JSON Output

See a real exported result with Groq explanations enabled here:

docs/examples/regtech-output.json

Project Structure

RepoPulse/
├── pyproject.toml      # Package metadata and repopulse console command
├── app.py              # Streamlit UI (layout and behavior)
├── styles.py           # Inline SVG icons and results-page CSS
├── sidebar.py          # Streamlit sidebar controls and styling
├── main.py             # CLI entry point and ranking orchestration
├── config.py           # Environment variables and scoring constants
├── modules/
│   ├── fetcher.py      # GitHub Search API and disk cache
│   ├── scorer.py       # Momentum scoring
│   ├── filter.py       # Hype-risk heuristics
│   ├── explainer.py    # Groq explanations
│   └── display.py      # Rich terminal table
├── tests/              # Pytest test suite
│   ├── test_fetcher.py
│   ├── test_scorer.py
│   ├── test_filter.py
│   ├── test_main.py
│   └── test_explainer.py
├── .env.example
├── CONTRIBUTING.md
├── CHANGELOG.md
└── LICENSE

Development

pip install -r requirements.txt
pytest -q
python main.py --domain "regtech" --no-explain

For a byte-for-byte reproducible environment (all transitive dependencies pinned), install from the lockfile instead:

pip install -r requirements.lock

requirements.txt holds the direct, human-maintained dependencies; requirements.lock is the fully resolved set used by CI and for reproducible installs.

Do not commit .env, cache/, __pycache__/, .pytest_cache/, or local demo artifacts.

Roadmap

  • Optional local star-history snapshots for true (rather than estimated) star velocity
  • Smarter domain matching: keyword + topic fallback for domains that are not exact GitHub topics
  • Export shortlists to CSV and Markdown, not just JSON
  • Saved searches and watchlists in the Streamlit UI
  • Domain presets for niches like regtech and suptech

See open issues for the current backlog, and CHANGELOG.md for shipped changes.

Contributing

Contributions are welcome. Start with the good first issues, and see CONTRIBUTING.md for local setup and the pull request checklist.

License

MIT. See LICENSE.

About

Track emerging open-source projects by topic — momentum ranking and hype-risk flags. Built for RegTech/SupTech horizon scanning.

Topics

Resources

License

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages