Year in review Open Graph Image Template
A dark year in review card with a big year and three stat columns.
A dark year in review card with a big year and three stat columns.
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 Year in review template for annual wrap up posts. It sets the year at display size over three statistics that tell its story, so the recap leads with the numbers a reader will remember.
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 post 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. Because the card is code, the three stats can come from the same source as the post body, so the share card never disagrees with the page.
Install with the shadcn CLI using your Shadcn UI Blocks API key:
npx shadcn@latest add @shadcn-ui-blocks/og-image-year-in-review
The file lands at app/opengraph-image.tsx, which makes it the site wide share card. For a review post, move it into that segment instead, for example app/blog/2026/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 brand, the year, the subtitle, a stats array of value and label pairs, and the url. The year renders at 170 pixels, so a four digit year fits comfortably; the subtitle beneath names the post in one short line. The stats row divides its width evenly across three columns, each with a left border, so three is the sweet spot, two works, and four gets tight. Keep each value compact, a number plus a short unit, because they render at 48 pixels, and hold each label to two or three words.
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.