Comparison Open Graph Image Template
A comparison card with two feature columns and a title.
A comparison card with two feature columns and a title.
Every Open Graph image template is included with Basic and Pro. Pick a plan to copy the code, install with the CLI, and download the raw SVG.
Already purchased? Log in
Use the Comparison template for versus and switch pages, where the point is that you do the things the alternative does not. It sets the title and your address across the top, then stands two columns side by side, yours filled in dark with solid checks and the other outlined with hollow ones, row for row down the same feature list.
This template is a metadata image route for the Next.js App Router. The file exports size, contentType, and alt values plus a default async function that returns an ImageResponse. When the comparison page is shared, satori converts the JSX into an SVG document, the runtime rasterizes that SVG into a 1200 by 630 PNG, and Next.js serves the result and wires the og:image and twitter:image tags into the page head automatically. Both columns read from one shared feature list, so the rows always line up no matter what you compare.
Install with the shadcn CLI using your Shadcn UI Blocks API key:
npx shadcn@latest add @shadcn-ui-blocks/og-image-comparison
The file lands at app/opengraph-image.tsx, which makes it the site wide share card. For a comparison page, move it into that route instead, for example app/compare/acme-vs-old/opengraph-image.tsx. You can also copy the code from this page straight into your project.
The card renders text with Inter, read from assets/fonts at your project root with node:fs so the font files never ship to the browser. Download the latin woff files for weights 400, 500, 600, and 700 from Fontsource and save them as assets/fonts/inter-latin-400-normal.woff and so on.
The content object holds the title, the url, a shared features array, and two sides a and b, each with a name and a checks array of booleans. The checks line up index for index with features, so a true draws a filled check and a false draws a hollow ring on that row. Keep the arrays the same length as features, which reads best at three rows. The Check component takes a dark flag so the mark reads on either column.
satori supports a focused subset of CSS: flexbox layout only, flat colors, and an explicit display: flex on any element with multiple children. Keep those rules in mind if you rework the layout.