ENGLISH·COURSE API
    Preparing search index...
    • The two Geist weights the sharing card renders in, as ImageResponse wants them.

      Returns Promise<
          (
              | { name: string; data: NonSharedBuffer; weight: 400; style: "normal" }
              | { name: string; data: NonSharedBuffer; weight: 800; style: "normal" }
          )[],
      >

      The font descriptors, ready to hand to ImageResponse

      ImageResponse runs Satori, not a browser: it takes fonts as raw buffers and accepts ttf, otf and woff — but not woff2, which is the only format next/font/google caches. So the two weights are vendored under src/app/fonts/ rather than shared with the rest of the app's typography. See the README beside them.

      Read once per process and reused. Every card render would otherwise re-read 70 KB from disk for a result that never changes.