Self-serve GitHub contribution dashboards. Visit https://githubusers.archivebox.io/<login> to see (or trigger mining of) any GitHub user's commit / PR / issue / star history.
/pirate→ custom enhanced dashboard (career timeline, manual canonical names, etc.)/<any-other-login>→ auto-generated dashboard- Unknown users get a "mining…" page that automatically dispatches a CI job and polls for completion
generate_stats.pymines a user's commits + PRs + issues + stars via the GitHub API (and local clones when run locally). It dedupes commits across forks, canonicalizes renamed/transferred repos, attributes commits to companies (when configured), and writes a single self-contained HTML file..github/workflows/mine-and-deploy.ymlrunsgenerate_stats.py --user <login>for each entry incloudflare/users.txt, copies each result intocloudflare/public/<login>.html, and deploys viawrangler deploy.cloudflare/worker/index.tsserves static assets atgithubusers.archivebox.ioand falls through to a "mining…" page that POSTs/api/refreshto dispatch the workflow on demand.
No R2, no DO, no Workflows. Single Worker + Static Assets + one cron-triggered GitHub Action.
.
├── generate_stats.py # mining script (Python 3.13)
├── stats_template.html # dashboard HTML template
├── cloudflare/
│ ├── wrangler.toml # Worker + assets config
│ ├── worker/index.ts # /api/refresh + 404 → loading page
│ ├── tsconfig.json
│ ├── users.txt # list of GitHub logins to keep mining
│ ├── public/
│ │ ├── 404.html # fallback
│ │ ├── index.html # landing page
│ │ └── pirate.html # pirate's enhanced version (committed)
│ └── README.md
└── .github/workflows/
└── mine-and-deploy.yml # daily + on-demand + on-push CI
- Set Cloudflare custom domain
githubusers.archivebox.io→ Workergithubusers-archivebox-io. - Add repo secrets at
https://github.com/ArchiveBox/githubusers/settings/secrets/actions:CLOUDFLARE_API_TOKEN—Workers Scripts:EditpermissionCLOUDFLARE_ACCOUNT_IDGH_MINING_TOKEN— a PAT withrepo+workflowscope (used by the Action to query the API + commit users.txt back)
- Set the Worker secret used by
/api/refreshto dispatch the Action:echo "$YOUR_GH_PAT" | wrangler secret put GH_DISPATCH_TOKEN - Push to
main(or click Run workflow in the Actions tab) — first run mines every user inusers.txtand deploys.
Just visit https://githubusers.archivebox.io/<login>. The Worker dispatches a single-user mining job and the page auto-polls for completion (~3-8 min). The login is appended to users.txt on success so future cron runs keep it fresh.
python3 generate_stats.py # uses pirate's baked-in personalized config
cp stats.html cloudflare/public/pirate.html
git add cloudflare/public/pirate.html && git commit -m 'refresh pirate.html'
git push
The push triggers the Action which redeploys (CI doesn't regenerate pirate's HTML, it just copies the committed one through).