Ticket Open Graph Image Template
A ticket card with an event info panel, dashed divider, and a stub.
A ticket card with an event info panel, dashed divider, and a stub.
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 Ticket template for registration confirmations and pass pages. The whole card is a drawn ticket: the event details sit on the body and a torn stub carries the seat and code across a dashed divider. It reads instantly as something you hold, which makes the share feel like access rather than another announcement.
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 ticket 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. The ticket, the divider, and the code chip are all flat panels drawn in code, so the shape renders without any image asset.
Install with the shadcn CLI using your Shadcn UI Blocks API key:
npx shadcn@latest add @shadcn-ui-blocks/og-image-event-ticket
The file lands at app/opengraph-image.tsx, which makes it the site wide share card. For a dedicated ticket page, move it into that segment instead, for example app/tickets/[id]/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 label, the event, the venue, the date, the seat, and the code. The label is uppercased in code, so write it in normal case and let the render space it out. The brand mark is the letter A inline in the body; swap it for your own initial. Keep the seat short since it sits at display size on the stub, and feed a real order id into code through params on the default export so each ticket is unique.
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.