fun tangled
README.md

punch #

who's pushing on tangled.org — push-count leaderboard across every knot. one row per committerDid, ranked by sh.tangled.git.refUpdate events.

also: languages (languages.html) — a donut of the languages people build in on tangled, aggregated across every repo on every knot. repos are discovered from sh.tangled.repo records (bootstrap: bun scripts/backfill-repos.ts) and analyzed via each knot's sh.tangled.repo.languages xrpc. the cron rescans pushed-to repos first (refUpdate events mark them dirty), so actively-developed repos refresh within one tick; the rest rotate. initial corpus seeded with bun scripts/backfill-langs.ts (knot-serial with 429 backoff — knots rate-limit fan-out).

also: repos (repos.html, currently unlisted) — repository activity observed from public knot streams over a rolling 30-day window, ranked by push count.

sites.wisp.place/zzstoatzz.io/punch

stack #

relay.waow.tech (listReposByCollection)
      ↓
 knot /events (WS, per-host)
      ↓
 CF Worker (*/10 min cron)  →  D1 (cursors, pushes) + KV (handles)
      ↓
 place.wisp.fs record on pds.zzstoatzz.io  →  sites.wisp.place

dev #

bun install && bun run dev            # static site at :4747

cd worker && bun install
wrangler dev                          # worker; GET /__run fires one cycle
wrangler deploy
wrangler tail

secrets: PUNCH_HANDLE, PUNCH_APP_PASSWORD (atproto app password for the wisp-publishing account).

publish #

the worker only rewrites leaderboard.json in the wisp manifest each tick. html/css/js changes ship with a manual wispctl:

wispctl deploy zzstoatzz.io --path public --site punch --password "$PUNCH_APP_PASSWORD" --yes
why pushes, not commits & normalized gini

tangled's own PUNCHCARD filters meta.commitCount.byEmail[] by the committer's private verified-emails table (core/appview/state/knotstream.go:219 in tangled). without that table we'd massively overcount merges/rebases. one refUpdate = one push is the cleanest metric we can compute from public firehose data — and it surfaces accounts tangled's counter hides (e.g. prolific pushers who haven't run email verification).

the repos page reports normalized gini coefficients over observed pushes by author. equal push counts produce 0; increasing inequality approaches 1. fewer than two observed authors produces no score rather than a misleading single-author value.