Shipseal

Templates

TemplateEventContentFormats
release-heroreleaseLogo, name, version, headline, tagline, install commandog, github-social, x, linkedin
release-highlightsreleaseWhat changed, up to four one-line highlightsx, linkedin
code-cardreleaseHeadline plus a syntax highlighted snippet, about 14 linesx, linkedin
milestonemilestoneOne large number, the metric, a thank-you lineog, x, linkedin
benchbenchUp to three metrics as before to after with percent changex, linkedin

Every template renders in dark and light. The brand's theme decides the default.

Formats

IdSizeUse
og1200x630Open Graph link previews
github-social1280x640GitHub repository preview
x1200x675X posts
linkedin1200x627LinkedIn posts
square1080x1080Instagram and generic square
portrait1080x1350LinkedIn carousel page
producthunt1270x760Product Hunt gallery
readme-banner1280x400README header

Templates are designed per format rather than scaled. A 1200x630 landscape card and a 1080x1350 portrait card need different arrangements, so each one gets its own.

Text fitting

Text never silently overflows. For each slot Shipseal measures the real fonts at decreasing sizes until the line count fits, using Takumi's own measurement so the result matches what gets rendered.

  1. Try font sizes from the maximum down to the minimum.
  2. Take the first size where the text fits the allowed number of lines.
  3. If nothing fits, truncate at a word boundary and record a fit-warning in the manifest.
Treat a fit warning as a copy problem. It means the text was shrunk or cut. Shorten the sentence rather than widening the template. --strict turns any fit warning into exit code 2, which is worth using in CI.

Safe zones

Critical text stays at least 64px from the edge on landscape formats, because platforms crop previews and overlay their own interface near the edges.