Skip to content

docs: open graph + twitter cards + site metadata (social-kit port)#21

Merged
vitbokisch merged 1 commit into
mainfrom
design/social-og
May 21, 2026
Merged

docs: open graph + twitter cards + site metadata (social-kit port)#21
vitbokisch merged 1 commit into
mainfrom
design/social-og

Conversation

@vitbokisch

Copy link
Copy Markdown
Member

Summary

Ports the OG/Twitter card design from the Claude Design social-kit handoff into the docs site, plus the surrounding metadata that platforms (Slack, Discord, Twitter/X, LinkedIn, iMessage, etc.) use to render link previews.

Metadata (layout.tsx)

  • metadataBasehttps://vitus-labs.com (overridable via NEXT_PUBLIC_SITE_URL)
  • Title template + objective description (15 packages, 4.82 KB, 170+, 123)
  • Full openGraph block (type, locale, url, siteName, title, description)
  • twitter block — summary_large_image, creator handle
  • robots, alternates.canonical, keywords, category, authors
  • viewport.themeColor per color-scheme + colorScheme: 'dark light'

OG image (opengraph-image.tsx)

1200×630 PNG generated at build time via next/og ImageResponse (with dynamic = 'force-static' so the static export emits a real PNG to /out/opengraph-image). Matches the social-kit design:

  • Stacked-triangle mark + vitus·labs lockup top-left
  • Headline "Build, style & ship faster." with chartreuse italic on faster.
  • Measured subtitle row
  • Orbital motif (rings + center disc + accent node) on the right
  • Radial chartreuse + cobalt aurora glow with faint dot-grid behind
  • Footer: vitus-labs.com · MIT · TYPESCRIPT-FIRST

Twitter image (twitter-image.tsx)

Re-uses the OG renderer (same 1200×630 dimensions). Route-segment config is inlined because Next.js parses it statically and rejects re-exported config.

Test plan

  • bun run build — clean (70 pages, includes /opengraph-image and /twitter-image)
  • /out/opengraph-image is a real 1200×630 8-bit PNG (143 KB)
  • Visual check matches the social-kit's og-default.png design
  • After merge: validate against https://www.opengraph.xyz/ once the deploy lands

🤖 Generated with Claude Code

Ports the OG card from the Claude Design social-kit handoff
(1BcwLvogEyTm8D4LpOGcSw) into the docs site, plus the surrounding
metadata that platforms use to render link previews.

**Metadata (`layout.tsx`)**
- `metadataBase` → `https://vitus-labs.com` (overridable via
  `NEXT_PUBLIC_SITE_URL`)
- `title` template + default `Vitus Labs — Composable React engine`
- `description` includes the measured numbers: 15 packages, 4.82 KB
  CSS-in-JS engine, 170+ CSS props, 123 motion presets
- `openGraph` block (type, locale, url, siteName, title, description)
- `twitter` block (`summary_large_image`, creator handle)
- `robots`, `alternates.canonical`, `keywords`, `category`, `authors`
- `viewport.themeColor` per color-scheme (`#0a0b0d` dark, `#fdfbf5`
  light) and `colorScheme: 'dark light'`

**OG image (`opengraph-image.tsx`)**
- 1200×630 PNG generated at build time via `next/og` `ImageResponse`
  (with `dynamic = 'force-static'` so the static export emits a real
  PNG to `/out/opengraph-image` instead of needing a runtime).
- Stacked-triangle mark + `vitus·labs` lockup top-left.
- Headline `Build, style & ship faster.` with chartreuse italic on
  `faster.` — same wording as the hero.
- Measured subtitle row.
- Orbital motif (four rings + center disc + accent node) on the right.
- Radial chartreuse + cobalt aurora glow with faint dot-grid behind.
- Footer: `vitus-labs.com` · `MIT · TYPESCRIPT-FIRST`.

**Twitter image (`twitter-image.tsx`)**
- Same 1200×630 artwork — Twitter's `summary_large_image` uses the
  same dimensions, so it re-uses the default export from
  `opengraph-image.tsx`. Route-segment config (`dynamic`, `alt`,
  `size`, `contentType`) is inlined per file because Next.js parses
  it statically and rejects re-exported config.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@vitbokisch vitbokisch merged commit e347cc7 into main May 21, 2026
1 check passed
@vitbokisch vitbokisch deleted the design/social-og branch May 21, 2026 15:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant