From b34e200513b23d9fb913698173cd408f01f63f9c Mon Sep 17 00:00:00 2001 From: Maxwell <145994855+ping-maxwell@users.noreply.github.com> Date: Tue, 3 Mar 2026 12:05:11 -0800 Subject: [PATCH] docs: fix OG image (#8342) --- landing/app/api/og-release/route.tsx | 171 +++++++++++++++++++++ landing/app/api/og/route.tsx | 208 ++++++++++++++++++++++++++ landing/app/blog/[[...slug]]/page.tsx | 41 +++-- landing/app/blog/layout.tsx | 11 ++ landing/app/docs/[[...slug]]/page.tsx | 26 ++++ landing/app/layout.tsx | 20 ++- landing/assets/Geist.ttf | Bin 0 -> 106024 bytes landing/assets/GeistMono.ttf | Bin 0 -> 114088 bytes landing/package.json | 1 + pnpm-lock.yaml | 38 +++++ 10 files changed, 499 insertions(+), 17 deletions(-) create mode 100644 landing/app/api/og-release/route.tsx create mode 100644 landing/app/api/og/route.tsx create mode 100644 landing/assets/Geist.ttf create mode 100644 landing/assets/GeistMono.ttf diff --git a/landing/app/api/og-release/route.tsx b/landing/app/api/og-release/route.tsx new file mode 100644 index 0000000000..4d76eb8070 --- /dev/null +++ b/landing/app/api/og-release/route.tsx @@ -0,0 +1,171 @@ +import { ImageResponse } from "@vercel/og"; +import * as z from "zod"; +export const runtime = "edge"; + +const ogSchema = z.object({ + heading: z.string(), + description: z.string().optional(), + date: z.string().optional(), +}); + +export async function GET(req: Request) { + try { + const geist = await fetch( + new URL("../../../assets/Geist.ttf", import.meta.url), + ).then((res) => res.arrayBuffer()); + + const url = new URL(req.url); + const urlParamsValues = Object.fromEntries(url.searchParams); + const validParams = ogSchema.parse(urlParamsValues); + + const { heading, description, date } = validParams; + const trueHeading = + heading.length > 140 ? `${heading.substring(0, 140)}...` : heading; + + return new ImageResponse( +
6TRMrWb93sa6a;ya2
zz&GQOPmmK(J5f$XYg6PD)J~N%Q9et~Ldk478zpn(8E9>;oQu}x$$4mJzMPNpX4x!a
ziSy8h#c~NW%y!u>!oYvak(0$ylWXJ}5y=)0vOcay%Nyhdlx&n| 8r?_g9n5k1BkFq?hEN1we(otZKy;I5?5{lRgy
zB*hXV4TCuBZlSzaoS*YKci(Zx_McL{nxAaH4Vy&8ZfHMFW(5gd@zkn4*n2h`*8e+=qk9K##aFRhKosh
zPt$0nFkq#?oa(
TO&7hxN
zVrsUSmC00YBIMJ`*Z(x&fEx#@nVV^D8^p^k?TPyOZozcJN{shO-EKH7Y*km|Sj%ZC
zq}U9*$cT-#
Ic`dSvIRaz=rwXJJdVai24osOXq@eQg7yYNiR88p!viRDCMvxB5|#92pdTE?+{QS
zNh4IwiwB_Pk)B&P(&tl6CeLXvpbjNm@F{7scrn=ALA9A+sX{K)5@&LO9e(e$VQ{z#
z2Rs^$zL2re=x&yArQx0tG)bPkq*vLlo9Z1JpM;A@?Xscvz>r~wv1?an|DM*X2A6jq
zTAoxh*<`3`Zfj@?FgDIuU43bFd6BVZxU6DD?S-z?bzRNVKFogv^P}8FW~uoRq;15U
zw7r0KnX$|P
;ch`Yga@wS968Jj_3F}}PQnwRn;JY+Ium*!J+EdHk`HZ4k)edD2-
zIk|O%Ge6&PJF}Bk1ggf@^IcURj!^5?`oJk2i0b8zD7
HXWkivW05nA+eX%l)?NOGI(Mtz8EyWIA0?dTH+2mJ0I>>6(XAUymhd*UEGK2aI
z64dMQ4wKNg;n`r{+PQ!nc?I=#1kWWlh9e?PQ`=?80>%4gkoPNFuEg5i6%PQ4lv;1i`ALq|RdQQH9
zk!d=SQX{BNW2IXUnYLSYkFN9Vn;RJ4hP|xu?BBG1)4-mp_S%*cjg@T)afde;52d|p
z_4fEz@6ZpeNW5r`p|U;U<-Co9W9OOr
1
zbdimgTznwnfRV;yxOH*ME-BLpFTt=2=R90^aym>e^<%rNWXVnY`$d06MRnt^el;d<
zKl!<_F*)nxTeQKM$O*a~{l`iL0XtA#RK(#F)UIg570h5YNHwG>l*z7j)pmL1{DucM
z%BU2268hPb)Rtn0PVxQ(w15uYkif;V41gmzfJnj%RX@2%`co8~O?!%hf3ohspZ!j~
z{=WOz4mEog?@P0@NB|*0X~1(XZpIiU3Gqd^fWpd6DL4*cGms4fYeCMNq}XCyv84t7
zpuQ-)hMZ~Z+m5n=7j8PrmZ{&8zqjTSsFpeIKlK;6T>cAibD`82sLzQdtweuPB6KqJ
z{0!