Show customer quotes as social-media-styled cards on your landing page. No Twitter embed JavaScript, no layout shift, no API keys.
Just migrated our OG images to @htmlpix.
Went from a 2-server Puppeteer setup to a single API call. Renders in 200ms. Should have done this months ago.
Twitter embeds load 200KB+ of JavaScript, cause layout shift, and break when the API changes. Instagram embeds need authentication. LinkedIn doesn't have embeds at all.
Manual screenshots look inconsistent: different resolutions, dark/light mode mismatch, outdated engagement numbers. And if the original post gets deleted, your screenshot shows nothing.
Use a tweet-style or post-style template. Set the name, handle, quote text, and engagement numbers. Mint a URL. Embed it as an <img> tag on your site.
It loads like any other image. No JavaScript, no third-party scripts, no CLS issues. The image is hosted on your terms, independent of whether the original post still exists.
1// Generate a Twitter/X post screenshot for your landing page2const res = await fetch("https://api.htmlpix.com/v1/url", {3 method: "POST",4 headers: {5 Authorization: `Bearer ${process.env.HTMLPIX_KEY}`,6 "Content-Type": "application/json",7 },8 body: JSON.stringify({9 templateId: FAKE_TWEET_TEMPLATE_ID,10 variables: {11 displayName: "Sarah Chen",12 handle: "@sarahchen_dev",13 verified: "true",14 tweetText: "Just migrated our OG images to @htmlpix.\n\nWent from a 2-server Puppeteer setup to a single API call. Renders in 200ms. Should have done this months ago.",15 timestamp: "2:47 PM",16 date: "Feb 17, 2026",17 views: "48.2K",18 replies: "142",19 retweets: "1,203",20 likes: "8,432",21 bookmarks: "892",22 },23 width: 1200,24 height: 675,25 }),26});2728const { url } = await res.json();29// Embed as <img> on your landing page — no Twitter embed script neededinterface Testimonial {
name: string;
handle: string;
text: string;
likes: string;
retweets: string;
}
export async function mintTestimonialScreenshots(testimonials: Testimonial[]) {
const res = await fetch("https://api.htmlpix.com/v1/urls", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.HTMLPIX_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
items: testimonials.map((t) => ({
templateId: process.env.TWEET_TEMPLATE_ID,
variables: {
displayName: t.name,
handle: t.handle,
tweetText: t.text,
verified: "true",
likes: t.likes,
retweets: t.retweets,
timestamp: "2:47 PM",
date: "Feb 17, 2026",
views: "12.4K",
replies: "24",
bookmarks: "128",
},
width: 1200,
height: 675,
})),
}),
});
const { urls } = await res.json();
return urls.map((u: any) => u.url);
}Embed scripts add 200KB+ JavaScript per widget. Manual screenshots look inconsistent. LinkedIn has no embed at all.
Render testimonials as static images. No JavaScript, no layout shift, no API dependency. Loads like any other image.
Images have fixed dimensions. No JavaScript loading after page render, no content jumping, no CLS penalty in Core Web Vitals.
Set the name, quote, engagement numbers, and timestamp. Show your strongest testimonials the way you want them.
Tweet-style, LinkedIn-style, Instagram-style. Each has a template with the right visual language for that platform.
No Twitter API key, no Instagram auth token, no embed script. Just an image URL. Works even if the original post is deleted.
A unique social preview for every page on your site. One template, one API call.
Personalized stats, dashboards, and banners rendered as images. Works in every email client.
Badges, year-in-review cards, and certificates your users can post on social media.
Post your key metrics to Slack or email as a clean dashboard image. Runs on a cron job.
One template, a spreadsheet of copy, and you have all your ad variants in minutes.
Branded product cards generated from your database. For social, email, and marketplaces.