Adds a compare dialog reached from the publications header and from ranked “find your blog” results. Two search boxes use the same handle, DID, website, name, and at-uri matching as find, so any ranked publication can be selected, including those outside the top 100. Each side shows the current selection, rank, score, percentile, and previous-run movement.
The explanation uses the published weights and the same weighted-factor arithmetic as the ranking. It shows the six composite scores, names the largest factor differences in points, and lists factor percentiles and weighted contributions below. Warning penalties and rank tie-breaks are explained when they apply. The full ranked dataset is fetched lazily from all.json only when the dialog opens, and the selection is shareable as ?compare=,.
Verified with npm --prefix web test (63 passing), npm --prefix web run build, and npm --prefix web run verify:dist. I searched a handle with eight ranked publications, selected #121, and confirmed the comparison and URL. Screenshots: before the feature, the search and a top-100 versus #121 comparison, and the factor breakdown:
🤖 Generated with Claude Code