Explore any GitHub profile: stats, languages, every repository, and head-to-head comparisons.
No sign-in, no backend. Just the public GitHub API.
Total stars and forks, account age, a language breakdown, the most-starred repositories, and a chart of repos created per year.
All public repos (up to 500, not just the first 30), with:
- text search across names, descriptions and topics
- sort by stars, recently updated, forks or name
- a language filter
- toggles to hide forks and archived repos
Filters are kept in the URL, so you can share an exact view, e.g. /user/bishalde?tab=repositories&lang=JavaScript.
/compare/bishalde/torvalds puts you head to head with the creator of Linux, or compares any two profiles: followers, stars, forks, repos, gists and years active, with each metric's leader highlighted, plus a side-by-side language mix. One click swaps the two users.
- Shareable links for every profile, tab and filter.
- Recent searches, shown as chips on the home page and in the compare picker.
- Light and dark themes. The default follows your OS, and a manual choice is remembered.
- Keyboard search. Press
/or⌘K/Ctrl Kto jump to the search box. You can also paste a fullgithub.com/...URL. - Responsive, down to phone width.
Unauthenticated requests are limited to 60 an hour per IP address. One profile takes about 2–6 requests. GitHubCrawler keeps within the limit by:
- caching responses for the browser session, so going back or reloading doesn't use requests
- showing the remaining quota in the footer
- explaining the limit when it's reached and showing when it resets
To raise the limit to 5,000 an hour, open ⚙️ API settings and paste a fine-grained personal access token. It needs no permissions, because everything the app reads is public. The token is stored only in your browser's localStorage and is sent only to api.github.com.
Requires Node.js 22.12 or newer.
npm install
npm run dev # http://localhost:3000| Script | What it does |
|---|---|
npm run dev |
Start the dev server with hot reload |
npm test |
Run unit and component tests (Vitest + Testing Library) |
npm run lint |
Lint with ESLint |
npm run build |
Type-check and build to dist/ |
npm run preview |
Serve the production build locally |
- UI: React 19, TypeScript, Tailwind CSS v4, lucide-react icons, Recharts
- Routing and data: React Router 7, TanStack Query 5 (cache persisted to
sessionStorage) - Tooling: Vite 8, Vitest, Testing Library, ESLint 9
src/
app/ providers, router, layout (header and footer)
pages/ HomePage, UserPage, ComparePage, NotFoundPage
features/
search/ search bar, recent searches
profile/ header, stat tiles, charts, repo card
repos/ repo explorer, filter and sort logic
compare/ compare picker, metric bars, language mix
settings/ API token dialog, theme toggle
components/ shared UI primitives (Button, Card, Tabs, Dialog, …)
lib/ GitHub API client, types, stats, formatting, storage
hooks/ useUser, useRepos, useRateLimit, useTheme
It's a static single-page app. Build with npm run build and serve dist/.
vercel.json already rewrites every path to index.html, so deep links like /user/bishalde work on Vercel. On other hosts (Netlify, Cloudflare Pages, nginx), configure an equivalent fallback to index.html.
Built by Bishal De.




