Browser extension: detect and subscribe to standard.site publications on ATProto substandard.blog

feat(panoptiblog): make share pages a reason to keep blogging #580

Merged permadeath.com
targeting main from claude/pano-share-incentives
Merged opened by and assigned to permadeath.com
targeting main from claude/pano-share-incentives

Every ranked publication gets a stable page at /b/<key>, a 1200×630 card at /b/<key>.png and a 360×96 badge at /b/<key>-badge.svg. The page opens with a large panoptiblog brand and a compact publication badge in the publication's own theme colors. Rank, movement and overall score share one panel with the six composite cards; milestones are pills. The card uses the same aligned grid, with the badge over the rank and score panel and the composite tiles filling the right. Nothing compares or names another publication.

The task fetches each publication icon and author avatar, converts them to PNG with sharp, and falls back to initials when a fetch fails. Pages share /b/blog.css and /b/blog.js; each publication also gets a small theme stylesheet. Keys come from the publication at-uri, and existing objects are never deleted, so an embedded badge or a shared page keeps working across daily runs and after a publication leaves the ranking. Nothing in scoring or ranking changes.

npx vitest run scripts/panoptiblog passes 171 tests. The Alpine image builds and sharp converts WebP there. Deploying the backend image is required for the new objects; the next run writes pages, cards, badges and theme files for every ranked publication.

Before:

share page before

After:

share page after

Card before:

share card before

Card after:

share card after

🤖 Generated with Claude Code

Commits 0