Skip to content

feat(website): generated Open Graph cards and Organization JSON-LD - #102

Merged
NicholasKissel merged 1 commit into
mainfrom
seo/og-images
Sep 24, 2026
Merged

NicholasKissel merged 1 commit into
mainfrom
seo/og-images

Conversation

@NicholasKissel

Copy link
Copy Markdown
Member

Summary

  • Replaces the stale remote promo OG images with 18 generated cards in public/images/og/, rendered from src/lib/ogImage.ts by pnpm render:og (Playwright + sharp). Cards use the site's porcelain surface, Manrope, and the Rivet wordmark or product mark; the default card carries the Thinker cutout from the talk-to-an-engineer hero.
  • Wires every page family to a card: BaseLayout defaults to default; MarketingLayout and DocsArticlePage fall back to the owning product's card; pricing, deploy, guides, integrations, blog/changelog, enterprise, startups, support, talk-to-an-engineer, brand, and registry pick theirs explicitly. Secure Exec overview keeps its ported dark card with the corrected 630 px height.
  • Centralizes company facts in src/data/company.ts and emits them as site-wide Organization JSON-LD (legal name, address, founders with sameAs, support contact).
  • FAQ questions render as <h3> in FaqList.
  • SEO_PLAN.md records what shipped and the open items (positioning canon, founding date, remaining metadata work).

Verification

  • pnpm build: 386 pages, exit 0.
  • pnpm check:seo: passes except the 6 pre-existing /secure-exec/ findings (forbidden SoftwareApplication JSON-LD; 5 comparison pages with no inbound links), untouched here.
  • All 18 cards visually inspected at 1200×630; light/dark theme unaffected (OG images are static).

Notes

An /about/ page was built and then removed at the founder's request before this PR; the Organization JSON-LD carries the facts it would have repeated.

Replace the stale remote promo OG images with a set of 18 cards rendered
from `src/lib/ogImage.ts` by `pnpm render:og` (Playwright + sharp) into
`public/images/og/`. Cards sit on the site's porcelain surface in Manrope
with the Rivet wordmark or product mark; the default card carries the
Thinker cutout used on the talk-to-an-engineer hero.

Every page family resolves a card: BaseLayout defaults to `default`,
MarketingLayout and DocsArticlePage fall back to the owning product's
card, and pricing, deploy, guides, integrations, blog, changelog,
enterprise, startups, support, talk-to-an-engineer, brand, and registry
pick theirs explicitly. The Secure Exec overview keeps its ported dark
card with the corrected 630 px height.

Centralize company facts in `src/data/company.ts` and emit them as the
site-wide Organization JSON-LD (legal name, address, founders with
sameAs, support contact). FAQ questions now render as <h3>.

SEO_PLAN.md records what shipped and what remains.

Co-authored-by: Nicholas Kissel <nicholas@rivet.gg>
Amp-Thread-ID: https://ampcode.com/threads/T-1196e8e4-59f8-4f3a-9824-62be43fdf8f7
Co-authored-by: Amp <amp@ampcode.com>
@railway-app

railway-app Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

🚅 Deployed to the website-pr-102 environment in rivet-website

Service Status Web Updated
website 🕒 Building (View Logs) Web Sep 24, 2026 at 8:11 pm UTC

@railway-app
railway-app Bot temporarily deployed to rivet-website / website-pr-102 September 24, 2026 20:11 Destroyed
@NicholasKissel
NicholasKissel merged commit fa1b515 into main Sep 24, 2026
2 of 4 checks passed
@NicholasKissel
NicholasKissel deleted the seo/og-images branch September 24, 2026 20:13

@the-company-company the-company-company Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 1 medium-severity finding

Reviewed commit 560fec3.

Comment thread src/lib/ogImage.ts
export const OG_CARDS: OgCard[] = [
{
id: "default",
headline: "The orchestrator for agentic workloads.",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 Medium · Use the canonical company positioning in site-wide metadata

This default card is now the preview for every page without an explicit card, but its headline uses the generic “orchestrator for agentic workloads” positioning that CLAUDE.md explicitly prohibits for public-facing copy and replaces with “Rivet enables stateful workloads to run forever.” The same prohibited positioning is also newly published in COMPANY.description, so it is emitted in the Organization JSON-LD on every page. Use the canonical tagline/description in both metadata sources (or update the repository convention in the same approved copy change) before shipping these generated cards.

This branch was successfully deployed

No deployments
rivet-website / website-pr-102 — 560fec3e Deployed Sep 24, 2026 by railway-app[bot]
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.

2 participants