{"id":51667771,"url":"https://github.com/hikariming/ghfind","last_synced_at":"2026-07-14T21:32:31.912Z","repository":{"id":367778702,"uuid":"1281140983","full_name":"hikariming/ghfind","owner":"hikariming","description":"Savage GitHub Roast · Drop a handle, get a 0–100 value \u0026 trust score in 30s plus one brutally honest roast. Exposes PR farmers, AI bots \u0026 fork-hoarders. Deterministic scoring, self-hostable.","archived":false,"fork":false,"pushed_at":"2026-07-03T02:18:52.000Z","size":3212,"stargazers_count":93,"open_issues_count":11,"forks_count":14,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-07-03T02:26:04.833Z","etag":null,"topics":["ai","code-quality","developer-tools","github","leaderboard","nextjs","openai","roast"],"latest_commit_sha":null,"homepage":"https://githubroast.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hikariming.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-26T09:02:14.000Z","updated_at":"2026-07-03T02:18:55.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/hikariming/ghfind","commit_stats":null,"previous_names":["hikariming/github-roast","hikariming/ghfind"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/hikariming/ghfind","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hikariming%2Fghfind","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hikariming%2Fghfind/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hikariming%2Fghfind/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hikariming%2Fghfind/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hikariming","download_url":"https://codeload.github.com/hikariming/ghfind/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hikariming%2Fghfind/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35480618,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-14T02:00:06.603Z","response_time":114,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","code-quality","developer-tools","github","leaderboard","nextjs","openai","roast"],"created_at":"2026-07-14T21:32:31.181Z","updated_at":"2026-07-14T21:32:31.900Z","avatar_url":"https://github.com/hikariming.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# ghfind 🔥\n\n### Discover the best developers — and become one.\n\nAn evidence-based platform to **find** great developers, **measure** where you stand, and **grow** from there.\n\nStart with a brutally honest **0–100 value \u0026 trust score** on any public GitHub profile — see your gaps, learn where to go, then explore the strongest builders in your ecosystem, find worthy peers and rivals, and let your own work get discovered.\n\n**English** · [中文](./README.zh.md)\n\n[**🔍 Score a GitHub profile**](https://ghfind.com/en) · [**🏆 Discover top developers**](https://ghfind.com/en/leaderboard) · [**⭐ View source**](https://github.com/hikariming/ghfind)\n\n\u003c/div\u003e\n\n[![ghfind developer profile preview](./show_img/usercard.png)](https://ghfind.com/en/u/hikariming)\n\n## Measure. Grow. Discover.\n\n### 📊 Know exactly where you stand in 30 seconds\n\nEnter a GitHub handle to get a **0–100 value \u0026 trust score**, a five-tier verdict (🏆 GOD / 🥇 ELITE / 💪 SOLID / 🫥 NPC / 💩 TRASH), and a brutally honest read grounded in public data. Six scoring dimensions and ten farming red flags separate sustained engineering work from star farming, fork hoarding, bots, and self-merged PRs — so the score tells you what's real and where to improve.\n\n### 🧭 Discover the developers worth knowing\n\nghfind is a discovery engine, not just a scorer. Use the leaderboard and public profiles to find strong open-source contributors, builders in your ecosystem, potential collaborators, and the developers you want to measure yourself against — and let the right people find you.\n\n[![ghfind developer leaderboard](./show_img/leaderboard.png)](https://ghfind.com/en/leaderboard)\n\n### 🪪 Turn your GitHub work into a shareable identity\n\nEvery assessment can generate a live badge and light/dark developer card for your GitHub profile, project README, portfolio, or personal site. Here is a real example:\n\n\u003cdiv align=\"center\"\u003e\n\n[![ghfind score badge](https://ghfind.com/api/badge/hikariming)](https://ghfind.com/en/u/hikariming)\n\n\u003ca href=\"https://ghfind.com/en/u/hikariming\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://ghfind.com/api/card/hikariming?theme=dark\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://ghfind.com/api/card/hikariming?theme=light\"\u003e\n    \u003cimg alt=\"ghfind card for hikariming\" src=\"https://ghfind.com/api/card/hikariming?theme=light\" width=\"720\"\u003e\n  \u003c/picture\u003e\n\u003c/a\u003e\n\n\u003c/div\u003e\n\nThe scoring core comes from the open-source Claude skill `github-account-value`. This site **ports its Python scoring logic line-by-line into TypeScript**, with unit tests locking the two outputs in parity.\n\n## How it works\n\n```\nbrowser ─▶ /api/scan ─▶ [Redis cache?] ─▶ lib/github.ts  (GitHub REST + GraphQL, operator PAT)\n                                     └─▶ lib/score.ts   (deterministic scoring, parity with the Python skill)\n                                     └─▶ write cache 24h\n         ─▶ /api/roast (streaming) ─▶ LLM judge pass (bounded score calibration)\n                                      └─▶ LLM writer pass (roast/report text only)\n                                      └─▶ lib/llm.ts (OpenAI-compatible; defaults to StepFun; bring-your-own key)\n```\n\n- **The base score is deterministic** — computed server-side by `lib/score.ts`.\n- The LLM runs in two separated passes: a factual judge may apply a bounded **±10** calibration, then a writer turns the fixed result into tags, the top roast line, and the report. The writer cannot change the score.\n- 6 dimensions (account maturity / original project quality / contribution quality / ecosystem impact / community influence / activity authenticity) + 10 farming red flags. Weights lean toward **hard-to-fake** signals (PRs merged into real repos, sustained activity) and discount **buyable** ones (stars, followers).\n- The site also includes share cards, README badges, profile comments, and GitHub-authenticated profile reactions.\n\n## ghfind API, MCP server \u0026 SDKs\n\nEverything on the site is available programmatically — full reference at **[ghfind API documentation](https://ghfind.com/docs)**:\n\n- **REST API** — `GET https://ghfind.com/api/score/{username}` for a deterministic 0–100 score (no auth, no LLM); OpenAPI 3.1 spec at [ghfind.com/openapi.json](https://ghfind.com/openapi.json)\n- **MCP server** — Streamable HTTP at [ghfind.com/mcp](https://ghfind.com/mcp); add it to Claude, Cursor, or any MCP client to score and compare GitHub accounts from inside the agent\n- **SDKs** — [`@hikariming/ghfind`](https://www.npmjs.com/package/@hikariming/ghfind) (npm) · [`ghfind`](https://pypi.org/project/ghfind/) (PyPI)\n- **For AI agents** — [ghfind.com/llms.txt](https://ghfind.com/llms.txt) links every machine-readable surface\n\n## Local development\n\n```bash\npnpm install\ncp .env.example .env.local   # set GITHUB_TOKEN and LLM_API_KEY (defaults to StepFun)\npnpm dev\n```\n\n\u003e **Always set `GITHUB_TOKEN`.** Without a token, GitHub's GraphQL dimensions (contributions / activity / external contributions) all drop to zero (scores get badly underestimated), and REST is rate-limited to 60/h. A read-only PAT raises the limit to 5000/h and unlocks every dimension.\n\n### Commands\n\n| Command | Description |\n|------|------|\n| `pnpm dev` | Local development |\n| `pnpm start` or `pnpm build/start` | One-command production build + run |\n| `pnpm build` / `pnpm start:prod` | Build only / run an existing production build |\n| `pnpm ghfind` | Agent-friendly `ghfind` CLI wrapper around the website scoring and discovery APIs |\n| `pnpm test` | Vitest test suite (scoring, prompts, DB, UI helpers, reactions, etc.) |\n| `pnpm typecheck` | `tsc --noEmit` |\n| `pnpm lint` | ESLint |\n\n### Agent CLI\n\nThe CLI is a thin remote wrapper around the public website APIs. It does **not**\nrun GitHub scanning, scoring, or LLM logic locally.\n\n```bash\npnpm ghfind commands --json\npnpm ghfind update check -o json\npnpm ghfind score hikariming -o json\npnpm ghfind roast hikariming --lang en -o markdown\n```\n\nFor a standalone binary:\n\n```bash\npnpm cli:build\n./bin/ghfind commands --json\n./bin/ghfind update check -o json\n./bin/ghfind roast hikariming --lang en -o markdown\n./bin/ghfind leaderboard --view trending --window all -o json\n./bin/ghfind developers --type language -o json\n```\n\nThe CLI name is `ghfind`. The standalone binary is built as `./bin/ghfind`,\nand package/bin metadata also exposes `ghfind`.\n\nThe default service host is `https://ghfind.com`. Override it for local dev:\n\n```bash\nGHFIND_HOST=http://localhost:3000 pnpm ghfind roast hikariming --lang en\n```\n\n`GITHUB_ROAST_HOST` is still accepted as a backward-compatible alias.\n\nProduction `/api/scan` uses Turnstile for browser calls. For agent/CLI calls,\nset `GITHUB_ROAST_CLI_API_KEY` on the server and pass the same value to the CLI\nas `GHFIND_API_KEY` or `--api-key`; the CLI sends it as\n`Authorization: Bearer ...` to the same `/api/scan` endpoint.\n`GITHUB_ROAST_API_KEY` remains a backward-compatible alias.\n\n`/api/scan` checks machine auth or Turnstile before it reads the scan cache or\nuses the server GitHub token. If `GITHUB_ROAST_CLI_API_KEY` is not configured\nand Turnstile is enabled, an unauthenticated CLI request can fail before cache\nlookup, even when the server has a GitHub token and Redis cache.\n\nVersion/update management:\n\n```bash\nghfind --version\nghfind update check -o json\nghfind update install --method binary --dry-run -o json\nghfind update install --method binary\nghfind update npm --dry-run -o json\nghfind update npm\nghfind update pip\nghfind update brew\n```\n\n`update check` compares the local CLI version with the latest GitHub release and\nprints `update_available`, `latest_version`, and `release_url`. It only reports;\nit never modifies the installed binary.\n\n`update install --method binary` downloads the current platform's GitHub release\nasset, writes it next to the running binary, and replaces the local `ghfind`\nbinary by rename. Use `--dry-run` first to inspect the selected asset and target\npath. Package-manager shortcuts run the matching upgrade command:\n\n- `ghfind update npm`: `npm install -g @hikariming/ghfind@latest`\n- `ghfind update pip`: `python3 -m pip install --upgrade ghfind`\n- `ghfind update brew`: `brew upgrade ghfind`\n\nThese commands modify the local installation only when explicitly invoked. They\nare not triggered by `update check`.\n\nConnected website APIs:\n\n- `scan` / `score`: `POST /api/scan`, factual structured score data.\n- `roast`: `POST /api/scan` + `POST /api/roast`, web-facing roast report.\n- `stats`: `GET /api/stats`, platform aggregate metadata.\n- `leaderboard`: `GET /api/leaderboard`, cached ranking/discovery entries.\n- `developers`: `GET /api/developers`, language/org/repo discovery facets.\n\nFor agent decisions about one account, use `scan` or `score`; leaderboard and\ndeveloper directory commands are discovery/catalog surfaces, not fresh scoring\nfacts.\n\n## Environment variables\n\nSee [`.env.example`](./.env.example). The minimum to run the GitHub roast flow is `GITHUB_TOKEN` + `LLM_API_KEY` (defaults to StepFun, OpenAI-compatible; swap in any OpenAI-compatible service). Cache, rate limiting, human verification, GitHub login, profile comments/reactions, and the leaderboard **degrade silently** when unconfigured (fine for local). Configure everything for production.\n\n## Leaderboard + percentile (Turso, optional)\n\nConfigure `TURSO_*` to unlock the \"Hall of Fame\" leaderboard (`/leaderboard`) and the result page's \"🏆 You beat X% of developers\".\nEach scan upserts the account's latest score into the DB (one row per account); percentile = the share of stored scores strictly below yours.\n**The public board only lists accounts scoring ≥60**; lower scores still count toward the percentile but are not publicly named (anti-harassment). The whole feature degrades silently when unconfigured.\n\n```bash\n# cloud\nturso db create github-roast\nturso db tokens create github-roast   # gives TURSO_DATABASE_URL(libsql://...) + TURSO_AUTH_TOKEN\n# local dev, no cloud\nTURSO_DATABASE_URL=file:./local.db\n```\n\n## Deploy to Vercel\n\n1. Push to GitHub, import in Vercel.\n2. Configure environment variables (as above). `UPSTASH_*` can be provisioned in one click via Vercel's Upstash integration.\n3. Grab a Cloudflare Turnstile site/secret key pair; set `NEXT_PUBLIC_TURNSTILE_SITE_KEY` + `TURNSTILE_SECRET_KEY`.\n4. (Optional) Turso: `TURSO_DATABASE_URL` + `TURSO_AUTH_TOKEN` to enable the leaderboard, archived reports, and profile comments/reactions.\n5. (Optional) GitHub OAuth: `AUTH_GITHUB_ID` + `AUTH_GITHUB_SECRET` + `AUTH_SECRET` to enable signed-in comments/reactions.\n6. (Optional) set `PUBLIC_SITE_URL` when deploying under a custom domain so metadata, sitemap, cards, and LLM attribution use the right origin.\n7. Deploy.\n\n## Bring your own model / API key\n\nClick \"Use your own model\" on the page and enter Base URL + API Key + Model. Compatible with any OpenAI-style API (OpenAI / OpenRouter / Groq / DeepSeek / local). **The key lives only in your own browser's localStorage, is passed directly on call, and is never uploaded to the server or persisted.**\n\n## Regenerating the scoring-parity test baseline\n\n`src/lib/__tests__/score-fixtures.json` is the ground truth produced by the Python skill's `score()`. After the skill formula changes, re-run `score()` from `github-account-value/scripts/fetch_github_profile.py` on the same inputs, overwrite that file, then `pnpm test` to verify the port didn't drift.\n\n## Disclaimer\n\nThis site generates scores and commentary automatically from **public GitHub data only**. It roasts an account's public behavior and data, is not directed at individuals, does not constitute a factual finding, and must not be used for harassment. Private contributions are excluded, so active members of private orgs may be underrated.\n\n## Sponsorship \u0026 fairness\n\nSponsorship is welcome to cover running costs (GitHub API, LLM, hosting). Note that:\n\n- **Sponsorship does not affect any score or ranking.** Scores are computed deterministically by `src/lib/score.ts`; sponsors cannot buy a higher score, a better rank, or \"whitewashing\". Sponsor placements and leaderboard data are physically separated in the product.\n- Sponsor perks are attribution/placement only and never touch the scoring logic.\n\n## License\n\nLicensed under **[GNU AGPL-3.0](./LICENSE)**.\n\n- You may freely use, modify, and self-host this project.\n- **If you modify it and offer it as a network service** (SaaS / hosted), AGPL requires you to **release your modifications under AGPL as well** (users interacting over the network are entitled to the source).\n- The scoring core is ported from the open-source Claude skill `github-account-value`, kept as the single source of truth.\n\n\u003e **Trademark:** the \"ghfind / 毒舌 GitHub 评分\" name, logo, and domain are **not covered** by the open-source license; all rights reserved. You may self-host from this code, but please do not use the project's name/brand to impersonate the official site or cause confusion.\n\n## Star History\n\n\u003ca href=\"https://www.star-history.com/?repos=hikariming%2Fghfind\u0026type=date\u0026legend=top-left\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/chart?repos=hikariming/ghfind\u0026type=date\u0026theme=dark\u0026legend=top-left\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/chart?repos=hikariming/ghfind\u0026type=date\u0026legend=top-left\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/chart?repos=hikariming/ghfind\u0026type=date\u0026legend=top-left\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhikariming%2Fghfind","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhikariming%2Fghfind","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhikariming%2Fghfind/lists"}