import { ImageResponse } from "next/og" import { getAllIcons } from "@/lib/api" import { preloadAllIcons, readIconFile } from "@/lib/icon-cache" export const revalidate = false export async function generateStaticParams() { const iconsData = await getAllIcons() if (process.env.CI_MODE === "false") { return Object.keys(iconsData) .slice(0, 5) .map((icon) => ({ icon, })) } return Object.keys(iconsData).map((icon) => ({ icon, })) } export const size = { width: 1200, height: 630, } export default async function Image({ params }: { params: Promise<{ icon: string }> }) { const { icon } = await params if (!icon) { console.error(`[Opengraph Image] Icon not found for ${icon}`) return new ImageResponse(
Icon not found
, { ...size }, ) } await preloadAllIcons() const iconsData = await getAllIcons() const totalIcons = Object.keys(iconsData).length const index = Object.keys(iconsData).indexOf(icon) const formattedIconName = icon .split("-") .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) .join(" ") const iconData = await readIconFile(icon) const iconUrl = iconData ? `data:image/png;base64,${iconData.toString("base64")}` : null return new ImageResponse(
{/* Background blur blobs */}
{/* Main content layout */}
{/* Icon container */}
{iconUrl ? ( {formattedIconName} ) : (
{formattedIconName}
)}
{/* Text content */}
Download {formattedIconName} icon for free
Amongst {totalIcons} other high-quality dashboard icons
{["SVG", "PNG", "WEBP"].map((format) => (
{format}
))}
{/* Footer */}
dashboardicons.com
, { ...size, }, ) }