From 43b96bb84b6f7fd8321b21d0f1a4f40b46436676 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Fri, 13 Feb 2026 15:37:02 +0100 Subject: [PATCH] feat(og): adapt premium industrial style for OG images --- apps/web/app/api/og/[[...slug]]/route.tsx | 97 ++++-------- apps/web/public/fonts/Inter-Bold.woff | Bin 0 -> 31320 bytes apps/web/public/fonts/Inter-Regular.woff | Bin 0 -> 30696 bytes apps/web/src/components/OGImageTemplate.tsx | 154 ++++++++++++++++++++ apps/web/src/lib/og-helper.tsx | 54 +++++++ 5 files changed, 233 insertions(+), 72 deletions(-) create mode 100644 apps/web/public/fonts/Inter-Bold.woff create mode 100644 apps/web/public/fonts/Inter-Regular.woff create mode 100644 apps/web/src/components/OGImageTemplate.tsx create mode 100644 apps/web/src/lib/og-helper.tsx diff --git a/apps/web/app/api/og/[[...slug]]/route.tsx b/apps/web/app/api/og/[[...slug]]/route.tsx index b7d8701..8a36f60 100644 --- a/apps/web/app/api/og/[[...slug]]/route.tsx +++ b/apps/web/app/api/og/[[...slug]]/route.tsx @@ -1,89 +1,42 @@ -import { ImageResponse } from 'next/og'; -import { blogPosts } from '../../../../src/data/blogPosts'; +import { ImageResponse } from "next/og"; +import { blogPosts } from "../../../../src/data/blogPosts"; +import { OGImageTemplate } from "../../../../src/components/OGImageTemplate"; +import { getOgFonts, OG_IMAGE_SIZE } from "../../../../src/lib/og-helper"; -export const runtime = 'edge'; +export const runtime = "nodejs"; export async function GET( request: Request, - { params }: { params: Promise<{ slug?: string[] }> } + { params }: { params: Promise<{ slug?: string[] }> }, ) { const { slug: slugArray } = await params; - const slug = slugArray?.[0] || 'home'; + const slug = slugArray?.[0] || "home"; let title: string; let description: string; + let label: string | undefined; - if (slug === 'home') { - title = 'Marc Mintel'; - description = 'Technical problem solver\'s blog - practical insights and learning notes'; + if (slug === "home") { + title = "Marc Mintel"; + description = + "Technical problem solver's blog - practical insights and learning notes"; + label = "Engineering"; } else { - const post = blogPosts.find(p => p.slug === slug); - title = post?.title || 'Marc Mintel'; - description = (post?.description || 'Technical problem solver\'s blog - practical insights and learning notes').slice(0, 100); + const post = blogPosts.find((p) => p.slug === slug); + title = post?.title || "Marc Mintel"; + description = + post?.description || + "Technical problem solver's blog - practical insights and learning notes"; + label = post ? "Blog Post" : "Engineering"; } + const fonts = await getOgFonts(); + return new ImageResponse( - ( -
-
-
- {title} -
-
- {description} -
-
- mintel.me -
-
- ), + , { - width: 1200, - height: 630, - } + ...OG_IMAGE_SIZE, + fonts: fonts as any, + }, ); } diff --git a/apps/web/public/fonts/Inter-Bold.woff b/apps/web/public/fonts/Inter-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..161b01e8217e38fa23ff535ae9c95c77f295c485 GIT binary patch literal 31320 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 Om!xA*I5a%sc#BSn9X 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 R)JSReoA?KePXy`!003TsIQRen literal 0 HcmV?d00001 diff --git a/apps/web/public/fonts/Inter-Regular.woff b/apps/web/public/fonts/Inter-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..2f21ed484182ce5eeaf53879ea2bd2460ee06324 GIT binary patch literal 30696 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 literal 0 HcmV?d00001 diff --git a/apps/web/src/components/OGImageTemplate.tsx b/apps/web/src/components/OGImageTemplate.tsx new file mode 100644 index 0000000..4ccfc0d --- /dev/null +++ b/apps/web/src/components/OGImageTemplate.tsx @@ -0,0 +1,154 @@ +import React from "react"; + +interface OGImageTemplateProps { + title: string; + description?: string; + label?: string; +} + +export function OGImageTemplate({ + title, + description, + label, +}: OGImageTemplateProps) { + const accentBlue = "#3b82f6"; + const slateDark = "#0f172a"; + const slateText = "#1e293b"; + const slateLight = "#64748b"; + + const containerStyle: React.CSSProperties = { + height: "100%", + width: "100%", + display: "flex", + flexDirection: "column", + alignItems: "flex-start", + justifyContent: "center", + backgroundColor: "#ffffff", + padding: "80px", + position: "relative", + fontFamily: "Inter", + }; + + return ( +
+ {/* Background Technographic Accent */} +
+ +
+ {/* Label / Category */} + {label && ( +
+ {label} +
+ )} + + {/* Title */} +
40 ? "64px" : "82px", + fontWeight: 700, + color: slateDark, + lineHeight: "1.1", + maxWidth: "950px", + marginBottom: "32px", + display: "flex", + letterSpacing: "-0.025em", + }} + > + {title} +
+ + {/* Description */} + {description && ( +
+ {description.length > 160 + ? description.substring(0, 157) + "..." + : description} +
+ )} +
+ + {/* Brand Footer */} +
+
+
+ mintel.me +
+
+ + {/* Blue Brand Strip */} +
+
+ ); +} diff --git a/apps/web/src/lib/og-helper.tsx b/apps/web/src/lib/og-helper.tsx new file mode 100644 index 0000000..284ddc9 --- /dev/null +++ b/apps/web/src/lib/og-helper.tsx @@ -0,0 +1,54 @@ +import { readFileSync } from "fs"; +import { join } from "path"; + +/** + * Loads the Inter fonts for use in Satori (Next.js OG Image generation). + * Since we are using runtime = 'nodejs', we can read them from the filesystem. + */ +export async function getOgFonts() { + const boldFontPath = join( + process.cwd(), + "apps/web/public/fonts/Inter-Bold.woff", + ); + const regularFontPath = join( + process.cwd(), + "apps/web/public/fonts/Inter-Regular.woff", + ); + + try { + console.log( + `[OG] Loading fonts: bold=${boldFontPath}, regular=${regularFontPath}`, + ); + const boldFont = readFileSync(boldFontPath); + const regularFont = readFileSync(regularFontPath); + console.log( + `[OG] Fonts loaded successfully (${boldFont.length} and ${regularFont.length} bytes)`, + ); + + return [ + { + name: "Inter", + data: boldFont, + weight: 700 as const, + style: "normal" as const, + }, + { + name: "Inter", + data: regularFont, + weight: 400 as const, + style: "normal" as const, + }, + ]; + } catch (error) { + console.error(`[OG] Failed to load fonts from ${process.cwd()}:`, error); + return []; + } +} + +/** + * Common configuration for OG images + */ +export const OG_IMAGE_SIZE = { + width: 1200, + height: 630, +};