Paste a Bluesky handle. likeclusters reads that account's
entire post history, pulls each post's public likers, works out a rough
topic for the post (keywords + hashtags, no AI), and groups
the likers by which topic they actually show up for — the moot who
only ever likes your #catposting, never anything else.
Click any topic tag in the results to mark it annoying — saved
on this device, so it flags the moots who only show up for the stuff
that grinds your gears.
reads Bluesky's public AppView, all in your browser — no login.
| # | who | posts liked | top topic | focus |
|---|
getAuthorFeed until it runs out, not just a
recent slice — and reads each one's public getLikes,
paging that too until every liker's read, not a capped slice.
Accounts with a big archive (or a few very popular posts) will take
a while and make a lot of requests; that's expected. Each post's
topic comes from its own text: strip URLs/mentions, drop a
stoplist of filler words, keep hashtags as a stronger signal (3×
weight), then score every remaining word by tf-idf across the
whole sampled set — so a word that shows up in nearly every post
(a recurring signoff, a common turn of phrase) scores near zero,
and words that actually distinguish one post from another rise to
the top. Each post keeps its top 3 scored terms as its topic tags.
For each liker, their liked posts' topic tags are summed into a
per-tag weight; their top topic is the heaviest one, and
focus is that weight's share of their total — 100% means
every single liked post scored the same topic tag highest, near 0%
means their likes are spread across unrelated topics. A liker
needs at least 2 sampled-post likes before a topic verdict is
shown at all — one like isn't a pattern. Click any topic tag
anywhere on the page to mark it annoying — that's a
purely local preference, stored in this browser's
localStorage, never sent anywhere. Once a tag's
marked, any moot whose likes are mostly concentrated on it shows
up in the "only shows up for the stuff that annoys you" section
up top. This is keyword
statistics, not language understanding — a post about two
different things, or one that leans on words the stoplist doesn't
catch, can land a slightly odd tag. No account data is stored;
everything happens in your browser against Bluesky's public
AppView, no login required.