From 80eebf5abbf7356ed46b56e3e940427aead1536e Mon Sep 17 00:00:00 2001 From: Jungwon Sohn Date: Fri, 31 Jul 2026 12:41:56 +0900 Subject: [PATCH 1/2] feat: rename OpenVideo to OpenScene and move the site to openscene.app (#160) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: rename OpenVideo to OpenScene and move the site to openscene.app Renames the product across the monorepo and makes `openscene.app` its canonical origin. `apps/openvideo` becomes `apps/openscene` and the workspace package becomes `@theorvane/openscene-site`. The canonical origin, sitemap, robots directives, OpenGraph metadata, and the Theorvane home product link all move to `https://openscene.app`. The wordmark is authored as `OPENVIDEO`, so the header, footer, docs shell, and generated OG image each needed the split markup updated rather than a plain string replacement. `open-video.app` and `www.open-video.app` join `openvideo.theorvane.tech` as legacy hosts that permanently redirect to the canonical origin, so the search signals accumulated under the previous canonical domain transfer instead of splitting across hosts. Every former hostname must stay attached to the Vercel project for those redirects to be reached. The legacy hostname `openvideo.theorvane.tech` keeps its name because renaming it would break the redirect it exists to serve. Copy describing what the editor does — "video editor", "video generation" — is unchanged, since it names the function rather than the product. Sitemap `lastModified` moves to 2026-07-31 for OpenScene and Theorvane, the two sites whose published content changed. Closes #159 Co-Authored-By: Claude Opus 5 * fix: point OpenScene at its own RybbIt site and correct Korean particles The move to `openscene.app` created a distinct RybbIt site, so the tracking script now carries `c2c0972a916f` instead of the site ID registered under the previous domain. The task brief records the supersession rather than leaving a stale ID that reads as current. Renaming OpenVideo to OpenScene also broke the Korean particles that followed it. The former name ended in a vowel and took 는/를/가/란; the new one ends in a consonant and takes 은/을/이/이란. Co-Authored-By: Claude Opus 5 --------- Co-authored-by: Claude Opus 5 --- ...t-site.md => 24-openscene-product-site.md} | 12 +-- ...md => 40-openscene-hybrid-ai-direction.md} | 6 +- .../task-briefs/52-rybbit-tracking-scripts.md | 4 +- .../72-four-site-landing-refresh.md | 4 +- .../82-four-site-scroll-world-design.md | 2 +- .../84-theorvane-scroll-world-pilot-plan.md | 2 +- AGENTS.md | 4 +- README.md | 14 +-- .../app/apple-icon.png | Bin .../app/docs/[[...slug]]/page.tsx | 8 +- .../app/docs/docs.css | 0 apps/{openvideo => openscene}/app/favicon.ico | Bin apps/{openvideo => openscene}/app/globals.css | 0 apps/{openvideo => openscene}/app/icon.png | Bin apps/{openvideo => openscene}/app/layout.tsx | 12 +-- .../app/opengraph-image.tsx | 6 +- apps/{openvideo => openscene}/app/page.tsx | 34 +++--- apps/{openvideo => openscene}/app/robots.ts | 2 +- apps/{openvideo => openscene}/app/sitemap.ts | 4 +- .../components/docs/doc-blocks.tsx | 0 .../components/docs/doc-shell.tsx | 6 +- .../lib/docs/content.en.ts | 48 ++++----- .../lib/docs/content.ko.ts | 46 ++++---- .../lib/docs/inline.test.ts | 2 +- .../lib/docs/inline.ts | 0 .../lib/docs/manifest.test.ts | 0 .../lib/docs/manifest.ts | 0 .../lib/docs/types.ts | 0 .../lib/legacy-host-redirects.test.ts | 18 ++++ .../lib/legacy-host-redirects.ts | 6 +- apps/{openvideo => openscene}/next-env.d.ts | 2 +- apps/{openvideo => openscene}/next.config.ts | 0 apps/{openvideo => openscene}/package.json | 2 +- .../public/docs/editor.png | Bin .../public/docs/projects.png | Bin .../public/docs/video.png | Bin .../public/docs/voice.png | Bin .../public/logo.svg} | 2 +- .../test/docs.test.tsx | 10 +- .../test/home.test.tsx | 12 +-- .../test/responsive-contract.test.ts | 2 +- .../test/seo.test.tsx | 34 +++--- apps/{openvideo => openscene}/tsconfig.json | 0 .../{openvideo => openscene}/vitest.config.ts | 0 .../lib/legacy-host-redirects.test.ts | 18 ---- apps/theorvane/app/opengraph-image.tsx | 2 +- apps/theorvane/app/page.tsx | 14 +-- apps/theorvane/app/page.tsx.orig | 98 ++++++++++++++++++ apps/theorvane/app/page.tsx.rej | 9 ++ apps/theorvane/app/sitemap.ts | 2 +- .../components/product-editorial.test.tsx | 10 +- .../components/signal-passage.test.tsx | 6 +- apps/theorvane/components/signal-passage.tsx | 6 +- .../{openvideo.webp => openscene.webp} | Bin .../public/products/openscene.svg} | 0 ...udio.png => scene-04-openscene-studio.png} | Bin ...udio.png => scene-04-openscene-studio.png} | Bin ...xt => scene-04-openscene-local-studio.txt} | 0 ...xt => scene-04-openscene-local-studio.txt} | 0 .../scripts/validate-media-manifest.mjs | 2 +- .../test/media-manifest-contract.test.mjs | 2 +- apps/theorvane/test/home.test.tsx | 14 +-- apps/theorvane/test/seo.test.tsx | 2 +- ...-openscene-product-site-implementation.md} | 54 +++++----- ...our-site-landing-refresh-implementation.md | 30 +++--- ...rvane-scroll-world-pilot-implementation.md | 8 +- ...editorial-signal-rebrand-implementation.md | 8 +- ...-theorvane-and-type-mcp-websites-design.md | 4 +- ...26-07-23-openscene-product-site-design.md} | 24 ++--- ...-07-29-four-site-landing-refresh-design.md | 8 +- ...026-07-29-four-site-scroll-world-design.md | 14 +-- ...6-07-30-editorial-signal-rebrand-design.md | 4 +- ...rvane-immersive-scroll-cinematic-design.md | 2 +- package-lock.json | 8 +- test/workspace-contract.test.mjs | 6 +- update.patch | 29 ++++++ 76 files changed, 412 insertions(+), 276 deletions(-) rename .agents/task-briefs/{24-openvideo-product-site.md => 24-openscene-product-site.md} (73%) rename .agents/task-briefs/{40-openvideo-hybrid-ai-direction.md => 40-openscene-hybrid-ai-direction.md} (85%) rename apps/{openvideo => openscene}/app/apple-icon.png (100%) rename apps/{openvideo => openscene}/app/docs/[[...slug]]/page.tsx (95%) rename apps/{openvideo => openscene}/app/docs/docs.css (100%) rename apps/{openvideo => openscene}/app/favicon.ico (100%) rename apps/{openvideo => openscene}/app/globals.css (100%) rename apps/{openvideo => openscene}/app/icon.png (100%) rename apps/{openvideo => openscene}/app/layout.tsx (82%) rename apps/{openvideo => openscene}/app/opengraph-image.tsx (90%) rename apps/{openvideo => openscene}/app/page.tsx (89%) rename apps/{openvideo => openscene}/app/robots.ts (82%) rename apps/{openvideo => openscene}/app/sitemap.ts (93%) rename apps/{openvideo => openscene}/components/docs/doc-blocks.tsx (100%) rename apps/{openvideo => openscene}/components/docs/doc-shell.tsx (95%) rename apps/{openvideo => openscene}/lib/docs/content.en.ts (95%) rename apps/{openvideo => openscene}/lib/docs/content.ko.ts (96%) rename apps/{openvideo => openscene}/lib/docs/inline.test.ts (93%) rename apps/{openvideo => openscene}/lib/docs/inline.ts (100%) rename apps/{openvideo => openscene}/lib/docs/manifest.test.ts (100%) rename apps/{openvideo => openscene}/lib/docs/manifest.ts (100%) rename apps/{openvideo => openscene}/lib/docs/types.ts (100%) create mode 100644 apps/openscene/lib/legacy-host-redirects.test.ts rename apps/{openvideo => openscene}/lib/legacy-host-redirects.ts (71%) rename apps/{openvideo => openscene}/next-env.d.ts (84%) rename apps/{openvideo => openscene}/next.config.ts (100%) rename apps/{openvideo => openscene}/package.json (92%) rename apps/{openvideo => openscene}/public/docs/editor.png (100%) rename apps/{openvideo => openscene}/public/docs/projects.png (100%) rename apps/{openvideo => openscene}/public/docs/video.png (100%) rename apps/{openvideo => openscene}/public/docs/voice.png (100%) rename apps/{theorvane/public/products/openvideo.svg => openscene/public/logo.svg} (92%) rename apps/{openvideo => openscene}/test/docs.test.tsx (92%) rename apps/{openvideo => openscene}/test/home.test.tsx (92%) rename apps/{openvideo => openscene}/test/responsive-contract.test.ts (97%) rename apps/{openvideo => openscene}/test/seo.test.tsx (72%) rename apps/{openvideo => openscene}/tsconfig.json (100%) rename apps/{openvideo => openscene}/vitest.config.ts (100%) delete mode 100644 apps/openvideo/lib/legacy-host-redirects.test.ts create mode 100644 apps/theorvane/app/page.tsx.orig create mode 100644 apps/theorvane/app/page.tsx.rej rename apps/theorvane/public/editorial-signal/products/{openvideo.webp => openscene.webp} (100%) rename apps/{openvideo/public/logo.svg => theorvane/public/products/openscene.svg} (100%) rename apps/theorvane/public/scroll-world/desktop/{scene-04-openvideo-studio.png => scene-04-openscene-studio.png} (100%) rename apps/theorvane/public/scroll-world/mobile/{scene-04-openvideo-studio.png => scene-04-openscene-studio.png} (100%) rename apps/theorvane/scroll-world/desktop/{scene-04-openvideo-local-studio.txt => scene-04-openscene-local-studio.txt} (100%) rename apps/theorvane/scroll-world/mobile/{scene-04-openvideo-local-studio.txt => scene-04-openscene-local-studio.txt} (100%) rename docs/planning/{2026-07-23-openvideo-product-site-implementation.md => 2026-07-23-openscene-product-site-implementation.md} (64%) rename docs/superpowers/specs/{2026-07-23-openvideo-product-site-design.md => 2026-07-23-openscene-product-site-design.md} (84%) create mode 100644 update.patch diff --git a/.agents/task-briefs/24-openvideo-product-site.md b/.agents/task-briefs/24-openscene-product-site.md similarity index 73% rename from .agents/task-briefs/24-openvideo-product-site.md rename to .agents/task-briefs/24-openscene-product-site.md index a88be28..4f6ce37 100644 --- a/.agents/task-briefs/24-openvideo-product-site.md +++ b/.agents/task-briefs/24-openscene-product-site.md @@ -1,12 +1,12 @@ -# Task brief: OpenVideo product site +# Task brief: OpenScene product site **Issue:** #24 -**Branch:** `feat/24-openvideo-product-site` -**Canonical host:** `https://open-video.app` +**Branch:** `feat/24-openscene-product-site` +**Canonical host:** `https://openscene.app` ## Deliverable -A separate, static, independently deployable Next.js product site under `apps/openvideo/`, plus documentation and workspace integration. It must present OpenVideo as a local-first Electron recording and editing studio and point visitors to the official source and releases pages. +A separate, static, independently deployable Next.js product site under `apps/openscene/`, plus documentation and workspace integration. It must present OpenScene as a local-first Electron recording and editing studio and point visitors to the official source and releases pages. ## Required public facts @@ -17,8 +17,8 @@ A separate, static, independently deployable Next.js product site under `apps/op ## Required external destinations -- Source: `https://github.com/Theorvane/openvideo` -- Releases: `https://github.com/Theorvane/openvideo/releases` +- Source: `https://github.com/Theorvane/openscene` +- Releases: `https://github.com/Theorvane/openscene/releases` - Studio: `https://theorvane.tech/` ## Quality gates diff --git a/.agents/task-briefs/40-openvideo-hybrid-ai-direction.md b/.agents/task-briefs/40-openscene-hybrid-ai-direction.md similarity index 85% rename from .agents/task-briefs/40-openvideo-hybrid-ai-direction.md rename to .agents/task-briefs/40-openscene-hybrid-ai-direction.md index d303e57..a8931b9 100644 --- a/.agents/task-briefs/40-openvideo-hybrid-ai-direction.md +++ b/.agents/task-briefs/40-openscene-hybrid-ai-direction.md @@ -1,11 +1,11 @@ -# Task brief: OpenVideo hybrid AI editor product direction +# Task brief: OpenScene hybrid AI editor product direction **Issue:** #40 -**Branch:** `docs/40-openvideo-hybrid-ai-direction` +**Branch:** `docs/40-openscene-hybrid-ai-direction` ## Outcome -Record the approved OpenVideo direction: a hybrid AI video editor built on a local-first editing workflow, with optional local models or explicitly selected external AI services. +Record the approved OpenScene direction: a hybrid AI video editor built on a local-first editing workflow, with optional local models or explicitly selected external AI services. ## Scope diff --git a/.agents/task-briefs/52-rybbit-tracking-scripts.md b/.agents/task-briefs/52-rybbit-tracking-scripts.md index 03af03a..23f76c6 100644 --- a/.agents/task-briefs/52-rybbit-tracking-scripts.md +++ b/.agents/task-briefs/52-rybbit-tracking-scripts.md @@ -7,7 +7,7 @@ Add the approved RybbIt tracking script to the document head of each independently deployed Next.js application. Each app must carry its own immutable site ID: -- OpenVideo: `765035acbe87` +- OpenScene: `c2c0972a916f` (superseded `765035acbe87` when the site moved to `openscene.app`, which is a distinct RybbIt site) - TypeMCP: `c37c7591084c` - Theorvane: `13051a0ca43f` @@ -15,7 +15,7 @@ All scripts load from `https://rybbit.handgarden.kr/api/script.js` with deferred ## Non-goals -- Do not modify the OpenVideo desktop application. +- Do not modify the OpenScene desktop application. - Do not introduce another provider, consent UI, cookies, runtime configuration, or deployment configuration. ## Quality gates diff --git a/.agents/task-briefs/72-four-site-landing-refresh.md b/.agents/task-briefs/72-four-site-landing-refresh.md index 29d5b42..d5cc858 100644 --- a/.agents/task-briefs/72-four-site-landing-refresh.md +++ b/.agents/task-briefs/72-four-site-landing-refresh.md @@ -10,7 +10,7 @@ ## Approved scope -Refresh the public landing pages in `apps/theorvane`, `apps/type-mcp`, `apps/type-chain`, and `apps/openvideo`. They share a conversion and accessibility rhythm, but each keeps its own color, typography, product copy, and truthful runtime boundary. +Refresh the public landing pages in `apps/theorvane`, `apps/type-mcp`, `apps/type-chain`, and `apps/openscene`. They share a conversion and accessibility rhythm, but each keeps its own color, typography, product copy, and truthful runtime boundary. ## Required evidence @@ -18,4 +18,4 @@ Use focused RED/GREEN tests for the affected page contracts and responsive CSS c ## Prohibited claims -Do not introduce fabricated social proof. Preserve the published TypeMCP and TypeChain package boundaries. Present OpenVideo AI functions only as planned if mentioned; do not describe them as released. +Do not introduce fabricated social proof. Preserve the published TypeMCP and TypeChain package boundaries. Present OpenScene AI functions only as planned if mentioned; do not describe them as released. diff --git a/.agents/task-briefs/82-four-site-scroll-world-design.md b/.agents/task-briefs/82-four-site-scroll-world-design.md index 0e172b2..1ed5c86 100644 --- a/.agents/task-briefs/82-four-site-scroll-world-design.md +++ b/.agents/task-briefs/82-four-site-scroll-world-design.md @@ -17,7 +17,7 @@ ## Guardrails - Do not generate assets, spend credits, purchase services, modify secrets, deploy, or change application product boundaries until the spec and production plan receive explicit review/approval. -- Keep TypeMCP, TypeChain, and OpenVideo claims within their published capability boundaries. +- Keep TypeMCP, TypeChain, and OpenScene claims within their published capability boundaries. - Preserve semantic content, reduced-motion, media-failure, keyboard, and low-bandwidth fallbacks. ## Design artifact diff --git a/.agents/task-briefs/84-theorvane-scroll-world-pilot-plan.md b/.agents/task-briefs/84-theorvane-scroll-world-pilot-plan.md index 255b9d3..0d1f233 100644 --- a/.agents/task-briefs/84-theorvane-scroll-world-pilot-plan.md +++ b/.agents/task-briefs/84-theorvane-scroll-world-pilot-plan.md @@ -17,4 +17,4 @@ This documentation task creates an executable plan only. It does not create an i - Verify TDD order and commands are exact for every code task. - Verify distinct native 16:9/9:16 media and actual-frame connector requirements remain mandatory. - Verify the cost gate needs explicit active-conversation approval for both calibration and the full production batch. -- Verify all TypeMCP, TypeChain, and OpenVideo boundaries remain consumer/local-owned as defined in the merged design. +- Verify all TypeMCP, TypeChain, and OpenScene boundaries remain consumer/local-owned as defined in the merged design. diff --git a/AGENTS.md b/AGENTS.md index ac08c07..d9a388c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -7,7 +7,7 @@ This repository delivers four independently deployable public Next.js applicatio - `apps/theorvane/`: the Theorvane brand site, canonical at `https://theorvane.tech` - `apps/type-mcp/`: the TypeMCP product site, canonical at `https://typemcp.theorvane.tech` - `apps/type-chain/`: the TypeChain product site, canonical at `https://typechain.theorvane.tech` -- `apps/openvideo/`: the OpenVideo local-first product site, canonical at `https://open-video.app`, with bilingual usage documentation at `/docs` (English) and `/docs/ko` (Korean) +- `apps/openscene/`: the OpenScene local-first product site, canonical at `https://openscene.app`, with bilingual usage documentation at `/docs` (English) and `/docs/ko` (Korean) - `packages/`: neutral shared UI and design tokens only - `docs/`: approved product and design specifications - `.agents/`: tracked task briefs and agent operating aids; never imported by application runtime code @@ -66,7 +66,7 @@ Keep labels focused; do not add unrelated labels merely for coverage. - Pin GitHub Actions to immutable full commit SHAs. - Do not put tokens, credentials, or secrets in repository files, logs, commits, or task briefs. -- Preserve canonical host behavior: `www.theorvane.tech` redirects permanently to `theorvane.tech`, and `openvideo.theorvane.tech` redirects permanently to `open-video.app`. The former OpenVideo subdomain must stay attached to its Vercel project for that redirect to be reached. +- Preserve canonical host behavior: `www.theorvane.tech` redirects permanently to `theorvane.tech`, and `openvideo.theorvane.tech`, `open-video.app`, and `www.open-video.app` each redirect permanently to `openscene.app`. Every former OpenScene hostname must stay attached to its Vercel project for those redirects to be reached. - Keep website claims aligned with the published TypeMCP capability boundary. - Generated output such as `.next/`, `dist/`, coverage, logs, and `node_modules/` must not be committed. diff --git a/README.md b/README.md index 5427aa8..f8e3818 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,24 @@ # Theorvane website -A Next.js monorepo containing independently deployable public websites for **Theorvane**, **TypeMCP**, **TypeChain**, and **OpenVideo**. +A Next.js monorepo containing independently deployable public websites for **Theorvane**, **TypeMCP**, **TypeChain**, and **OpenScene**. ## Apps - `apps/theorvane` — the Theorvane brand homepage at `https://theorvane.tech` - `apps/type-mcp` — the TypeMCP product site and technical documentation at `https://typemcp.theorvane.tech` - `apps/type-chain` — the TypeChain product site and technical documentation at `https://typechain.theorvane.tech` -- `apps/openvideo` — the OpenVideo local-first hybrid AI video-editor product site at `https://open-video.app`; current AI capabilities remain explicitly availability-scoped in the approved product direction +- `apps/openscene` — the OpenScene local-first hybrid AI video-editor product site at `https://openscene.app`; current AI capabilities remain explicitly availability-scoped in the approved product direction -## OpenVideo documentation +## OpenScene documentation -The OpenVideo usage documentation is published at `https://open-video.app/docs` in English and `https://open-video.app/docs/ko` in Korean. Unlike the TypeMCP portal it is authored in this repository as typed content blocks under `apps/openvideo/lib/docs/`, because it documents how to use the desktop application rather than mirroring approved documents from a source repository. +The OpenScene usage documentation is published at `https://openscene.app/docs` in English and `https://openscene.app/docs/ko` in Korean. Unlike the TypeMCP portal it is authored in this repository as typed content blocks under `apps/openscene/lib/docs/`, because it documents how to use the desktop application rather than mirroring approved documents from a source repository. - `content.en.ts` and `content.ko.ts` hold one entry per page; both must cover every slug in the outline or `validateContent()` fails the build. - `manifest.ts` owns the outline, reading order, and locale-aware paths. English is served unprefixed; other locales sit under their own segment. -- Screenshots live in `apps/openvideo/public/docs/` and are declared with fixed dimensions in `lib/docs/types.ts` so the browser reserves layout before they load. +- Screenshots live in `apps/openscene/public/docs/` and are declared with fixed dimensions in `lib/docs/types.ts` so the browser reserves layout before they load. - Every page publishes a canonical URL, `hreflang` alternates for both locales, and `TechArticle` plus `BreadcrumbList` JSON-LD. The sitemap lists each localized route with its alternates. -Claims in this documentation must match OpenVideo's actual build. Pre-release limits — no packaged installer, no auto-update, Sora reference images unsupported — are stated rather than omitted. +Claims in this documentation must match OpenScene's actual build. Pre-release limits — no packaged installer, no auto-update, Sora reference images unsupported — are stated rather than omitted. ## TypeMCP documentation @@ -51,4 +51,4 @@ npm test npm run build ``` -See [`docs/superpowers/specs/2026-07-22-theorvane-and-type-mcp-websites-design.md`](docs/superpowers/specs/2026-07-22-theorvane-and-type-mcp-websites-design.md), [`docs/superpowers/specs/2026-07-22-typemcp-documentation-portal-design.md`](docs/superpowers/specs/2026-07-22-typemcp-documentation-portal-design.md), and [`docs/superpowers/specs/2026-07-23-openvideo-product-site-design.md`](docs/superpowers/specs/2026-07-23-openvideo-product-site-design.md) for the approved scope. +See [`docs/superpowers/specs/2026-07-22-theorvane-and-type-mcp-websites-design.md`](docs/superpowers/specs/2026-07-22-theorvane-and-type-mcp-websites-design.md), [`docs/superpowers/specs/2026-07-22-typemcp-documentation-portal-design.md`](docs/superpowers/specs/2026-07-22-typemcp-documentation-portal-design.md), and [`docs/superpowers/specs/2026-07-23-openscene-product-site-design.md`](docs/superpowers/specs/2026-07-23-openscene-product-site-design.md) for the approved scope. diff --git a/apps/openvideo/app/apple-icon.png b/apps/openscene/app/apple-icon.png similarity index 100% rename from apps/openvideo/app/apple-icon.png rename to apps/openscene/app/apple-icon.png diff --git a/apps/openvideo/app/docs/[[...slug]]/page.tsx b/apps/openscene/app/docs/[[...slug]]/page.tsx similarity index 95% rename from apps/openvideo/app/docs/[[...slug]]/page.tsx rename to apps/openscene/app/docs/[[...slug]]/page.tsx index 4068d02..83efb0f 100644 --- a/apps/openvideo/app/docs/[[...slug]]/page.tsx +++ b/apps/openscene/app/docs/[[...slug]]/page.tsx @@ -7,7 +7,7 @@ import { docGroups, docHref, docRoutes, docSlugs, findPage, isLocale, strings } import { defaultLocale, type Locale, locales } from "../../../lib/docs/types"; import "../docs.css"; -const siteUrl = "https://open-video.app"; +const siteUrl = "https://openscene.app"; type RouteParams = { readonly slug?: string[] }; @@ -45,7 +45,7 @@ export async function generateMetadata({ params }: { params: Promise [candidate, docHref(candidate, slug)])), "x-default": docHref(defaultLocale, slug) }, }, - openGraph: { type: "article", url: `${siteUrl}${path}`, title, description, siteName: "OpenVideo", locale: locale === "ko" ? "ko_KR" : "en_US" }, + openGraph: { type: "article", url: `${siteUrl}${path}`, title, description, siteName: "OpenScene", locale: locale === "ko" ? "ko_KR" : "en_US" }, twitter: { card: "summary_large_image", title, description }, }; } @@ -55,7 +55,7 @@ function schemaFor(locale: Locale, slug?: string | undefined) { const page = slug ? findPage(locale, slug) : undefined; const url = `${siteUrl}${docHref(locale, slug)}`; const crumbs = [ - { "@type": "ListItem", position: 1, name: "OpenVideo", item: `${siteUrl}/` }, + { "@type": "ListItem", position: 1, name: "OpenScene", item: `${siteUrl}/` }, { "@type": "ListItem", position: 2, name: text.indexTitle, item: `${siteUrl}${docHref(locale)}` }, ...(page ? [{ "@type": "ListItem", position: 3, name: page.title, item: url }] : []), ]; @@ -119,7 +119,7 @@ export default async function DocsPage({ params }: { params: Promise -