A calm place to write long-form, and publish it to the open social web. skypress.blog/
0

Configure Feed

Select the types of activity you want to include in your feed.

Record cover image picker decision

+35
+35
docs/decisions/0016-cover-image-picker.md
··· 1 + # 0016. Per-article cover image picker 2 + 3 + **Status:** Accepted 4 + **Date:** 2026-06-10 5 + 6 + ## Context 7 + 8 + Until now the Bluesky card thumb was auto-derived from the first usable content 9 + image (`firstImageBlobRef`, Decision 0014), and articles had no explicit cover. 10 + The standard `site.standard.document` lexicon already defines an optional 11 + `coverImage` blob field (`image/*`, ≤1MB) that was never populated (deferred in 12 + Decisions 0006 and 0014). 13 + 14 + ## Decision 15 + 16 + Add a per-article cover image picker as a strip BELOW the block editor (outside 17 + the editor canvas). It reuses the existing `mediaUpload` + blob-registry path 18 + (no second isolated-block-editor instance) and writes the chosen blob to 19 + `site.standard.document.coverImage`. 20 + 21 + Thumb resolution becomes: explicit `coverImage` → `firstImageBlobRef(blocks)` → 22 + omit. The auto-pick is now the fallback, so nothing regresses for articles 23 + without an explicit cover. 24 + 25 + The 1MB cap (equal to `BSKY_THUMB_MAX_BYTES` and the lexicon `maxSize`) is 26 + surfaced in the picker UI as helper text and as the oversize rejection message. 27 + 28 + ## Consequences 29 + 30 + - Covers persist on the document, survive edits (re-previewed via `getBlob`), and 31 + become available to future reading-page/OG/RSS surfaces (still unwired — 32 + separate follow-up; see the 2026-06-09 OG design which deferred this field). 33 + - This partially supersedes Decision 0014: the first-image pick is retained only 34 + as the fallback when no explicit cover is set. 35 + - Consuming `coverImage` on the reading page / OG tags remains out of scope.