cloutgraph · network clout via PMI + HITS

Paste a Bluesky handle (crawls its mutuals) or a list link (bsky.app/profile/…/lists/…, crawls its members). cloutgraph reads who in that group liked whom, weights each directed liker → author edge by pointwise mutual information (so one hyperactive liker or one universally-liked account can't dominate on raw counts), runs HITS on the weighted graph, and ranks the group by network clout — the geometric mean of authority score and hub score.

reads Bluesky's public AppView + each account's own PDS, all in your browser — no login.

# who clout hub auth likes in-pool (given / recv)
how the score works
For every member of the pool, cloutgraph reads their public like records straight off their own PDS (com.atproto.repo.listRecords, collection app.bsky.feed.like — up to 300 recent likes per member) and keeps only the likes aimed at another pool member, giving a directed count c(i,j) = how many times i liked something by j. Each edge is then re-weighted by PPMI: max(0, log(c(i,j)·T / (rowSum(i)·colSum(j)))), T being the total in-pool likes — so an edge only carries weight if the pair like each other more than their individual activity levels would predict by chance. HITS then runs ~100 power-iteration rounds on that weighted graph (authority ← incoming hub·weight, hub ← outgoing authority·weight, L2-normalized each round), and clout is sqrt(hub × authority) per person, scaled 0–100 against the pool's own top scorer. The graph is capped at 50 pool members and 300 likes each to keep the crawl bounded — big mutual sets or lists get truncated to the first 50 found. Any pool member whose weaker side — min(likes given, likes received) within the pool — is under 5 is too small a sample for PMI/HITS and tends to swing scores to extremes rather than reflect real standing. Nobody gets swapped automatically though: hit the "swap out low-activity members" button once results are in, and it'll drop whoever's currently under that threshold for the next candidate waiting in line, recompute, and re-rank. It only checks the pool as it stands when you click it, so if a freshly swapped-in replacement also turns out to be low-activity, click it again to clean that up too.