punch#
who's pushing on tangled.org — push-count leaderboard across every knot. one row per committerDid, ranked by sh.tangled.git.refUpdate events.
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
- indexer: Cloudflare Workers + D1 + KV
- site: wisp.place (atproto static hosting)
- handles: typeahead.waow.tech + bsky AppView + plc.directory
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
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).