Store and render Bluesky rich text facets for clickable links and mentions
Bluesky annotates post text with "facets" — byte-range metadata identifying
links, mentions, and hashtags. Previously we stored only plain text, so bare
domain URLs (e.g. atmosphereconf-tv.btao.org) were never linkified. Now we
store facets from both ingest paths (backfill + Jetstream), persist them as
JSON in ClickHouse, and use UTF-8 byte slicing at render time to wrap the
correct text spans in <a> tags with rel="ugc nofollow noopener". Posts
indexed before this change fall back to a regex that catches https:// URLs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>