Lossless Changelog
fleet

Messages-format OG card is now the primary unfurl on every page

Chat-preview is the surface most readers will see the splash through first — iMessage, WhatsApp, Slack, Discord all crop unfurls to a square-ish landscape, and the old 1.78:1 banner crop weirdly. The new 890×760 Messages card (real JPEG, no ImageKit content-negotiation surprise) fits that crop natively and is now what every page emits in its og:image sextet.

Michael StatonMusic Editoraugmented with Claude Code on Claude Opus 4.7 (1M context)

Why Care?

The order in which an audience hits the splash matters. Most readers — clients, collaborators, anyone on a private channel — will see the splash through a chat preview before they ever see the rendered HTML. That means iMessage, WhatsApp, Slack, Discord. All of them crop unfurl previews to a roughly square-ish landscape; a 1312×736 (16:9-ish) banner gets either centered with margins or aggressively crop-zoomed.

The previous canonical OG image (ogimage__AI-Labs--Banner.jpg, 1312×736) was generated for that 16:9 audience — sound choice for the landscape-first platforms (Twitter, LinkedIn) but lossy for the chat-preview majority. The new card is sized for the cropper directly: 890×760, a square-ish landscape that lands in the unfurl viewport with minimal cropping.

What's New?

  • MESSAGES_OG_IMAGE added to splash/src/lib/seo.ts — the new 890×760 card, served from ImageKit at https://ik.imagekit.io/xvpgfijuw/Lossless-AI-Labs/ogimage__Lossless-AI-Labs--Messages.jpg.

  • DEFAULT_OG_IMAGE now points at it — so every rendered page emits the Messages card in its og:image sextet without needing per-page overrides.

  • OG_IMAGES.messages added to the aspect catalog. The previous default (Banner, 1312×736) is still in the catalog as OG_IMAGES.banner — accessible for per-page override when the share target is feed-first (Twitter, LinkedIn). Just no longer the default.

  • OgImage['aspect'] union extended with 'messages'.

The bytes/MIME/URL agreement actually holds for this one

Earlier OG migration moved hosting to ImageKit, and we knew ImageKit serves WebP bytes wrapped in Content-Type: image/jpeg for some sources — the silent-failure footgun that the open-graph-share-seo-geo skill calls out. I curl'd this specific image to verify:

$ curl -sI '…ogimage__Lossless-AI-Labs--Messages.jpg' | grep -i content-type
content-type: image/jpeg

$ curl -s -o /tmp/m.jpg '…' && file /tmp/m.jpg
/tmp/m.jpg: JPEG image data, baseline, precision 8, 890x760, components 3

$ xxd /tmp/m.jpg | head -1
00000000: ffd8 ffdb 0043 …

Magic is FF D8 FF DB — that's real JPEG. Not WebP wrapped. So:

  • Bytes: real JPEG ✓

  • MIME: image/jpeg ✓

  • URL: ends .jpg ✓

  • og:image:type: image/jpeg ✓

All four agree. The unfurl bots that read magic bytes directly (iMessage, WhatsApp) will accept the card. The ones that trust the header (Slack, Discord) will also accept it. No content-negotiation Russian roulette.

What this enables / changes

After the deploy, every page on https://lossless-group.github.io/lossless-ai-labs/ emits the Messages card. Pasting any page URL into a chat — iMessage, WhatsApp, Slack, Discord, LinkedIn DM, X DM — should land the new card without further configuration.

Cache caveat: unfurl bots cache aggressively (~7 days for some, ~30 for others). If a URL was previously pasted and rendered with the old Banner image, the cache will keep serving that stale preview. To force a re-unfurl, paste the URL with a no-op query string appended: https://lossless-group.github.io/lossless-ai-labs/?v=2. Bots key their cache by full URL, so ?v=2 is "the same page" but a "different URL" — they re-fetch and re-render.

Verification

Live <head> after deploy:

HTML
<meta property="og:image"           content=".../ogimage__Lossless-AI-Labs--Messages.jpg">
<meta property="og:image:secure_url" content=".../ogimage__Lossless-AI-Labs--Messages.jpg">
<meta property="og:image:type"      content="image/jpeg">
<meta property="og:image:width"     content="890">
<meta property="og:image:height"    content="760">
<meta property="og:image:alt"       content="Lossless AI-Labs share card sized for chat-preview unfurls (iMessage, WhatsApp, Slack, Discord).">
<meta name="twitter:image"          content=".../ogimage__Lossless-AI-Labs--Messages.jpg">

Honest verification step (the only one that catches the actual user-visible failure mode): paste the live URL into iMessage and WhatsApp and confirm the card renders. If it shows the old image, append ?v=2 and try again.

  • Earlier today: 2026-05-12_02.md (llms.txt port) and 2026-05-12_01.md (SortControls).

  • The skill that codifies the bytes/MIME/URL agreement rule: open-graph-share-seo-geo in lossless-skills/.

  • The image-generation discipline that produced the card: generate-consistent-og-images (same family — Ideogram v3 + DESIGN.md imagery: recipe).