Stoatworks Labs

gh-fleet-analytics

GitHub numbers, before GitHub forgets them

Releasedv0.1.0Library & ProtocolPython
gh-fleet-analytics — GitHub numbers, before GitHub forgets them
The portal, rendered from the synthetic dataset that ships with the repo — no real account's numbers are shown.

What it does

GitHub's own Insights tab shows one repo at a time, and it forgets. Traffic views and clones are kept for fourteen days. Stars, forks and release download counts are worse: the API only ever reports the current total, so a star history does not exist unless something wrote the number down each day. This writes the number down each day.

It is the tooling behind this site's own numbers, generalised and published. One config file names the account; everything else — paths, palette, page title, the custom domain — comes from there, so nothing about this fleet is baked in. Two Python files with no dependencies, one small Cloudflare Worker, and a synthetic dataset so the renderer produces a real page before you have collected anything.

  • Daily snapshot of every repo you own, public and private, into JSON committed to git
  • One password-gated page: fleet-wide views and clones, referrers, download rankings, per-repo sparklines
  • An honest depth note saying exactly how much history exists, because early charts are mostly empty
  • Optional public summary of your public repos only — deliberately no traffic figures
  • Refuses to write an index that lost repos: a narrow token collects a smaller fleet without erroring
  • Self-contained output — no CDN, no fonts, no fetch, so it opens from a file:// URL

Where it stands

Released and in daily use against this fleet's ~100 repos, which is where it came from. CI renders the bundled synthetic dataset on every push, so renderer breakage fails there; the GitHub API paths are exercised only by running it for real, and there is no test suite. The Cloudflare Worker is deployed and serving, but the deploy path is not covered by tests.