Your GitHub badges, mapped.
See which achievements you have earned, and the smallest useful next step for the rest.
A browser-only mapper for public GitHub profiles, with progress tiers, a field guide, and a standalone CLI.
No account, no token, no backend.
If Badge Hunt saves you a tab, a star helps the next person find it. Star the repo →
- Shows the seven GitHub achievements on a single wall: Quickdraw, YOLO, Pull Shark, Pair Extraordinaire, Galaxy Brain, Starstruck, and Public Sponsor.
- Reads the public achievements tab through a fallback reader and marks each badge Earned, Likely, or Not detected.
- Infers Pull Shark and Starstruck from public counts when the wall cannot be read — and says that it is inferring.
- Shows progress bars with the documented tier thresholds and the gap to the next tier.
- Generates a short, specific next-step list instead of generic "engage with the community" advice.
- Copies a Markdown report you can keep in a README or issue.
- Accepts pasted profile HTML when every public reader is blocked; parsing happens in your browser.
- Ships a reusable star button in five sizes:
xs,sm,md,lg,xl.
There is also a CLI for people who would rather stay in the terminal.
git clone https://github.com/lab1207/badge-hunt.git
cd badge-hunt
python -m http.server 4301Open http://localhost:4301. There is no install step, build step, or package manager. npx serve . works too.
Try a profile from the page, or open a pre-filled URL:
http://localhost:4301/?u=octocat
The CLI reads the achievements page directly and uses the GitHub REST API for counts. It needs Python 3.10+ and works without gh, though an authenticated gh CLI gives you a higher rate limit.
python badge_hunt.py octocat
python badge_hunt.py octocat --json# badge-hunt: octocat
Earned: Galaxy Brain, Pair Extraordinaire, Pull Shark, Quickdraw
Merged PRs: 33 (Pull Shark: Bronze)
Own-repo stars: 7
Top repos: AI-Website-Builder (6), the-age-date (1), smaa (0)
Next:
- [x] Quickdraw
- [ ] YOLO: Merge a PR on your own repo with no review.
- [x] Pull Shark (x2)
- [x] Pair Extraordinaire
- [x] Galaxy Brain
- [ ] Starstruck: Earn stars on your own repos (first tier ~16).
- [ ] Public Sponsor: Sponsor an open-source developer.
Use --json for the complete report, including the raw tier map and counts.
| Piece | Source | Notes |
|---|---|---|
| Profile, repos, followers | api.github.com/users/{user} and /users/{user}/repos |
Public, unauthenticated |
| Merged pull requests | api.github.com/search/issues?q=author:{user}+type:pr |
Counts the first 300 results, then marks the count 300+ |
| Own-repo stars | Sum of stargazers_count for owned, non-fork repos |
Up to 200 repositories |
| Badge wall | github.com/{user}?tab=achievements |
No official API; read through a fallback chain or pasted HTML |
The browser app has no token input on purpose. Unauthenticated GitHub API limits are 60 core requests per hour and 10 search requests per minute per IP. If the limit is hit, the app says so and keeps the counts it already has. Nothing is stored on a server.
GitHub does not expose achievements through the REST or GraphQL API. The app tries public readers, but those services are often rate-limited or blocked. When that happens:
- Pull Shark and Starstruck are inferred from the public counts and labelled Likely.
- The other badges are marked Check profile rather than guessed.
- You can open the Paste your profile HTML panel and paste the source of your achievements tab. It is parsed locally.
- The CLI reads the page directly, which is more reliable than a browser proxy.
This is a limitation of the platform, not a hidden paywall.
| Badge | How to earn it | Tiers |
|---|---|---|
| Quickdraw | Close an issue or PR within 5 minutes | 1 |
| YOLO | Merge your own PR without review | 1 |
| Pull Shark | Merge pull requests | 2 / 16 / 128 / 1024 |
| Pair Extraordinaire | Merge a PR with a Co-authored-by trailer |
1 / 2 / 4 / 8 (approximate) |
| Galaxy Brain | Get a discussion answer accepted | 1 / 2 / 4 / 8 (approximate) |
| Starstruck | Earn stars on owned repositories | 16 / 128 / 512 / 4096 |
| Public Sponsor | Sponsor a developer through GitHub Sponsors | 1 |
GitHub has changed thresholds before. Where the exact rule is not published, the UI marks it approximate instead of presenting a made-up number as fact.
The same component is used at five scales, from a tiny legal-footer control to the large footer call to action.
<a class="star-btn" data-size="xs">…</a>
<a class="star-btn" data-size="sm">…</a>
<a class="star-btn" data-size="md">…</a>
<a class="star-btn" data-size="lg">…</a>
<a class="star-btn" data-size="xl">…</a>Counts come from the public GitHub API and are cached in sessionStorage for ten minutes. If GitHub is unavailable, the link still works and the number is omitted. No fake counts.
index.html hero, form, results shell, field guide, footer
styles.css design tokens, seal wall, progress cards, responsive layout
app.js GitHub API, badge inference, wall parsing, rendering
badge_hunt.py standalone CLI (stdlib only)
.github/workflows/ CLI test suite
Production is served by Cloudflare Pages at https://badge-hunt.pages.dev/. The site is static:
npx wrangler pages deploy . --project-name badge-hunt --branch mainFor a fresh account, create the project once with npx wrangler pages project create badge-hunt --production-branch main. Any static host works too; the output directory is / and the entry point is index.html.
No analytics, no cookies, no account, and no server. The app sends the username you type to the public GitHub API, and optionally to a public reader when trying to read the achievements tab. A pasted profile HTML string never leaves the browser. Star counts are public.
Small, scoped pull requests are welcome. If you change the badge rules, include a source. If you change the layout, include desktop and mobile screenshots. Keep the CLI stdlib-only.
GNU General Public License v3.0 or later. Use it, fork it, ship it.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. It comes with no warranty. If you distribute a modified version, you must make the corresponding source available under the same license.
If Badge Hunt saved you a tab, star the repo so the next person finds it.

