Interactive, static GitHub Pages app for exploring a GitHub starred-repository collection with search, category filters, presets, CSV export, and a responsive force-directed graph.
- Total repositories: 1,574 in the checked-in dataset
- Last synced: May 5, 2026 19:23 UTC
- Source: GitHub Actions generated JSON
- Live GitHub count at validation time: 1,574, which GitHub rounds as
1.6k - Deployment target: GitHub Pages
The app shows the exact checked-in dataset count and marks data as stale if the sync timestamp is older than 24 hours.
- D3 force-directed graph with category-aware clustering and cluster labels
- Default
Sampleview with a small balanced set to keep first load easy to scan, especially on phones - Presets for
Sample,All,Curated,Popular,Learning, andAI - Real-time search by name, owner, description, topics, and language
- Compact Top Matches panel for scannable search results
- Category, language, and star-count filters
- Exact count display, sync status, last synced date, and stale-data warning
- CSV export of repository names, URLs, categories, secondary categories, topics, stars, forks, and sync timestamp
- Mobile-responsive panels and touch-friendly graph interactions
- GitHub Pages friendly: static HTML, CSS, JavaScript, and JSON only
The generated data keeps the original category field for compatibility and adds a more external-user-friendly display taxonomy:
| Display Category | Count |
|---|---|
| AI Agents | 263 |
| Frontend | 211 |
| Docs/Reference | 189 |
| Backend/API | 128 |
| AI Models | 105 |
| AI Learning | 82 |
| Other | 78 |
| Python | 77 |
| Developer Tools | 77 |
| RAG/Search | 71 |
| Full-stack Frameworks | 44 |
| Career/Interview | 41 |
| LLM Apps | 38 |
| Databases | 34 |
| Systems/Low-level | 33 |
Repositories can also include secondaryCategories so visitors can understand cross-cutting projects without breaking older consumers of data/repositories.json.
starred-repos-graph/
├── index.html
├── app.js
├── data/
│ └── repositories.json
├── scripts/
│ ├── fetch-data.js
│ ├── clean-data.js
│ └── validate-data.js
├── tests/
│ └── e2e/
└── .github/workflows/
└── update-data.yml
python3 -m http.server 8080Then open http://localhost:8080/.
Run validation:
node --check app.js
node --check scripts/fetch-data.js
node --check scripts/validate-data.js
node scripts/validate-data.jsRun browser tests:
cd tests
npm install
npm test -- --project=chromiumThe scheduled GitHub Actions workflow fetches starred repositories, categorizes them, validates the JSON, commits data changes, and deploys the static app to GitHub Pages.
For a different account, set GITHUB_USERNAME in the workflow or run locally:
GITHUB_USERNAME=your-github-username node scripts/fetch-data.js > data/repositories.json
node scripts/validate-data.jsThe app can be configured from the small config object in app.js for username, repository URL, workflow URL, and stale-data threshold.
The validation script checks:
- JSON shape and required repository fields
totalCountagainst the actual repository array length- dataset age and stale-data threshold
- category distribution and
Otherratio - secondary category presence
- live GitHub starred count within a small tolerance
This keeps the project static and GitHub Pages compatible while making count mismatches visible before deployment.