From 5b7ccf0b671e2999b62befc729a3e517a0433728 Mon Sep 17 00:00:00 2001
From: Bertrand Yuan <bert.yuan@outlook.com>
Date: Mon, 15 Dec 2025 23:48:10 +0800
Subject: initial commit -- the front-end prototype

The initial code is base on Anirudh's work.

More to see at:

    https://github.com/techwithanirudh/shadcn-blog

Therefore, the code in this commit is under MIT license.
---
 src/app/banner.png/route.tsx | 48 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)
 create mode 100644 src/app/banner.png/route.tsx

(limited to 'src/app/banner.png/route.tsx')

diff --git a/src/app/banner.png/route.tsx b/src/app/banner.png/route.tsx
new file mode 100644
index 0000000..1cd53ac
--- /dev/null
+++ b/src/app/banner.png/route.tsx
@@ -0,0 +1,48 @@
+import { generateOGImage } from '@/app/banner.png/og';
+
+async function loadAssets(): Promise<
+  { name: string; data: Buffer; weight: 400 | 600; style: 'normal' }[]
+> {
+  const [
+    { base64Font: normal },
+    { base64Font: mono },
+    { base64Font: semibold },
+  ] = await Promise.all([
+    import('./fonts/geist-regular-otf.json').then((mod) => mod.default || mod),
+    import('./fonts/geistmono-regular-otf.json').then(
+      (mod) => mod.default || mod,
+    ),
+    import('./fonts/geist-semibold-otf.json').then((mod) => mod.default || mod),
+  ]);
+
+  return [
+    {
+      name: 'Geist',
+      data: Buffer.from(normal, 'base64'),
+      weight: 400 as const,
+      style: 'normal' as const,
+    },
+    {
+      name: 'Geist Mono',
+      data: Buffer.from(mono, 'base64'),
+      weight: 400 as const,
+      style: 'normal' as const,
+    },
+    {
+      name: 'Geist',
+      data: Buffer.from(semibold, 'base64'),
+      weight: 600 as const,
+      style: 'normal' as const,
+    },
+  ];
+}
+
+export async function GET() {
+  const [fonts] = await Promise.all([loadAssets()]);
+
+  return generateOGImage({
+    title: 'John Doe',
+    subtitle: 'Software Engineer',
+    fonts,
+  });
+}
-- 
cgit v1.2.3

