quotree#
visualize bluesky trend chains.
paste a bluesky post URL and quotree traces the chain of quote-posts that share its text (and optionally its image style), then draws the resulting tree.
live at https://sites.wisp.place/zzstoatzz.io/quotree.
how it works#
quotree is a static svelte app that runs entirely in the browser. there is no backend — all data comes from atproto services on the open network:
- microcosm does the heavy lifting:
constellation— global backlink index. used to find every post that quotes a given post (embed.record.uriandembed.record.record.uripaths).slingshot— edge cache for record/identity lookups. used to resolve handles, fetch records, and get mini did docs.
- bsky appview (
public.api.bsky.app) — profile lookups (avatar + handle). - the user's pds — optional, only when signed in. snapshots of a crawled tree are stored at
io.zzstoatzz.quotreeSnapshotand shared via URL hash.
the crawl starts at the post you give it, traces parent quotes upward to find the chain root, then BFS's downward through constellation backlinks. children are kept only if their text is similar enough to the root's (bigram dice coefficient, with a first-line fallback for prompt-style trends).
stack#
- svelte 5 (runes)
- vite + bun
- d3-hierarchy / d3-selection / d3-zoom for the tree
- @atcute for atproto client + OAuth (lazy-loaded)
develop#
bun install
bun run dev
build & deploy#
deployed to wisp.place (atproto static hosting):
bun run build
wispctl deploy zzstoatzz.io --path ./dist --site quotree --spa
the oauth-client-metadata.json in public/ is the client manifest used for production OAuth; localhost dev uses an inline loopback client.