Scofti
← Board
SC-4DonePhase One · Launch

Share cards per piece

A piece with no image of its own still unfurls as the site wordmark.

/opengraph-image generates the Orbitron card for the whole site. A piece with an image in its frontmatter already overrides it.

The gap is pieces without one: a [slug]/opengraph-image.tsx could render the title onto the card so a shared link shows what it actually is.

Built

Every page renders its own card: a small blue wordmark as a kicker, the page's title taking the space, scofti.com in the corner. Title type steps down as the title gets longer, because satori neither reflows nor truncates — a title that does not fit simply runs off the edge, where nobody looking at this site would ever see it.

One generator in src/lib/share-card.tsx, used by all six routes, so the cards cannot drift into six different designs. Entries, Model Behavior articles and tickets take their title from the file; the three index pages pass their own. A piece with a lead image still wins with that image.

The part that nearly shipped broken: every page already set images: ["/opengraph-image"] in its metadata, and an explicit value beats Next's colocated opengraph-image.tsx. The cards would have been generated on every route and used by none of them, while every link went on unfurling as the bare wordmark. Nothing would have failed — the build passes either way, and check:meta reads og:url and og:title, not og:image. It was only caught by reading the rendered og:image out of the built HTML.

So the fallback is gone and the field is now left unset on purpose, with a note in entry-meta.ts saying why, because naming it there looks like the careful thing to do and is the one thing that breaks this.