summaryrefslogtreecommitdiff
path: root/src/app/(main)/banner.png/route.tsx
diff options
context:
space:
mode:
authorBertrand Yuan <bert.yuan@outlook.com>2025-12-16 00:12:49 +0800
committerBertrand Yuan <bert.yuan@outlook.com>2025-12-16 00:12:49 +0800
commit02ae938c238c9d18448d17a8ec92c0edd8c17463 (patch)
treedcd6a30505adb52522b20af2c0ac27f713403f10 /src/app/(main)/banner.png/route.tsx
parent48b07bc308a35734a6a7a305c8fdccbfa47de7d8 (diff)
feat(back-end): introduce payload
Payload is the next.js Headless CMS and App Framework, I would like to pick it up and modify it as it is MIT licensed. Many features in Payload is not applicable for our project. So, I modify it so that it is light and clear.
Diffstat (limited to 'src/app/(main)/banner.png/route.tsx')
-rw-r--r--src/app/(main)/banner.png/route.tsx48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/app/(main)/banner.png/route.tsx b/src/app/(main)/banner.png/route.tsx
new file mode 100644
index 0000000..d3bfdc8
--- /dev/null
+++ b/src/app/(main)/banner.png/route.tsx
@@ -0,0 +1,48 @@
+import { generateOGImage } from '@/app/(main)/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,
+ });
+}