diff --git a/services/site/MEDIA.md b/services/site/MEDIA.md
index 562eaab3df7..578c3a71e36 100644
--- a/services/site/MEDIA.md
+++ b/services/site/MEDIA.md
@@ -9,7 +9,7 @@ The site's heavy media (product videos, arcade sounds, 3D models and download zi
- The build (`script/build.ts`) drops every `mediaFile` from the Worker's assets, so a local copy in `public/` never ships.
- In development, `vite dev` proxies `/files` to `https://dev.opencode.ai`, so pages play the dev bucket's copies.
- Images (`png`, `jpg`, `webp`, `avif`, `svg`), posters, fonts and the 3D decoders (`arcade3d/draco`, `arcade3d/basis`) stay in git and in the static assets.
-- The link-card videos in `og/` (`og:video`, from `script/og.ts`) are the exception: they are small and ship as static assets with their cards.
+- OG Studio's link cards are in the bucket too, under `site/og/` (see [Link cards](#link-cards)). `inBucket` leaves `og/` in the static assets only for a version 1 manifest, which copies its files there.
- `videoSources()` offers a video's AV1 and HEVC copies (`media/....mp4`, listed in `src/component/site/media-manifest.json`) before the H.264 original. The manifest lists only copies that are in the bucket; a video without copies plays its original.
| Folder | Files |
@@ -34,3 +34,42 @@ curl -sI https://dev.opencode.ai/files/site/2026-11/arcade3d/cabinet.glb # exp
```
A changed file gets a new dated prefix (for example `site/2026-12`) and a new `mediaBase`, so cached copies never go stale.
+
+## Link cards
+
+OG Studio (the local design tool that makes the link cards) uploads every card PNG and `og:video` MP4 to both files buckets under `site/og/`, and commits only `src/asset/og-studio/manifest.json`. File names end in a hash of their content (`home-98637499f6.png`, `home-uk-7dbf00d466.png`, `home-ec8331a4d6.mp4`), so an object never changes and a redesign only adds new objects; nothing is overwritten and nothing grows the repo.
+
+The manifest (version 2) names the files and where they are served:
+
+```json
+{
+ "version": 2,
+ "generator": "og-studio",
+ "width": 1200,
+ "height": 630,
+ "base": "/files/site/og",
+ "cards": {
+ "/": {
+ "image": "home-98637499f6.png",
+ "alt": "…",
+ "video": "home-ec8331a4d6.mp4",
+ "locales": { "uk": { "image": "home-uk-7dbf00d466.png", "alt": "…" } }
+ }
+ }
+}
+```
+
+`script/og.ts` writes `${base}/` into `src/lib/og-images.json`, and `ShareMeta` prefixes `https://opencode.ai`, so every stage's `og:image` and `og:video` load from the production bucket. Pages that are not in the manifest still get a card rendered by `script/og.ts` into `public/og/`.
+
+Upload new files to both buckets before you merge the manifest that names them. The buckets are in different accounts (`services/files/wrangler.jsonc`): `opencode-dev-files` in the dev account and `opencode-production-files` in the production account. To upload by hand, from a folder without a `cloudflare.config.ts` (so `cf` doesn't load this one):
+
+```sh
+CLOUDFLARE_ACCOUNT_ID=d8e944f537ceef3f06a5bd3aec1d7a53 cf r2 objects put site/og/home-98637499f6.png \
+ --bucket-name opencode-dev-files --file home-98637499f6.png --content-type image/png
+CLOUDFLARE_ACCOUNT_ID=15d29c8639fd3733b1b5486a2acfd968 cf r2 objects put site/og/home-98637499f6.png \
+ --bucket-name opencode-production-files --file home-98637499f6.png --content-type image/png
+curl -sI https://dev.opencode.ai/files/site/og/home-98637499f6.png # expect 200 and image/png
+curl -sI https://opencode.ai/files/site/og/home-98637499f6.png # expect 200 and image/png
+```
+
+Use `--content-type video/mp4` for videos. Never delete an object that a merged manifest names: old link previews keep loading it.
diff --git a/services/site/script/og.ts b/services/site/script/og.ts
index d5828da16f3..f111d37ca60 100644
--- a/services/site/script/og.ts
+++ b/services/site/script/og.ts
@@ -4,9 +4,13 @@
// title, image or template gives it a new URL and link previews refresh. Cards are English at
// every locale.
//
-// OG Studio (a local design tool) can replace any card. It writes finished files and a manifest to
-// src/asset/og-studio/: for each page an English PNG, an optional MP4 for og:video and an optional
-// PNG for each locale. Pages in that manifest use its files; every other page renders here.
+// OG Studio (a local design tool) can replace any card. For each page it makes an English PNG, an
+// optional MP4 for og:video and an optional PNG for each locale, and writes a manifest to
+// src/asset/og-studio/manifest.json. Pages in that manifest use its files; every other page renders
+// here. A version 2 manifest has a `base` (/files/site/og): OG Studio uploads the files to the
+// files bucket there (MEDIA.md) and only the manifest is in git, so pages link `${base}/`
+// and nothing is copied. A manifest without `base` (version 1) keeps its files beside it, and they
+// are copied into public/og/.
//
// This file is the cards' source of truth. The layout is David's template frame in Paper (the
// "OG images" file, frame "/ — dark"): a grid of #2e2e2e lines at x 72, 900 and 1128 and y 72,
@@ -202,19 +206,25 @@ const fonts = [
await mkdir(out, { recursive: true })
const manifest: Record = {}
const studio = await readStudio()
+const studioBase = studio?.base?.replace(/\/+$/, "") ?? "/og"
for (const [page, entry] of Object.entries(studio?.cards ?? {})) {
- const files = [entry.image, entry.video, ...Object.values(entry.locales ?? {}).map((l) => l.image)].filter(
- (file): file is string => Boolean(file),
- )
- await Promise.all(files.map((file) => Bun.write(path.join(out, file), Bun.file(path.join(root, STUDIO, file)))))
+ if (!studio?.base) {
+ const files = [entry.image, entry.video, ...Object.values(entry.locales ?? {}).map((l) => l.image)].filter(
+ (file): file is string => Boolean(file),
+ )
+ await Promise.all(files.map((file) => Bun.write(path.join(out, file), Bun.file(path.join(root, STUDIO, file)))))
+ }
manifest[page] = {
- src: `/og/${entry.image}`,
+ src: `${studioBase}/${entry.image}`,
alt: entry.alt,
- ...(entry.video ? { video: `/og/${entry.video}` } : {}),
+ ...(entry.video ? { video: `${studioBase}/${entry.video}` } : {}),
...(entry.locales
? {
locales: Object.fromEntries(
- Object.entries(entry.locales).map(([locale, l]) => [locale, { src: `/og/${l.image}`, alt: l.alt }]),
+ Object.entries(entry.locales).map(([locale, l]) => [
+ locale,
+ { src: `${studioBase}/${l.image}`, alt: l.alt },
+ ]),
),
}
: {}),
@@ -244,11 +254,15 @@ await Promise.all(
(await readdir(out)).filter((file) => !keep.has(file)).map((file) => rm(path.join(out, file), { force: true })),
)
await Bun.write(path.join(root, "src/lib/og-images.json"), JSON.stringify(manifest, null, 2) + "\n")
-console.log(`og: ${Object.keys(manifest).length} cards in public/og (${Object.keys(studio?.cards ?? {}).length} from OG Studio)`)
+console.log(
+ `og: ${Object.keys(manifest).length} cards (${Object.keys(studio?.cards ?? {}).length} from OG Studio${studio?.base ? ` at ${studioBase}` : ""})`,
+)
type OgEntry = { src: string; alt: string; video?: string; locales?: Record }
type Studio = {
+ /** Version 2: where the files are served (the files bucket's /files/site/og). */
+ base?: string
cards: Record }>
}
diff --git a/services/site/src/asset/og-studio/brand-4e61968505.png b/services/site/src/asset/og-studio/brand-4e61968505.png
deleted file mode 100644
index 683ed611ad2..00000000000
Binary files a/services/site/src/asset/og-studio/brand-4e61968505.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-9a58b5052b.mp4 b/services/site/src/asset/og-studio/brand-9a58b5052b.mp4
deleted file mode 100644
index 84223059789..00000000000
Binary files a/services/site/src/asset/og-studio/brand-9a58b5052b.mp4 and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-ar-e187032cd0.png b/services/site/src/asset/og-studio/brand-ar-e187032cd0.png
deleted file mode 100644
index 9ad837fd611..00000000000
Binary files a/services/site/src/asset/og-studio/brand-ar-e187032cd0.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-br-3681ae5782.png b/services/site/src/asset/og-studio/brand-br-3681ae5782.png
deleted file mode 100644
index 09706d39b0c..00000000000
Binary files a/services/site/src/asset/og-studio/brand-br-3681ae5782.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-da-7742cbb96d.png b/services/site/src/asset/og-studio/brand-da-7742cbb96d.png
deleted file mode 100644
index 680b391d423..00000000000
Binary files a/services/site/src/asset/og-studio/brand-da-7742cbb96d.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-de-f966de83b2.png b/services/site/src/asset/og-studio/brand-de-f966de83b2.png
deleted file mode 100644
index 24b793c2a9b..00000000000
Binary files a/services/site/src/asset/og-studio/brand-de-f966de83b2.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-es-bc04e49810.png b/services/site/src/asset/og-studio/brand-es-bc04e49810.png
deleted file mode 100644
index ab96147df6a..00000000000
Binary files a/services/site/src/asset/og-studio/brand-es-bc04e49810.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-fr-7e3c48cfb2.png b/services/site/src/asset/og-studio/brand-fr-7e3c48cfb2.png
deleted file mode 100644
index b7d2e6d1a07..00000000000
Binary files a/services/site/src/asset/og-studio/brand-fr-7e3c48cfb2.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-it-58abfa8752.png b/services/site/src/asset/og-studio/brand-it-58abfa8752.png
deleted file mode 100644
index b0ab8dbda2b..00000000000
Binary files a/services/site/src/asset/og-studio/brand-it-58abfa8752.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-ja-9cdf8661f4.png b/services/site/src/asset/og-studio/brand-ja-9cdf8661f4.png
deleted file mode 100644
index 6ea58d9ac06..00000000000
Binary files a/services/site/src/asset/og-studio/brand-ja-9cdf8661f4.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-ko-ab18888ef9.png b/services/site/src/asset/og-studio/brand-ko-ab18888ef9.png
deleted file mode 100644
index b212165bff4..00000000000
Binary files a/services/site/src/asset/og-studio/brand-ko-ab18888ef9.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-no-e44bce8749.png b/services/site/src/asset/og-studio/brand-no-e44bce8749.png
deleted file mode 100644
index 422239ef662..00000000000
Binary files a/services/site/src/asset/og-studio/brand-no-e44bce8749.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-pl-4c3904aa47.png b/services/site/src/asset/og-studio/brand-pl-4c3904aa47.png
deleted file mode 100644
index 5d3a3e06df3..00000000000
Binary files a/services/site/src/asset/og-studio/brand-pl-4c3904aa47.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-ru-a70005ae20.png b/services/site/src/asset/og-studio/brand-ru-a70005ae20.png
deleted file mode 100644
index a8bd81ffff1..00000000000
Binary files a/services/site/src/asset/og-studio/brand-ru-a70005ae20.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-th-6a64e2e42f.png b/services/site/src/asset/og-studio/brand-th-6a64e2e42f.png
deleted file mode 100644
index bb98858a5d2..00000000000
Binary files a/services/site/src/asset/og-studio/brand-th-6a64e2e42f.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-tr-b939ad63b2.png b/services/site/src/asset/og-studio/brand-tr-b939ad63b2.png
deleted file mode 100644
index 0a103705960..00000000000
Binary files a/services/site/src/asset/og-studio/brand-tr-b939ad63b2.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-uk-11a4e768ea.png b/services/site/src/asset/og-studio/brand-uk-11a4e768ea.png
deleted file mode 100644
index dc1b9c3e551..00000000000
Binary files a/services/site/src/asset/og-studio/brand-uk-11a4e768ea.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-zh-dcc60b4c81.png b/services/site/src/asset/og-studio/brand-zh-dcc60b4c81.png
deleted file mode 100644
index 77dd83caa50..00000000000
Binary files a/services/site/src/asset/og-studio/brand-zh-dcc60b4c81.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/brand-zht-2bef6d786d.png b/services/site/src/asset/og-studio/brand-zht-2bef6d786d.png
deleted file mode 100644
index 327ed752822..00000000000
Binary files a/services/site/src/asset/og-studio/brand-zht-2bef6d786d.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/changelog-9e6442949d.mp4 b/services/site/src/asset/og-studio/changelog-9e6442949d.mp4
deleted file mode 100644
index fae6dc4d45a..00000000000
Binary files a/services/site/src/asset/og-studio/changelog-9e6442949d.mp4 and /dev/null differ
diff --git a/services/site/src/asset/og-studio/changelog-a404a3db2b.png b/services/site/src/asset/og-studio/changelog-a404a3db2b.png
deleted file mode 100644
index 421ea5f00f8..00000000000
Binary files a/services/site/src/asset/og-studio/changelog-a404a3db2b.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-ar-388d8017c4.png b/services/site/src/asset/og-studio/desktop-ar-388d8017c4.png
deleted file mode 100644
index 56b031497ef..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-ar-388d8017c4.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-br-fb89a41fdd.png b/services/site/src/asset/og-studio/desktop-br-fb89a41fdd.png
deleted file mode 100644
index 9225b4c25fc..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-br-fb89a41fdd.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-da-d09be44295.png b/services/site/src/asset/og-studio/desktop-da-d09be44295.png
deleted file mode 100644
index e18602e8eae..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-da-d09be44295.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-de-9406d53da1.png b/services/site/src/asset/og-studio/desktop-de-9406d53da1.png
deleted file mode 100644
index c035a5e4548..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-de-9406d53da1.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-es-8f9bc611c9.png b/services/site/src/asset/og-studio/desktop-es-8f9bc611c9.png
deleted file mode 100644
index d6d5f34dbce..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-es-8f9bc611c9.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-f98d91d47d.png b/services/site/src/asset/og-studio/desktop-f98d91d47d.png
deleted file mode 100644
index 29a45d8c52c..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-f98d91d47d.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-fd77cfeffc.mp4 b/services/site/src/asset/og-studio/desktop-fd77cfeffc.mp4
deleted file mode 100644
index 2008740e0f4..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-fd77cfeffc.mp4 and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-fr-77596c43cb.png b/services/site/src/asset/og-studio/desktop-fr-77596c43cb.png
deleted file mode 100644
index c71155ec2e4..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-fr-77596c43cb.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-it-44bbc6db83.png b/services/site/src/asset/og-studio/desktop-it-44bbc6db83.png
deleted file mode 100644
index a5d22d2c84a..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-it-44bbc6db83.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-ja-7f55912afd.png b/services/site/src/asset/og-studio/desktop-ja-7f55912afd.png
deleted file mode 100644
index f4ba0a08ef2..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-ja-7f55912afd.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-ko-0f5228f239.png b/services/site/src/asset/og-studio/desktop-ko-0f5228f239.png
deleted file mode 100644
index 8625846103f..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-ko-0f5228f239.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-no-cc2b6484dc.png b/services/site/src/asset/og-studio/desktop-no-cc2b6484dc.png
deleted file mode 100644
index bcc88cc0edd..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-no-cc2b6484dc.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-pl-90701984e4.png b/services/site/src/asset/og-studio/desktop-pl-90701984e4.png
deleted file mode 100644
index b053f7c8450..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-pl-90701984e4.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-ru-247a36b9b4.png b/services/site/src/asset/og-studio/desktop-ru-247a36b9b4.png
deleted file mode 100644
index 982fd01e578..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-ru-247a36b9b4.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-th-f7dd62da10.png b/services/site/src/asset/og-studio/desktop-th-f7dd62da10.png
deleted file mode 100644
index a5ab04b767f..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-th-f7dd62da10.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-tr-82d26cda7b.png b/services/site/src/asset/og-studio/desktop-tr-82d26cda7b.png
deleted file mode 100644
index 3cbce9324dd..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-tr-82d26cda7b.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-uk-90ba41627f.png b/services/site/src/asset/og-studio/desktop-uk-90ba41627f.png
deleted file mode 100644
index e83829e4ce4..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-uk-90ba41627f.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-zh-50547b564e.png b/services/site/src/asset/og-studio/desktop-zh-50547b564e.png
deleted file mode 100644
index 5af9fb8d32a..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-zh-50547b564e.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/desktop-zht-0932f029e6.png b/services/site/src/asset/og-studio/desktop-zht-0932f029e6.png
deleted file mode 100644
index acf038b7a38..00000000000
Binary files a/services/site/src/asset/og-studio/desktop-zht-0932f029e6.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/docs-40387ee840.mp4 b/services/site/src/asset/og-studio/docs-40387ee840.mp4
deleted file mode 100644
index 3c16b8e0b28..00000000000
Binary files a/services/site/src/asset/og-studio/docs-40387ee840.mp4 and /dev/null differ
diff --git a/services/site/src/asset/og-studio/docs-e416d17432.png b/services/site/src/asset/og-studio/docs-e416d17432.png
deleted file mode 100644
index ec65e4ee18f..00000000000
Binary files a/services/site/src/asset/og-studio/docs-e416d17432.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/font-f345dc0fb4.png b/services/site/src/asset/og-studio/font-f345dc0fb4.png
deleted file mode 100644
index 7ee01f48a05..00000000000
Binary files a/services/site/src/asset/og-studio/font-f345dc0fb4.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/font-f768cba1a4.mp4 b/services/site/src/asset/og-studio/font-f768cba1a4.mp4
deleted file mode 100644
index 8ecc6abfe09..00000000000
Binary files a/services/site/src/asset/og-studio/font-f768cba1a4.mp4 and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-98637499f6.png b/services/site/src/asset/og-studio/home-98637499f6.png
deleted file mode 100644
index 42e6ab434d1..00000000000
Binary files a/services/site/src/asset/og-studio/home-98637499f6.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-ar-b920e0ad64.png b/services/site/src/asset/og-studio/home-ar-b920e0ad64.png
deleted file mode 100644
index 4de2110bab7..00000000000
Binary files a/services/site/src/asset/og-studio/home-ar-b920e0ad64.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-br-b231c2eeda.png b/services/site/src/asset/og-studio/home-br-b231c2eeda.png
deleted file mode 100644
index 31ea809a81d..00000000000
Binary files a/services/site/src/asset/og-studio/home-br-b231c2eeda.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-da-45a88d4705.png b/services/site/src/asset/og-studio/home-da-45a88d4705.png
deleted file mode 100644
index 88f0e96d9bf..00000000000
Binary files a/services/site/src/asset/og-studio/home-da-45a88d4705.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-de-7ab9fafeea.png b/services/site/src/asset/og-studio/home-de-7ab9fafeea.png
deleted file mode 100644
index 2f338b3e272..00000000000
Binary files a/services/site/src/asset/og-studio/home-de-7ab9fafeea.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-ec8331a4d6.mp4 b/services/site/src/asset/og-studio/home-ec8331a4d6.mp4
deleted file mode 100644
index 2641151ff15..00000000000
Binary files a/services/site/src/asset/og-studio/home-ec8331a4d6.mp4 and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-es-f7763c256a.png b/services/site/src/asset/og-studio/home-es-f7763c256a.png
deleted file mode 100644
index 31a9288606d..00000000000
Binary files a/services/site/src/asset/og-studio/home-es-f7763c256a.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-fr-8d71106c36.png b/services/site/src/asset/og-studio/home-fr-8d71106c36.png
deleted file mode 100644
index 1abf455a768..00000000000
Binary files a/services/site/src/asset/og-studio/home-fr-8d71106c36.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-it-5cf7f568ab.png b/services/site/src/asset/og-studio/home-it-5cf7f568ab.png
deleted file mode 100644
index 93cb669766e..00000000000
Binary files a/services/site/src/asset/og-studio/home-it-5cf7f568ab.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-ja-587ab3cf42.png b/services/site/src/asset/og-studio/home-ja-587ab3cf42.png
deleted file mode 100644
index 551056683df..00000000000
Binary files a/services/site/src/asset/og-studio/home-ja-587ab3cf42.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-ko-e2105c0c9d.png b/services/site/src/asset/og-studio/home-ko-e2105c0c9d.png
deleted file mode 100644
index b21646ab8bf..00000000000
Binary files a/services/site/src/asset/og-studio/home-ko-e2105c0c9d.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-no-f022750ce7.png b/services/site/src/asset/og-studio/home-no-f022750ce7.png
deleted file mode 100644
index da6932acd53..00000000000
Binary files a/services/site/src/asset/og-studio/home-no-f022750ce7.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-pl-f087f2cf92.png b/services/site/src/asset/og-studio/home-pl-f087f2cf92.png
deleted file mode 100644
index e0a4c8ac1c8..00000000000
Binary files a/services/site/src/asset/og-studio/home-pl-f087f2cf92.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-ru-964cb68c8b.png b/services/site/src/asset/og-studio/home-ru-964cb68c8b.png
deleted file mode 100644
index 7be5cf3b58a..00000000000
Binary files a/services/site/src/asset/og-studio/home-ru-964cb68c8b.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-th-6c04ac9833.png b/services/site/src/asset/og-studio/home-th-6c04ac9833.png
deleted file mode 100644
index a8606b3f565..00000000000
Binary files a/services/site/src/asset/og-studio/home-th-6c04ac9833.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-tr-47a272dcfc.png b/services/site/src/asset/og-studio/home-tr-47a272dcfc.png
deleted file mode 100644
index db337873d7c..00000000000
Binary files a/services/site/src/asset/og-studio/home-tr-47a272dcfc.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-uk-307b0149bf.png b/services/site/src/asset/og-studio/home-uk-307b0149bf.png
deleted file mode 100644
index f0bcd448cca..00000000000
Binary files a/services/site/src/asset/og-studio/home-uk-307b0149bf.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-zh-df85e49f5d.png b/services/site/src/asset/og-studio/home-zh-df85e49f5d.png
deleted file mode 100644
index 9ff067d62e4..00000000000
Binary files a/services/site/src/asset/og-studio/home-zh-df85e49f5d.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/home-zht-98c8b3339f.png b/services/site/src/asset/og-studio/home-zht-98c8b3339f.png
deleted file mode 100644
index 5914c2218eb..00000000000
Binary files a/services/site/src/asset/og-studio/home-zht-98c8b3339f.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/legal-84723c3950.png b/services/site/src/asset/og-studio/legal-84723c3950.png
deleted file mode 100644
index de9a6cb67d1..00000000000
Binary files a/services/site/src/asset/og-studio/legal-84723c3950.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/legal-b1b3009c7e.mp4 b/services/site/src/asset/og-studio/legal-b1b3009c7e.mp4
deleted file mode 100644
index 93705b34fdc..00000000000
Binary files a/services/site/src/asset/og-studio/legal-b1b3009c7e.mp4 and /dev/null differ
diff --git a/services/site/src/asset/og-studio/manifest.json b/services/site/src/asset/og-studio/manifest.json
index ba00ae7064d..a40bf3564a5 100644
--- a/services/site/src/asset/og-studio/manifest.json
+++ b/services/site/src/asset/og-studio/manifest.json
@@ -1,8 +1,9 @@
{
- "version": 1,
+ "version": 2,
"generator": "og-studio",
"width": 1200,
"height": 630,
+ "base": "/files/site/og",
"cards": {
"/": {
"image": "home-98637499f6.png",
diff --git a/services/site/src/asset/og-studio/mini-40b065f853.mp4 b/services/site/src/asset/og-studio/mini-40b065f853.mp4
deleted file mode 100644
index 2b551926c54..00000000000
Binary files a/services/site/src/asset/og-studio/mini-40b065f853.mp4 and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-8925d0cfb2.png b/services/site/src/asset/og-studio/mini-8925d0cfb2.png
deleted file mode 100644
index 9494d45362c..00000000000
Binary files a/services/site/src/asset/og-studio/mini-8925d0cfb2.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-ar-d7e44843fb.png b/services/site/src/asset/og-studio/mini-ar-d7e44843fb.png
deleted file mode 100644
index 0fb2f67454e..00000000000
Binary files a/services/site/src/asset/og-studio/mini-ar-d7e44843fb.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-br-e02808797d.png b/services/site/src/asset/og-studio/mini-br-e02808797d.png
deleted file mode 100644
index 2b53d4ab0d9..00000000000
Binary files a/services/site/src/asset/og-studio/mini-br-e02808797d.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-da-4276a15528.png b/services/site/src/asset/og-studio/mini-da-4276a15528.png
deleted file mode 100644
index f0da9c31c8a..00000000000
Binary files a/services/site/src/asset/og-studio/mini-da-4276a15528.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-de-7bb140b7ce.png b/services/site/src/asset/og-studio/mini-de-7bb140b7ce.png
deleted file mode 100644
index e9a06dfa55d..00000000000
Binary files a/services/site/src/asset/og-studio/mini-de-7bb140b7ce.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-es-7fe7879e9f.png b/services/site/src/asset/og-studio/mini-es-7fe7879e9f.png
deleted file mode 100644
index 62562ef5577..00000000000
Binary files a/services/site/src/asset/og-studio/mini-es-7fe7879e9f.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-fr-28ba3b5c4b.png b/services/site/src/asset/og-studio/mini-fr-28ba3b5c4b.png
deleted file mode 100644
index 3ca80907b71..00000000000
Binary files a/services/site/src/asset/og-studio/mini-fr-28ba3b5c4b.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-it-9337e405db.png b/services/site/src/asset/og-studio/mini-it-9337e405db.png
deleted file mode 100644
index 91b2428cb59..00000000000
Binary files a/services/site/src/asset/og-studio/mini-it-9337e405db.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-ja-4b20294714.png b/services/site/src/asset/og-studio/mini-ja-4b20294714.png
deleted file mode 100644
index 18632062121..00000000000
Binary files a/services/site/src/asset/og-studio/mini-ja-4b20294714.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-ko-bcfac56878.png b/services/site/src/asset/og-studio/mini-ko-bcfac56878.png
deleted file mode 100644
index ff04afa2a42..00000000000
Binary files a/services/site/src/asset/og-studio/mini-ko-bcfac56878.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-no-77c2f54b76.png b/services/site/src/asset/og-studio/mini-no-77c2f54b76.png
deleted file mode 100644
index fae4ec51170..00000000000
Binary files a/services/site/src/asset/og-studio/mini-no-77c2f54b76.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-pl-9c504fe22b.png b/services/site/src/asset/og-studio/mini-pl-9c504fe22b.png
deleted file mode 100644
index c0c543ac56b..00000000000
Binary files a/services/site/src/asset/og-studio/mini-pl-9c504fe22b.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-ru-cf5249f206.png b/services/site/src/asset/og-studio/mini-ru-cf5249f206.png
deleted file mode 100644
index 8aa4744f642..00000000000
Binary files a/services/site/src/asset/og-studio/mini-ru-cf5249f206.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-th-44230e6a55.png b/services/site/src/asset/og-studio/mini-th-44230e6a55.png
deleted file mode 100644
index ed3ae9ab580..00000000000
Binary files a/services/site/src/asset/og-studio/mini-th-44230e6a55.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-tr-902044f5b1.png b/services/site/src/asset/og-studio/mini-tr-902044f5b1.png
deleted file mode 100644
index ce9d3ecfd38..00000000000
Binary files a/services/site/src/asset/og-studio/mini-tr-902044f5b1.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-uk-b1a0ce7ada.png b/services/site/src/asset/og-studio/mini-uk-b1a0ce7ada.png
deleted file mode 100644
index b490966c62d..00000000000
Binary files a/services/site/src/asset/og-studio/mini-uk-b1a0ce7ada.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-zh-d93b26b0f0.png b/services/site/src/asset/og-studio/mini-zh-d93b26b0f0.png
deleted file mode 100644
index da41bd08a64..00000000000
Binary files a/services/site/src/asset/og-studio/mini-zh-d93b26b0f0.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mini-zht-92ff4b74c6.png b/services/site/src/asset/og-studio/mini-zht-92ff4b74c6.png
deleted file mode 100644
index 00495f69d79..00000000000
Binary files a/services/site/src/asset/og-studio/mini-zht-92ff4b74c6.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-3078f52f0b.mp4 b/services/site/src/asset/og-studio/mobile-3078f52f0b.mp4
deleted file mode 100644
index 3688af75bf2..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-3078f52f0b.mp4 and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-5d6ef9e218.png b/services/site/src/asset/og-studio/mobile-5d6ef9e218.png
deleted file mode 100644
index 66447b16d59..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-5d6ef9e218.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-ar-375257861f.png b/services/site/src/asset/og-studio/mobile-ar-375257861f.png
deleted file mode 100644
index 470c2738cbe..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-ar-375257861f.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-br-d4805263f3.png b/services/site/src/asset/og-studio/mobile-br-d4805263f3.png
deleted file mode 100644
index 726d815fe36..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-br-d4805263f3.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-da-95ed46fc52.png b/services/site/src/asset/og-studio/mobile-da-95ed46fc52.png
deleted file mode 100644
index 1bc61fdd496..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-da-95ed46fc52.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-de-4333c9568f.png b/services/site/src/asset/og-studio/mobile-de-4333c9568f.png
deleted file mode 100644
index 934e91118aa..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-de-4333c9568f.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-es-150c9bc64d.png b/services/site/src/asset/og-studio/mobile-es-150c9bc64d.png
deleted file mode 100644
index d43e05f3f6c..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-es-150c9bc64d.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-fr-426ec197eb.png b/services/site/src/asset/og-studio/mobile-fr-426ec197eb.png
deleted file mode 100644
index bbd02826375..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-fr-426ec197eb.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-it-9b75162215.png b/services/site/src/asset/og-studio/mobile-it-9b75162215.png
deleted file mode 100644
index 85b0d4b8d3c..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-it-9b75162215.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-ja-3b2f77645f.png b/services/site/src/asset/og-studio/mobile-ja-3b2f77645f.png
deleted file mode 100644
index 480553f3518..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-ja-3b2f77645f.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-ko-8006f2c551.png b/services/site/src/asset/og-studio/mobile-ko-8006f2c551.png
deleted file mode 100644
index 61f3f18cf55..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-ko-8006f2c551.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-no-ee27348e57.png b/services/site/src/asset/og-studio/mobile-no-ee27348e57.png
deleted file mode 100644
index 22484fc9fc7..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-no-ee27348e57.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-pl-fb5b61ee83.png b/services/site/src/asset/og-studio/mobile-pl-fb5b61ee83.png
deleted file mode 100644
index 57d2de06a97..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-pl-fb5b61ee83.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-ru-a427270345.png b/services/site/src/asset/og-studio/mobile-ru-a427270345.png
deleted file mode 100644
index aa422211153..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-ru-a427270345.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-th-a689afa7d7.png b/services/site/src/asset/og-studio/mobile-th-a689afa7d7.png
deleted file mode 100644
index 0dedc36decf..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-th-a689afa7d7.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-tr-502c613f4d.png b/services/site/src/asset/og-studio/mobile-tr-502c613f4d.png
deleted file mode 100644
index e790ae7fa1a..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-tr-502c613f4d.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-uk-d51e745314.png b/services/site/src/asset/og-studio/mobile-uk-d51e745314.png
deleted file mode 100644
index 0461e8dbbaa..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-uk-d51e745314.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-zh-efbc913b2d.png b/services/site/src/asset/og-studio/mobile-zh-efbc913b2d.png
deleted file mode 100644
index 1e1054f58ea..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-zh-efbc913b2d.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/mobile-zht-40ad44a7bc.png b/services/site/src/asset/og-studio/mobile-zht-40ad44a7bc.png
deleted file mode 100644
index 2338890f72a..00000000000
Binary files a/services/site/src/asset/og-studio/mobile-zht-40ad44a7bc.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-7302275958.png b/services/site/src/asset/og-studio/press-7302275958.png
deleted file mode 100644
index 21fc96ff0fc..00000000000
Binary files a/services/site/src/asset/og-studio/press-7302275958.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-ar-c93124613c.png b/services/site/src/asset/og-studio/press-ar-c93124613c.png
deleted file mode 100644
index 17f62fe0e4e..00000000000
Binary files a/services/site/src/asset/og-studio/press-ar-c93124613c.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-br-3a70f6deeb.png b/services/site/src/asset/og-studio/press-br-3a70f6deeb.png
deleted file mode 100644
index f8abfe4cc17..00000000000
Binary files a/services/site/src/asset/og-studio/press-br-3a70f6deeb.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-da-f8576fc87c.png b/services/site/src/asset/og-studio/press-da-f8576fc87c.png
deleted file mode 100644
index d16f630efa5..00000000000
Binary files a/services/site/src/asset/og-studio/press-da-f8576fc87c.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-de-6ea8ec3da2.png b/services/site/src/asset/og-studio/press-de-6ea8ec3da2.png
deleted file mode 100644
index b48e7968772..00000000000
Binary files a/services/site/src/asset/og-studio/press-de-6ea8ec3da2.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-e1999bf877.mp4 b/services/site/src/asset/og-studio/press-e1999bf877.mp4
deleted file mode 100644
index 511064a0abb..00000000000
Binary files a/services/site/src/asset/og-studio/press-e1999bf877.mp4 and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-es-6c94963b28.png b/services/site/src/asset/og-studio/press-es-6c94963b28.png
deleted file mode 100644
index 4d84f85541e..00000000000
Binary files a/services/site/src/asset/og-studio/press-es-6c94963b28.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-fr-335aaac834.png b/services/site/src/asset/og-studio/press-fr-335aaac834.png
deleted file mode 100644
index d7018eee786..00000000000
Binary files a/services/site/src/asset/og-studio/press-fr-335aaac834.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-it-36a3ec1056.png b/services/site/src/asset/og-studio/press-it-36a3ec1056.png
deleted file mode 100644
index 9636165abce..00000000000
Binary files a/services/site/src/asset/og-studio/press-it-36a3ec1056.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-ja-1da88d40a5.png b/services/site/src/asset/og-studio/press-ja-1da88d40a5.png
deleted file mode 100644
index 00c280dd5c6..00000000000
Binary files a/services/site/src/asset/og-studio/press-ja-1da88d40a5.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-ko-14af5ff28a.png b/services/site/src/asset/og-studio/press-ko-14af5ff28a.png
deleted file mode 100644
index 9cd042f7c56..00000000000
Binary files a/services/site/src/asset/og-studio/press-ko-14af5ff28a.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-no-dd4dd40f57.png b/services/site/src/asset/og-studio/press-no-dd4dd40f57.png
deleted file mode 100644
index 6e83e24e064..00000000000
Binary files a/services/site/src/asset/og-studio/press-no-dd4dd40f57.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-pl-ecd83e566f.png b/services/site/src/asset/og-studio/press-pl-ecd83e566f.png
deleted file mode 100644
index c4ad2064adf..00000000000
Binary files a/services/site/src/asset/og-studio/press-pl-ecd83e566f.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-ru-6492c49f5c.png b/services/site/src/asset/og-studio/press-ru-6492c49f5c.png
deleted file mode 100644
index 9b7f016f21c..00000000000
Binary files a/services/site/src/asset/og-studio/press-ru-6492c49f5c.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-th-d380e8e759.png b/services/site/src/asset/og-studio/press-th-d380e8e759.png
deleted file mode 100644
index 7568b85d911..00000000000
Binary files a/services/site/src/asset/og-studio/press-th-d380e8e759.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-tr-f35943d004.png b/services/site/src/asset/og-studio/press-tr-f35943d004.png
deleted file mode 100644
index f107253970b..00000000000
Binary files a/services/site/src/asset/og-studio/press-tr-f35943d004.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-uk-9c6ac236c6.png b/services/site/src/asset/og-studio/press-uk-9c6ac236c6.png
deleted file mode 100644
index 5a1b7e00246..00000000000
Binary files a/services/site/src/asset/og-studio/press-uk-9c6ac236c6.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-zh-64d48f25c7.png b/services/site/src/asset/og-studio/press-zh-64d48f25c7.png
deleted file mode 100644
index 3ecc46630fc..00000000000
Binary files a/services/site/src/asset/og-studio/press-zh-64d48f25c7.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/press-zht-9fd76be7af.png b/services/site/src/asset/og-studio/press-zht-9fd76be7af.png
deleted file mode 100644
index 32c8a27214e..00000000000
Binary files a/services/site/src/asset/og-studio/press-zht-9fd76be7af.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-7c9ecd8a39.png b/services/site/src/asset/og-studio/product-7c9ecd8a39.png
deleted file mode 100644
index 7ee04d41734..00000000000
Binary files a/services/site/src/asset/og-studio/product-7c9ecd8a39.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-ar-4e66be4d55.png b/services/site/src/asset/og-studio/product-ar-4e66be4d55.png
deleted file mode 100644
index a77f7bac46b..00000000000
Binary files a/services/site/src/asset/og-studio/product-ar-4e66be4d55.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-br-f77fb5a75d.png b/services/site/src/asset/og-studio/product-br-f77fb5a75d.png
deleted file mode 100644
index 2918b62675c..00000000000
Binary files a/services/site/src/asset/og-studio/product-br-f77fb5a75d.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-c179b05171.mp4 b/services/site/src/asset/og-studio/product-c179b05171.mp4
deleted file mode 100644
index a38751a8f83..00000000000
Binary files a/services/site/src/asset/og-studio/product-c179b05171.mp4 and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-da-f4f586f9dc.png b/services/site/src/asset/og-studio/product-da-f4f586f9dc.png
deleted file mode 100644
index 414e824801b..00000000000
Binary files a/services/site/src/asset/og-studio/product-da-f4f586f9dc.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-de-827b14e025.png b/services/site/src/asset/og-studio/product-de-827b14e025.png
deleted file mode 100644
index 9223aac9558..00000000000
Binary files a/services/site/src/asset/og-studio/product-de-827b14e025.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-es-340a74e4fc.png b/services/site/src/asset/og-studio/product-es-340a74e4fc.png
deleted file mode 100644
index bd25d7c627d..00000000000
Binary files a/services/site/src/asset/og-studio/product-es-340a74e4fc.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-fr-0bebf29659.png b/services/site/src/asset/og-studio/product-fr-0bebf29659.png
deleted file mode 100644
index 1ce8cce9e41..00000000000
Binary files a/services/site/src/asset/og-studio/product-fr-0bebf29659.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-it-8ae226ef99.png b/services/site/src/asset/og-studio/product-it-8ae226ef99.png
deleted file mode 100644
index 10e4988e6ec..00000000000
Binary files a/services/site/src/asset/og-studio/product-it-8ae226ef99.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-ja-2d38926c36.png b/services/site/src/asset/og-studio/product-ja-2d38926c36.png
deleted file mode 100644
index 981d8a849fa..00000000000
Binary files a/services/site/src/asset/og-studio/product-ja-2d38926c36.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-ko-4fc8d9b1d6.png b/services/site/src/asset/og-studio/product-ko-4fc8d9b1d6.png
deleted file mode 100644
index 0a72570062e..00000000000
Binary files a/services/site/src/asset/og-studio/product-ko-4fc8d9b1d6.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-no-4a2be52aea.png b/services/site/src/asset/og-studio/product-no-4a2be52aea.png
deleted file mode 100644
index 45db6d7a1ef..00000000000
Binary files a/services/site/src/asset/og-studio/product-no-4a2be52aea.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-pl-4e06d0a0b6.png b/services/site/src/asset/og-studio/product-pl-4e06d0a0b6.png
deleted file mode 100644
index b19418de1c7..00000000000
Binary files a/services/site/src/asset/og-studio/product-pl-4e06d0a0b6.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-ru-bdc2201a48.png b/services/site/src/asset/og-studio/product-ru-bdc2201a48.png
deleted file mode 100644
index 50603e5c433..00000000000
Binary files a/services/site/src/asset/og-studio/product-ru-bdc2201a48.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-th-cc450951de.png b/services/site/src/asset/og-studio/product-th-cc450951de.png
deleted file mode 100644
index 22d923ca887..00000000000
Binary files a/services/site/src/asset/og-studio/product-th-cc450951de.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-tr-1e9442de6c.png b/services/site/src/asset/og-studio/product-tr-1e9442de6c.png
deleted file mode 100644
index 03bbfe50fd2..00000000000
Binary files a/services/site/src/asset/og-studio/product-tr-1e9442de6c.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-uk-2037d8b379.png b/services/site/src/asset/og-studio/product-uk-2037d8b379.png
deleted file mode 100644
index 3525c456b51..00000000000
Binary files a/services/site/src/asset/og-studio/product-uk-2037d8b379.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-zh-8d8bc557f4.png b/services/site/src/asset/og-studio/product-zh-8d8bc557f4.png
deleted file mode 100644
index 77df6e37364..00000000000
Binary files a/services/site/src/asset/og-studio/product-zh-8d8bc557f4.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/product-zht-06d0c500b3.png b/services/site/src/asset/og-studio/product-zht-06d0c500b3.png
deleted file mode 100644
index 40e25b646bf..00000000000
Binary files a/services/site/src/asset/og-studio/product-zht-06d0c500b3.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-ar-9ce21753f1.png b/services/site/src/asset/og-studio/sdk-ar-9ce21753f1.png
deleted file mode 100644
index 986159f2f1f..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-ar-9ce21753f1.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-br-3015a30545.png b/services/site/src/asset/og-studio/sdk-br-3015a30545.png
deleted file mode 100644
index f3fc86befaf..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-br-3015a30545.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-d26c8f84d9.png b/services/site/src/asset/og-studio/sdk-d26c8f84d9.png
deleted file mode 100644
index bd7a26f25a3..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-d26c8f84d9.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-d329895728.mp4 b/services/site/src/asset/og-studio/sdk-d329895728.mp4
deleted file mode 100644
index 40484ae6e5a..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-d329895728.mp4 and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-da-67d88441cf.png b/services/site/src/asset/og-studio/sdk-da-67d88441cf.png
deleted file mode 100644
index de5e8d3c7d5..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-da-67d88441cf.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-de-745692762f.png b/services/site/src/asset/og-studio/sdk-de-745692762f.png
deleted file mode 100644
index c01d3ae1906..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-de-745692762f.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-es-aa394787f8.png b/services/site/src/asset/og-studio/sdk-es-aa394787f8.png
deleted file mode 100644
index df97948d388..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-es-aa394787f8.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-fr-48c4aaf56f.png b/services/site/src/asset/og-studio/sdk-fr-48c4aaf56f.png
deleted file mode 100644
index 9b17f2a8d6f..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-fr-48c4aaf56f.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-it-ac41238478.png b/services/site/src/asset/og-studio/sdk-it-ac41238478.png
deleted file mode 100644
index 8e5d530f63c..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-it-ac41238478.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-ja-4edf56821b.png b/services/site/src/asset/og-studio/sdk-ja-4edf56821b.png
deleted file mode 100644
index f47611d9634..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-ja-4edf56821b.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-ko-5fc0543a2c.png b/services/site/src/asset/og-studio/sdk-ko-5fc0543a2c.png
deleted file mode 100644
index ee087589b70..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-ko-5fc0543a2c.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-no-58988ed6f2.png b/services/site/src/asset/og-studio/sdk-no-58988ed6f2.png
deleted file mode 100644
index 08d78c418fc..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-no-58988ed6f2.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-pl-9b00e23de8.png b/services/site/src/asset/og-studio/sdk-pl-9b00e23de8.png
deleted file mode 100644
index 596626e9c8c..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-pl-9b00e23de8.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-ru-0a0de7fe5a.png b/services/site/src/asset/og-studio/sdk-ru-0a0de7fe5a.png
deleted file mode 100644
index 9f601245073..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-ru-0a0de7fe5a.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-th-782715452d.png b/services/site/src/asset/og-studio/sdk-th-782715452d.png
deleted file mode 100644
index 7e7b9f3546f..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-th-782715452d.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-tr-a39e14c52c.png b/services/site/src/asset/og-studio/sdk-tr-a39e14c52c.png
deleted file mode 100644
index 0c1fbd8bc79..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-tr-a39e14c52c.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-uk-872475bacf.png b/services/site/src/asset/og-studio/sdk-uk-872475bacf.png
deleted file mode 100644
index a390b519498..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-uk-872475bacf.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-zh-f935310ad9.png b/services/site/src/asset/og-studio/sdk-zh-f935310ad9.png
deleted file mode 100644
index 99fe11b02b4..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-zh-f935310ad9.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/sdk-zht-07c6538f46.png b/services/site/src/asset/og-studio/sdk-zht-07c6538f46.png
deleted file mode 100644
index 40a47262318..00000000000
Binary files a/services/site/src/asset/og-studio/sdk-zht-07c6538f46.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-ar-9f1b9a236a.png b/services/site/src/asset/og-studio/terminal-ar-9f1b9a236a.png
deleted file mode 100644
index a27c64c2364..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-ar-9f1b9a236a.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-b25f4ce5fe.mp4 b/services/site/src/asset/og-studio/terminal-b25f4ce5fe.mp4
deleted file mode 100644
index 322a855e956..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-b25f4ce5fe.mp4 and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-br-51344a44be.png b/services/site/src/asset/og-studio/terminal-br-51344a44be.png
deleted file mode 100644
index 71d614919b5..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-br-51344a44be.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-d2dc426c65.png b/services/site/src/asset/og-studio/terminal-d2dc426c65.png
deleted file mode 100644
index f538179ab2e..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-d2dc426c65.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-da-c497b08041.png b/services/site/src/asset/og-studio/terminal-da-c497b08041.png
deleted file mode 100644
index 3555bd7dc33..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-da-c497b08041.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-de-d2b06871e4.png b/services/site/src/asset/og-studio/terminal-de-d2b06871e4.png
deleted file mode 100644
index 11be1f1c169..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-de-d2b06871e4.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-es-b616a76d0a.png b/services/site/src/asset/og-studio/terminal-es-b616a76d0a.png
deleted file mode 100644
index cbb29bf3438..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-es-b616a76d0a.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-fr-6d7406601e.png b/services/site/src/asset/og-studio/terminal-fr-6d7406601e.png
deleted file mode 100644
index 2b5c6a94e06..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-fr-6d7406601e.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-it-c824bb8ef6.png b/services/site/src/asset/og-studio/terminal-it-c824bb8ef6.png
deleted file mode 100644
index 9582631ae9e..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-it-c824bb8ef6.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-ja-583888e16d.png b/services/site/src/asset/og-studio/terminal-ja-583888e16d.png
deleted file mode 100644
index fa63988a1a0..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-ja-583888e16d.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-ko-6b4b1c271a.png b/services/site/src/asset/og-studio/terminal-ko-6b4b1c271a.png
deleted file mode 100644
index 0492ac98325..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-ko-6b4b1c271a.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-no-6c9eef767f.png b/services/site/src/asset/og-studio/terminal-no-6c9eef767f.png
deleted file mode 100644
index bc7b06423bd..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-no-6c9eef767f.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-pl-d09d1d4401.png b/services/site/src/asset/og-studio/terminal-pl-d09d1d4401.png
deleted file mode 100644
index 8de75506218..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-pl-d09d1d4401.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-ru-d7933e2f12.png b/services/site/src/asset/og-studio/terminal-ru-d7933e2f12.png
deleted file mode 100644
index 70332191a40..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-ru-d7933e2f12.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-th-3e10fd190f.png b/services/site/src/asset/og-studio/terminal-th-3e10fd190f.png
deleted file mode 100644
index 74b98607c69..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-th-3e10fd190f.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-tr-f04135ed01.png b/services/site/src/asset/og-studio/terminal-tr-f04135ed01.png
deleted file mode 100644
index 66114c4c85f..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-tr-f04135ed01.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-uk-179b0bf424.png b/services/site/src/asset/og-studio/terminal-uk-179b0bf424.png
deleted file mode 100644
index 3d84e4e8aeb..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-uk-179b0bf424.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-zh-d87bec3290.png b/services/site/src/asset/og-studio/terminal-zh-d87bec3290.png
deleted file mode 100644
index ce295b1c959..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-zh-d87bec3290.png and /dev/null differ
diff --git a/services/site/src/asset/og-studio/terminal-zht-2c14139b59.png b/services/site/src/asset/og-studio/terminal-zht-2c14139b59.png
deleted file mode 100644
index d2df26fe3e6..00000000000
Binary files a/services/site/src/asset/og-studio/terminal-zht-2c14139b59.png and /dev/null differ
diff --git a/services/site/src/component/share-meta.tsx b/services/site/src/component/share-meta.tsx
index 9942acce5e7..a63ffd142d1 100644
--- a/services/site/src/component/share-meta.tsx
+++ b/services/site/src/component/share-meta.tsx
@@ -1,10 +1,13 @@
import { Meta } from "@solidjs/meta"
-import { Show } from "solid-js"
+import { For } from "solid-js"
import { config } from "~/config"
import { useLanguage } from "~/context/language"
import type { Locale } from "~/lib/language"
import type { OgImage } from "~/lib/og"
+/** One Open Graph (`property`) or X (`name`) tag. */
+export type ShareTag = { property: string; content: string } | { name: string; content: string }
+
/**
* A page's link preview: Open Graph and X tags. `image` is the page's 1200×630 PNG card from
* `ogImage` (script/og.ts renders them). Crawlers need absolute image URLs.
@@ -12,39 +15,52 @@ import type { OgImage } from "~/lib/og"
*/
export function ShareMeta(props: { title: string; description: string; image: OgImage; englishOnly?: boolean }) {
const language = useLanguage()
- const image = () => (props.englishOnly ? undefined : props.image.locales?.[language.locale()]) ?? props.image
- return (
- <>
-
-
-
-
-
-
-
-
-
-
- {/* Only iMessage and Discord play og:video. Everyone else shows og:image. */}
-
- {(video) => (
- <>
-
-
-
-
-
- >
- )}
-
-
-
-
-
-
-
- >
- )
+ const tags = () =>
+ shareTags({ ...props, locale: props.englishOnly ? "en" : language.locale(), englishOnly: props.englishOnly })
+ return {(tag) => }
+}
+
+/**
+ * The tags ShareMeta renders, for pages that write their own head (the docs, DocsLayout.tsx).
+ * A card's src and video are site paths, its own (/og/…) or the files bucket's (/files/site/og/…).
+ */
+export function shareTags(props: {
+ title: string
+ description: string
+ image: OgImage
+ locale: Locale
+ englishOnly?: boolean
+}): ShareTag[] {
+ const image = (props.englishOnly ? undefined : props.image.locales?.[props.locale]) ?? props.image
+ const video = props.image.video && `${config.baseUrl}${props.image.video}`
+ return [
+ { property: "og:type", content: "website" },
+ { property: "og:site_name", content: "OpenCode" },
+ { property: "og:locale", content: OG_LOCALE[props.englishOnly ? "en" : props.locale] },
+ { property: "og:title", content: props.title },
+ { property: "og:description", content: props.description },
+ { property: "og:image", content: `${config.baseUrl}${image.src}` },
+ { property: "og:image:type", content: "image/png" },
+ { property: "og:image:width", content: "1200" },
+ { property: "og:image:height", content: "630" },
+ { property: "og:image:alt", content: image.alt },
+ // Only iMessage and Discord play og:video. Everyone else shows og:image.
+ ...(video
+ ? [
+ { property: "og:video", content: video },
+ { property: "og:video:secure_url", content: video },
+ { property: "og:video:type", content: "video/mp4" },
+ { property: "og:video:width", content: "1200" },
+ { property: "og:video:height", content: "630" },
+ ]
+ : []),
+ { name: "twitter:card", content: "summary_large_image" },
+ { name: "twitter:site", content: `@${new URL(config.social.twitter).pathname.slice(1)}` },
+ { name: "twitter:title", content: props.title },
+ { name: "twitter:description", content: props.description },
+ { name: "twitter:image", content: `${config.baseUrl}${image.src}` },
+ { name: "twitter:image:alt", content: image.alt },
+ ]
}
// Open Graph wants language_TERRITORY.
diff --git a/services/site/src/docs/layouts/DocsLayout.tsx b/services/site/src/docs/layouts/DocsLayout.tsx
index 66b2696c2df..f9e87711467 100644
--- a/services/site/src/docs/layouts/DocsLayout.tsx
+++ b/services/site/src/docs/layouts/DocsLayout.tsx
@@ -9,10 +9,12 @@ import { Bracket } from "~/component/site/site-controls"
import { monoFontLatin } from "~/component/site/mono-fonts"
import { OnThisPage } from "~/component/site/on-this-page"
import { defaultRootAttributes, themeScript } from "~/component/site/preload-settings"
+import { shareTags } from "~/component/share-meta"
import { config } from "~/config"
import { useI18n } from "~/context/i18n"
import type { I18n } from "~/context/i18n-context"
import { parseLocale } from "~/lib/language"
+import { ogImage } from "~/lib/og"
import { latestDocs, type DocsSet } from "../config"
import { DocsFooter } from "../components/DocsFooter"
import { DocsSearchDialog } from "../components/DocsSearchDialog"
@@ -79,6 +81,7 @@ export function DocsLayout(props: {
const next = at >= 0 ? pages[at + 1] : undefined
const current = pages[at]
const description = props.description ?? `${props.title} documentation for OpenCode.`
+ const title = `${props.title} | OpenCode${props.set.id === "v1" ? " V1" : ""}`
const canonical = new URL(docsHref(props.currentSlug, props.set), "https://opencode.ai").href
const contents = props.headings
.filter((heading) => heading.depth === 2 || heading.depth === 3)
@@ -124,7 +127,11 @@ export function DocsLayout(props: {
{(href) => }
- {`${props.title} | OpenCode${props.set.id === "v1" ? " V1" : ""}`}
+ {title}
+ {/* The link preview: OG Studio's /docs card (image and video) in English, with the page's title and description. */}
+
+ {(tag) => }
+
diff --git a/services/site/src/lib/media.ts b/services/site/src/lib/media.ts
index f287bf0655b..78b66c397ae 100644
--- a/services/site/src/lib/media.ts
+++ b/services/site/src/lib/media.ts
@@ -10,9 +10,10 @@ export const mediaBase = "/files/site/2026-11"
export const mediaFile = /\.(mp4|webm|mov|mp3|wav|ogg|m4a|zip|glb|gltf)$/i
/**
- * Whether a file under public/ (its path from there) goes to the files bucket. The link-card videos
- * script/og.ts writes to og/ (og:video, under 100 kB each) are the exception: they ship as static
- * assets with the cards that name them.
+ * Whether a file under public/ (its path from there) goes to the files bucket. og/ is the exception:
+ * OG Studio's cards and videos are in the bucket under site/og (MEDIA.md) and never reach public/,
+ * but a version 1 manifest without a `base` still copies its videos there, and they must ship with
+ * the cards that name them (script/og.ts).
*/
export const inBucket = (file: string) => mediaFile.test(file) && !/^og[\\/]/.test(file)