summaryrefslogtreecommitdiff
path: root/src/app/banner.png/route.tsx
diff options
context:
space:
mode:
authorBertrand Yuan <bert.yuan@outlook.com>2025-12-15 23:48:10 +0800
committerBertrand Yuan <bert.yuan@outlook.com>2025-12-15 23:48:10 +0800
commit5b7ccf0b671e2999b62befc729a3e517a0433728 (patch)
tree8bf476dc7c75914c221042546840dc76267366df /src/app/banner.png/route.tsx
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.
Diffstat (limited to 'src/app/banner.png/route.tsx')
-rw-r--r--src/app/banner.png/route.tsx48
1 files changed, 48 insertions, 0 deletions
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,
+ });
+}