From 7401b39a1f5badd1eaf1702027f4acb11140069c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Bokisch?= Date: Thu, 21 May 2026 18:08:21 +0200 Subject: [PATCH] docs: redesign OG card for LinkedIn feed legibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous OG card was too quiet for LinkedIn-feed sharing — small headline, abstract orbital motif as the dominant visual, no immediate "what is this" signal. Redesigned the layout to read in two seconds from a feed thumbnail: - **Trust pill top-right** — `● OPEN SOURCE · MIT · v2.6.1` with pulsing accent dot. Engineers scanning a feed see "open source + current" before reading the headline. - **Oversized headline** — `Build React apps / faster.` at 112pt with chartreuse italic on `faster.`. Lines split for hard-stop pacing. - **Four measured-stat pills** as the visual rhythm — `15 packages`, `4.82 KB engine` (highlighted accent pill), `170+ CSS props`, `123 motion presets`. Pills are concrete, scannable, and replace the abstract orbital motif. They're the actual differentiation. - **Aurora dialled back** — chartreuse + cobalt bloom anchored top-right, faint cobalt counter-note bottom-left, dot grid masked to the corner so it doesn't fight the copy. - **Tag strip footer** — `TYPESCRIPT-FIRST · REACT · REACT-NATIVE` spells out the audience LinkedIn-side. Same 1200×630 dimensions; same static-PNG generation; Twitter card re-uses it. The previous version felt like a design portfolio piece; this one is a feed-friendly billboard with the value prop encoded in type and pills, not in metaphor. Co-Authored-By: Claude Opus 4.7 --- src/app/opengraph-image.tsx | 241 +++++++++++++++++------------------- 1 file changed, 115 insertions(+), 126 deletions(-) diff --git a/src/app/opengraph-image.tsx b/src/app/opengraph-image.tsx index 0b57092..8910178 100644 --- a/src/app/opengraph-image.tsx +++ b/src/app/opengraph-image.tsx @@ -3,14 +3,14 @@ import { ImageResponse } from 'next/og' /** * Default Open Graph + Twitter card image for the site root. * - * Generated at build time as a static PNG (1200×630) so social platforms - * cache a single asset. Matches the social-kit design: stacked-triangle - * mark + lockup top-left, big headline center, orbital motif on the right, - * chartreuse + cobalt aurora backdrop on dark. + * Tuned for LinkedIn / X / Slack feed posting: dark plate (high contrast + * against feeds' white surfaces), oversized headline, four measured-fact + * pills as the visual rhythm, restrained orbital motif on the right. + * + * Generated at build time via next/og ImageResponse so a single PNG ships + * to /out/opengraph-image and platforms cache one canonical asset. */ -// Static export: prerender at build time so a single PNG is emitted to /out -// and platforms cache one canonical asset. export const dynamic = 'force-static' export const alt = 'Vitus Labs — Composable React engine. 15 packages, 4.82 KB CSS-in-JS engine, 170+ CSS props, 123 motion presets.' @@ -18,13 +18,13 @@ export const size = { width: 1200, height: 630 } export const contentType = 'image/png' const INK = '#0A0B0D' -const PAPER = '#ECEAE2' +const SURFACE = '#14161A' +const PAPER = '#F1EFE7' const ACCENT = '#C8FF3A' const COBALT = '#2F4DFF' const MUTED = '#A8A69C' const BORDER = '#2E3138' -/** Stacked-triangle mark — three trapezoidal slabs over a unit canvas. */ function Mark({ size: s = 36 }: { size?: number }) { return ( - {rings.map((r, i) => ( -
- ))} - {/* Nodes anchored at the right edge of each ring */} -
-
- {/* Center disc with mark */} -
- -
+ {children}
) } @@ -129,7 +78,7 @@ export default async function OpenGraphImage() { height: '100%', display: 'flex', flexDirection: 'column', - padding: '64px 72px', + padding: '56px 72px', background: INK, color: PAPER, fontFamily: 'sans-serif', @@ -137,72 +86,113 @@ export default async function OpenGraphImage() { overflow: 'hidden', }} > - {/* Background — radial chartreuse glow on the right + faint cobalt counter-note */} + {/* Aurora — chartreuse bloom on the right + cobalt counter-note bottom-left */}
- {/* Faint dot-grid */} +
+ {/* Dot grid, masked to top-right so it doesn't fight the headline */}
- - - {/* Lockup */} + {/* TOP ROW — lockup left, MIT pill right */}
- +
+ +
+ vitus + + · + + labs +
+
- vitus - - · - - labs + + OPEN SOURCE · MIT · v2.6.1
- {/* Headline block */} + {/* BODY — eyebrow, big headline, stat pill row */}
- Build, style + Build React apps - & ship{' '} @@ -243,20 +231,17 @@ export default async function OpenGraphImage() {
-
- 15 packages · 4.82 KB CSS-in-JS engine · 170+ CSS props · 123 motion - presets + + {/* Stat pills */} +
+ 15 packages + 4.82 KB engine + 170+ CSS props + 123 motion presets
- {/* Footer */} + {/* FOOTER */}
vitus-labs.com - MIT · TYPESCRIPT-FIRST + + TYPESCRIPT-FIRST · REACT · REACT-NATIVE +
, {