Public: anyone can read this; the crew can change it.

Link previews that tell the story: dynamic OG images rendered from live data for every forge page #451

Closed opened this
opened this

Owner's direction (2026-10-02): forge links are shared over iMessage between friends' forges. A preview should say enough that you need not click, and prepare you for what you will see if you do — like Vercel's OG image generation (Satori: JSX/HTML+CSS → SVG → PNG), responding to the data.

Shape:

  • og:title, og:description, og:image (1200×630 PNG), twitter:card=summary_large_image on every page, with the description written from the page's state (e.g. 'cs-engine · 3 changes waiting, 2 crew working, $41 today').
  • /og/<path>.png renders the image server-side from the same data the page reads: SVG composed in-process (Satori-style or hand-built SVG) rasterized with resvg; cached by a content hash of the inputs; ≤ 300 ms cold.
  • Private pages: a preview reveals only what an anonymous viewer may see (title + 'private'); never leak private data to an unfurler. Unfurlers (iMessage, Slack, X, Discord) are anonymous.
  • Distinct designs for the high-value pages: map (the dependency graph thumbnail with counts), audit (the policy lens as a score and the top findings), app (live/asleep, preview screenshot, what the crew is doing), change/pull (before/after looks, checks, who shipped), run (agent, issue, cost, outcome), repo/issue (state, blockers). One shared visual system with the studio's words.

Split into the child issues below; each is one run.

commented

Done on main already, waiting for you to close it: b9ac83543e5aecccc36bdaf567553dd4b54d1748 1aecf6071a9d5df6a892afe2c7cb0c4b0bbfc766 d00e4a593d79ed5f76412cf68d128bbafd3ca772 b27e2a43b9a3cea409617df3066802477ec78b33 35d1fc6e413ae1828446987d79d037b4f611440b

commented

replaced by #2349. Every part this waited on (#452, #454, #1803, #1806, #2045–#2049) has landed. What is left is one test that proves every page unfurls and no private page leaks, plus fixes for whatever that test finds.

commented

My token cannot close this issue, so it now waits for the pieces named above and no builder will pick it up next to them. A person can close it as split into #2349.

commented

Done on main already, waiting for you to close it: b9ac83543e5aecccc36bdaf567553dd4b54d1748 1aecf6071a9d5df6a892afe2c7cb0c4b0bbfc766 d00e4a593d79ed5f76412cf68d128bbafd3ca772 b27e2a43b9a3cea409617df3066802477ec78b33 35d1fc6e413ae1828446987d79d037b4f611440b

commented

State: replaced by #2483. Every part of this direction is on main: tags on every page, /og designs for map, audit, app, pull, run, repo and issue, PNG twins, and private cards that say only the title and 'private'. What #2483 does differently: it measures the one unproven promise, '≤ 300 ms cold', per design, and makes any slow design faster.

commented

The forge refused my close (403). So this issue now waits for #2483, and no builder is handed it again. When #2483 lands, nothing is left here, and a person can close it as replaced by #2483.

commented

Done on main already, waiting for you to close it: b9ac83543e5aecccc36bdaf567553dd4b54d1748 1aecf6071a9d5df6a892afe2c7cb0c4b0bbfc766 d00e4a593d79ed5f76412cf68d128bbafd3ca772 b27e2a43b9a3cea409617df3066802477ec78b33 bb9dd472d24f6f03f4b7d482575f54d0d415dba2

commented

Every child of this umbrella is closed as done (#452, #454, #1803, #1806, #2045–#2049, #2447, #2448, #2483): cards for map, audit, app, pull, run, repo and issue in src/web/og/, rasterized and cached by input hash, private pages say only the title and 'private', and cold renders stay within 300 ms in the gate. The direction it gives is built; nothing smaller is left to split off. My token cannot close issues (403, scope), so a person needs to close this one. Reason: done.

commented

Done on main already, waiting for you to close it: b9ac83543e5aecccc36bdaf567553dd4b54d1748 1aecf6071a9d5df6a892afe2c7cb0c4b0bbfc766 d00e4a593d79ed5f76412cf68d128bbafd3ca772 b27e2a43b9a3cea409617df3066802477ec78b33 bb9dd472d24f6f03f4b7d482575f54d0d415dba2

commented

State: deferred, waiting on #2502. It is done on main, and my token still cannot close it (403 again today). It keeps coming back as 'stalled' because stalled() in src/crew/held.ts skips the crew's done-on-main note. #2502 adds a done_on_main hold so a done issue is never handed back to a builder or the planner, and #2503 lets the planner close it itself. A person can close it now as done. Every design this direction names is on main in src/web/og/ (map, audit, app, pull, run, repo, issue), and private cards say only the title and 'private'.

commented

Closed: already done on main in b9ac835, 1aecf60, d00e4a5, b27e2a4, bb9dd47.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs