Free Scout Score badges: shields.io for GitHub investing taste.
I shipped two free SVG badges for any GitHub README. One renders your live Scout Score (0-100) from your starring history. The other renders the live commit-momentum tier of any tracked repo. Same shields.io look as Codecov / WakaTime, auto-updates, no signup, no telemetry.
Key Takeaway
Two endpoints — /api/badge/scout/{user}/svg and /api/badge/momentum/{org}/{repo}/svg — render shields.io-style SVG badges from the same Scout Score and commit-velocity primitives that already power /receipts and /predict. Each render goes through GitHub's camo CDN as one impression for our domain. Each click lands on a branded GDF page. Builder UI at /badge-builder.
Two endpoints went live tonight. Both return SVG. Both are free. Both are autonomous traffic compounders.
```markdown   ```
That is the whole product. Paste those lines into any README, replace the username and the org/repo, you have a live shields.io-style badge that auto-updates whenever your starring history grows or the tracked repo's commit velocity moves a tier. Builder UI with copy-paste markdown / HTML / BBCode at signals.gitdealflow.com/badge-builder.
Why this is the right move right now#
We have an MCP server, a paper on SSRN, a Wikidata entity, twenty-plus blog posts, three working AI-discovery surfaces (llms.txt, agent-card.json, ai-plugin.json), and dozens of channel listings. Most of those are read-once. Someone discovers us, decides whether to subscribe, and either bookmarks or moves on.
A README badge inverts that. The badge gets pasted once and then renders every time the host page loads — every issue triage, every PR review, every visitor to the repo. Each render is one impression for our domain through GitHub's camo proxy. The badge is the gift that keeps giving.
Codecov did this. WakaTime did this. GitHub Stats did this. Shields.io did this. The pattern is so well-established that a casual reader scanning a README does not even register the badge as marketing — it reads as a normal artifact of "this maintainer takes their stack seriously."
What it shows#
The Scout Score badge renders the same 0-100 number that already exists at /receipts/{username} — computed live from a user's public GitHub starring history vs. the validated-wins database. The color tracks the rank: curious (teal) → scout (sky) → sharp (purple) → elite (amber) → oracle (rose). The user clicks the badge, lands on the builder, can pull their own snippet in fifteen seconds.
The Commit Momentum badge renders the live commit-velocity tier for any tracked GitHub org. Tiers are deterministic from the 14-day velocity change versus the prior 14-day window:
``` breakout : >= +200% hot : >= +50% warming : >= -30% cold : < -30% ```
Untracked orgs render a neutral "untracked" pill so a maintainer can paste the badge before we have indexed their repo without breaking the README. When we add the org to the next weekly crawl, the badge starts rendering the real tier — the maintainer does not have to do anything.
The technical guardrails#
A README badge has exactly one job: never break. A broken-image icon in a README gets the badge removed within hours, and the maintainer never trusts the source again. Three rules:
- **Always return 200.** Bad input, rate limit, GitHub timeout, internal error — all paths render a neutral gray "pending" SVG. Never a 4xx, never a 5xx, never a JSON error.
- **Aggressive cache.** `Cache-Control: public, max-age=300, s-maxage=86400, stale-while-revalidate=604800`. Browser holds 5 min, CDN holds 24h, falls back to stale up to 7 days while it re-fetches. GitHub's camo proxy respects the ETag (`{username}:{score}:{rank}`), so revalidation is one HTTP HEAD per camo region per hour.
- **No new infra.** Both endpoints reuse the existing Scout Score primitives, the existing in-memory star cache, the existing per-IP rate limiter, the existing rank colors. Zero new dependencies. Zero new env vars. Zero new hosting cost.
The whole thing is two route handlers, one shared SVG generator, and one client component for the builder UI. Total diff is under 500 lines. It deploys with a single `vercel build && vercel deploy --prebuilt --prod`.
How the distribution loop closes#
The badge is now linked from four surfaces inside our own product:
- **The MCP server README on npm + Glama + GitHub.** Anyone landing on our most-discovered surface sees the badge in the wild and learns it exists.
- **The /receipts result page.** Right after a user gets their Scout Score, they see "show off your taste" with the markdown ready to copy.
- **The /s/[handle] scout profile page.** Small footer link — anyone visiting a public scout profile can grab the same badge.
- **The /developers page and /badge-builder UI.** High-intent dev visitors discover both endpoints with copy-paste snippets.
Plus the OpenAPI spec, llms.txt, llms-full.txt — every AI assistant that reads our metadata will surface the badge endpoints when asked about our API.
The bet is that once a few high-signal accounts paste it (a couple of MCP-curious devs, one or two scouts on the leaderboard), the badge spreads on its own. Every render after that is free traffic that compounds with the leaderboard growth.
What I want from you#
If you have a GitHub profile and you want to flex your taste, paste this into your profile README and replace `YOUR-USERNAME`:
```markdown  ```
If you maintain a tracked OSS repo and want to show your commit momentum, replace `ORG/REPO`:
```markdown  ```
Or just open /badge-builder, paste a handle, click copy. Three seconds. Free forever.