Interactive treemap of 60k+ GitHub repositories with daily momentum, curated discovery, and language-level exploration.
Live site: https://ustars.dev
- Projects tab: default repo map, with curated and guide-style repositories filtered out
- Daily tab: highlights momentum using star-growth deltas from the latest snapshot
- Awesome tab: brings back the filtered awesome / guide / tutorial / interview style repositories as a dedicated view
- Language drill-down: click any language block to zoom into that language only
- Hover metadata: repo created/updated dates are loaded from a static index instead of per-hover API calls
- Search: matches repository name, description, and language labels across the active view
The app is driven by a single snapshot file:
data/repos.json— main repo datasetpublic/repo-meta.json— lightweight hover metadata index
Each repo row currently stores:
fullNamestarsforkslangIdxdescriptiongrowthcreatedAtupdatedAt
Use the refresh script:
npm run refresh:growthWhat it does:
- refreshes stars / forks / timestamps from GitHub
- computes
growthagainst the previous local snapshot - writes a resumable progress file during long runs
- snapshots the previous dataset into
data/snapshots/ - regenerates
public/repo-meta.json
npm install
npm run devOpen:
http://localhost:3000
npm run buildThis project is configured as a static export.
The current deployment path is Cloudflare Pages:
npm run build
npx wrangler pages deploy out --project-name github-treemap --branch mainapp/ Next.js App Router pages
components/ treemap canvas, header, tooltip, panel
data/ repo snapshot data
lib/ grouping, filtering, classifier, metrics
public/repo-meta.json static hover metadata index
scripts/ data refresh scripts- The project intentionally separates the main treemap data from hover metadata to reduce runtime latency and avoid per-hover server/API requests.
- Curated repositories are filtered at the data layer, not only in the UI, so homepage / language pages / daily view stay consistent.

