Skip to content

About

Map your GitHub achievement badges, see the next tier, and get one concrete next step. Browser app plus stdlib CLI; no token.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Badge Hunt mark

Badge Hunt

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.

Live site GPL-3.0 license CI status GitHub stars No account

If Badge Hunt saves you a tab, a star helps the next person find it. Star the repo →


Badge Hunt desktop preview

Badge Hunt on a phone

What it does

  • 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.

Quick start

git clone https://github.com/lab1207/badge-hunt.git
cd badge-hunt
python -m http.server 4301

Open 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

CLI

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.

How the data works

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.

Why the badge wall is fragile

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:

  1. Pull Shark and Starstruck are inferred from the public counts and labelled Likely.
  2. The other badges are marked Check profile rather than guessed.
  3. You can open the Paste your profile HTML panel and paste the source of your achievements tab. It is parsed locally.
  4. 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 rules

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.

Star button

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.

Structure

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

Deploy

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 main

For 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.

Privacy

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.

Contributing

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.

License

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.

Star this repository

About

Map your GitHub achievement badges, see the next tier, and get one concrete next step. Browser app plus stdlib CLI; no token.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages