From f416138844231193987f8b2a30e78331b87dc662 Mon Sep 17 00:00:00 2001 From: vprdev Date: Mon, 28 Sep 2026 06:05:12 -0700 Subject: [PATCH 01/10] fix(console): fit Go page to mobile screens (#51855) --- .../app/src/component/go-plan-chart.css | 51 +++++++++++++++++++ packages/console/app/src/routes/go/index.css | 1 + 2 files changed, 52 insertions(+) diff --git a/packages/console/app/src/component/go-plan-chart.css b/packages/console/app/src/component/go-plan-chart.css index 5cdea42213..699656ff13 100644 --- a/packages/console/app/src/component/go-plan-chart.css +++ b/packages/console/app/src/component/go-plan-chart.css @@ -262,6 +262,57 @@ flex-direction: column; } } + /* Phones stack each model name above its bar so the table fits without horizontal scrolling. */ + @media (max-width: 40rem) { + table, + thead, + tbody, + tfoot { + display: block; + min-width: 0; + } + colgroup, + tfoot td:not([data-slot="axis"]) { + display: none; + } + tr { + display: grid; + grid-template-columns: minmax(0, 1fr) 5.5rem 4rem; + align-items: center; + } + thead tr { + border: 1px solid var(--go-console-border); + border-radius: 6px; + } + thead th { + border: 0; + padding-inline: 0.5rem; + white-space: normal; + } + /* The 100 and 1K ticks sit too close together to label both. */ + [data-slot="gridline"]:first-child, + [data-slot="axis"] span:first-child { + display: none; + } + thead th:first-child { + padding-inline-start: 1rem; + } + thead th:last-child, + [data-slot="number"]:last-child { + padding-inline-end: 1rem; + } + tbody th { + grid-column: 1 / -1; + padding-block-end: 0; + } + [data-slot="bars"], + [data-slot="axis"] { + margin-inline-start: 1rem; + } + [data-slot="number"] { + padding-inline: 0.5rem; + } + } @media (prefers-reduced-motion: reduce) { [data-slot="tier-switch"] button, [data-slot="gridline"], diff --git a/packages/console/app/src/routes/go/index.css b/packages/console/app/src/routes/go/index.css index 0cae41fa9e..0253e68166 100644 --- a/packages/console/app/src/routes/go/index.css +++ b/packages/console/app/src/routes/go/index.css @@ -153,6 +153,7 @@ body { } [data-component="container"] { + width: 100%; max-width: 67.5rem; margin: 0 auto; border: 1px solid var(--color-border-weak); From b76bbb36925888ebd110b14545c06cc683c0d493 Mon Sep 17 00:00:00 2001 From: Victor Navarro Date: Mon, 28 Sep 2026 15:25:55 +0200 Subject: [PATCH 02/10] feat(console): compare Go and Go Plus limits side by side (#51865) --- .../app/src/component/go-plan-chart.css | 146 ++++++++---------- .../app/src/component/go-plan-chart.tsx | 108 ++++++------- packages/console/app/src/i18n/en.ts | 4 +- 3 files changed, 118 insertions(+), 140 deletions(-) diff --git a/packages/console/app/src/component/go-plan-chart.css b/packages/console/app/src/component/go-plan-chart.css index 699656ff13..522f53ba27 100644 --- a/packages/console/app/src/component/go-plan-chart.css +++ b/packages/console/app/src/component/go-plan-chart.css @@ -61,12 +61,23 @@ color: var(--go-console-muted); line-height: 1.25rem; } - [data-slot="tier-switch"] { + [data-slot="legend"] { display: flex; align-items: center; - gap: 0.25rem; + gap: 1rem; + margin: 0; + padding: 0 0 0.375rem; + list-style: none; + color: var(--go-console-secondary); + font-weight: 530; + white-space: nowrap; } - [data-slot="tier-switch"] i { + [data-slot="legend"] li { + display: flex; + align-items: center; + gap: 0.5rem; + } + [data-slot="legend"] i { width: 3px; height: 12px; border-radius: 1px; @@ -90,27 +101,6 @@ cursor: pointer; white-space: nowrap; } - [data-slot="tier-switch"] button { - color: var(--go-console-secondary); - border-radius: 4px; - transition: - background-color 180ms ease, - opacity 180ms ease; - } - [data-slot="tier-switch"] button[aria-pressed="false"] { - opacity: 0.4; - font-weight: 440; - } - [data-slot="tier-switch"] button[aria-pressed="false"]:is(:hover, :focus-visible) { - opacity: 0.75; - } - [data-slot="tier-switch"] button[aria-pressed="true"] { - background: var(--go-console-surface); - color: var(--go-console-text); - } - [data-slot="tier-switch"] button:hover { - color: var(--go-console-text); - } [data-slot="expand"][aria-expanded="true"] svg { transform: rotate(180deg); } @@ -148,28 +138,48 @@ border-start-end-radius: 6px; border-end-end-radius: 6px; } + tbody tr > * { + transition: background-color 120ms ease; + } + tbody tr:hover > * { + background: var(--go-console-surface); + } + tbody tr > :first-child { + border-start-start-radius: 6px; + border-end-start-radius: 6px; + } + tbody tr > :last-child { + border-start-end-radius: 6px; + border-end-end-radius: 6px; + } tbody th { padding: 0.5rem 1rem; text-align: start; font-weight: 400; color: var(--go-console-text); } - [data-slot="model"] { - display: inline-flex; + [data-slot="labels"] { + display: flex; flex-wrap: wrap; - align-items: center; - gap: 0.375rem; + gap: 0.25rem; + margin-top: 0.25rem; } - [data-slot="model"] small { + [data-slot="labels"] :is(small, a) { border: 1px solid var(--go-console-border); padding: 0 0.25rem; font-size: 0.625rem; + line-height: 1rem; } - [data-slot="model"] a { - display: inline-flex; - align-items: center; - color: var(--go-console-muted); + [data-slot="labels"] a { + color: inherit; text-decoration: none; + transition: + background-color 180ms ease, + border-color 180ms ease; + } + [data-slot="labels"] a:hover { + background: var(--go-console-track); + border-color: var(--go-console-track); } [data-slot="bars"] { position: relative; @@ -178,32 +188,20 @@ position: absolute; inset-block: 0; border-inline-start: 1px dashed var(--go-console-border); - transition: inset-inline-start 600ms cubic-bezier(0.22, 1, 0.36, 1); } [data-slot="track"] { position: relative; - display: flex; - gap: 0.25rem; - height: 0.5rem; + display: grid; + grid-template-rows: 0.5rem 0.5rem; + row-gap: 0.5rem; margin: 0.5rem 0; } - [data-slot="track"] > [data-tier] { - position: relative; + [data-slot="lane"] { + display: flex; + gap: 0.25rem; + } + [data-slot="lane"] > [data-tier] { border-radius: 2px; - background: linear-gradient(var(--v2-yellow-500), var(--v2-yellow-600)); - transition: width 600ms cubic-bezier(0.22, 1, 0.36, 1); - } - [data-slot="track"] > [data-tier]::after { - content: ""; - position: absolute; - inset: 0; - border-radius: inherit; - background: linear-gradient(var(--v2-orange-500), var(--v2-orange-600)); - opacity: 0; - transition: opacity 300ms ease; - } - [data-slot="track"] > [data-tier="plus"]::after { - opacity: 1; } [data-slot="remainder"] { flex: 1; @@ -215,12 +213,13 @@ text-align: end; white-space: nowrap; } + :is(thead th, [data-slot="number"]):last-child { + padding-inline-start: 0.5rem; + } [data-slot="number"] span { display: block; - line-height: 1.25rem; - } - [data-slot="plan-value"] { - animation: go-plan-value-in 300ms ease-out both; + /* 13px digits are ~9.5px tall, so this leaves the same ~8px visual gap as the bars. */ + line-height: 1.1rem; } [data-slot="axis"] { position: relative; @@ -232,7 +231,6 @@ position: absolute; top: 0.25rem; transform: translateX(-50%); - transition: inset-inline-start 600ms cubic-bezier(0.22, 1, 0.36, 1); } &:dir(rtl) [data-slot="axis"] span { transform: translateX(50%); @@ -312,28 +310,18 @@ [data-slot="number"] { padding-inline: 0.5rem; } - } - @media (prefers-reduced-motion: reduce) { - [data-slot="tier-switch"] button, - [data-slot="gridline"], - [data-slot="track"] > [data-tier], - [data-slot="track"] > [data-tier]::after, - [data-slot="axis"] span { - transition: none; + /* Rows are grids here, so highlight the row itself instead of each cell. */ + tbody tr { + border-radius: 6px; + transition: background-color 120ms ease; } - [data-slot="plan-value"] { - animation: none; + tbody tr:hover { + background: var(--go-console-surface); + } + tbody tr > *, + tbody tr:hover > * { + border-radius: 0; + background: none; } } } - -@keyframes go-plan-value-in { - from { - opacity: 0.3; - transform: translateY(3px); - } - to { - opacity: 1; - transform: translateY(0); - } -} diff --git a/packages/console/app/src/component/go-plan-chart.tsx b/packages/console/app/src/component/go-plan-chart.tsx index 0efbb34702..45dd4f786f 100644 --- a/packages/console/app/src/component/go-plan-chart.tsx +++ b/packages/console/app/src/component/go-plan-chart.tsx @@ -5,22 +5,17 @@ import { useLanguage } from "~/context/language" import { goPlanModels } from "./go-models" const ticks = [100, 1000, 10000] +const max = Math.max(...goPlanModels.map((model) => model.plusRequests).filter(Number.isFinite)) export function GoPlanChart(props: { href: string }) { const i18n = useI18n() const language = useLanguage() const id = createUniqueId() const [expanded, setExpanded] = createSignal(false) - const [tier, setTier] = createSignal<"go" | "go-plus">("go") const models = createMemo(() => goPlanModels.filter((model) => expanded() || model.featured)) - const max = createMemo(() => - Math.max( - ...goPlanModels.map((model) => (tier() === "go" ? model.requests : model.plusRequests)).filter(Number.isFinite), - ), - ) const position = (requests: number) => Number.isFinite(requests) - ? 4 + Math.pow(Math.log10(Math.max(requests / 100, 1)) / Math.log10(max() / 100), 2.2) * 78 + ? 4 + Math.pow(Math.log10(Math.max(requests / 100, 1)) / Math.log10(max / 100), 2.2) * 78 : 100 const format = createMemo(() => new Intl.NumberFormat(language.tag(language.locale()))) const currency = createMemo( @@ -40,24 +35,24 @@ export function GoPlanChart(props: { href: string }) {

{i18n.t("go.plans.limits")}

{i18n.t("go.plans.description")}

-
- - -
+ +
- - - + + + @@ -73,60 +68,55 @@ export function GoPlanChart(props: { href: string }) { {(model) => ( )} diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index d18bc8d1fc..5496f3846c 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -292,8 +292,8 @@ export const dict = { "go.graph.scale": "Nonlinear request scale", "go.graph.showAll": "View all {{count}} models", "go.graph.showLess": "Show fewer models", - "go.graph.limitedRegions": "limited regions", - "go.graph.limitedTime": "limited time", + "go.graph.limitedRegions": "Limited Regions", + "go.graph.limitedTime": "Limited Time", "go.graph.tick": "{{n}}x", "go.graph.usageLimits": "Usage limits", "go.graph.aria": "Requests per 5h: {{free}} vs {{go}}", From 3c893f0a166cfc433819b4eff65d2e6c7696a1c9 Mon Sep 17 00:00:00 2001 From: Victor Navarro Date: Mon, 28 Sep 2026 15:39:52 +0200 Subject: [PATCH 03/10] fix(console): polish Go limits chart on mobile (#51870) --- .../app/src/component/go-plan-chart.css | 51 ++++++++++++++----- packages/console/app/src/i18n/en.ts | 2 +- packages/console/app/src/routes/go/index.css | 6 +++ 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/packages/console/app/src/component/go-plan-chart.css b/packages/console/app/src/component/go-plan-chart.css index 522f53ba27..b2ca0ca661 100644 --- a/packages/console/app/src/component/go-plan-chart.css +++ b/packages/console/app/src/component/go-plan-chart.css @@ -262,12 +262,16 @@ } /* Phones stack each model name above its bar so the table fits without horizontal scrolling. */ @media (max-width: 40rem) { - table, + /* Rows share the table's columns through subgrid, so number columns size to their unwrapped headers. */ + table { + display: grid; + grid-template-columns: minmax(0, 1fr) auto auto; + min-width: 0; + } thead, tbody, tfoot { - display: block; - min-width: 0; + display: contents; } colgroup, tfoot td:not([data-slot="axis"]) { @@ -275,21 +279,23 @@ } tr { display: grid; - grid-template-columns: minmax(0, 1fr) 5.5rem 4rem; + grid-column: 1 / -1; + grid-template-columns: subgrid; align-items: center; } thead tr { border: 1px solid var(--go-console-border); border-radius: 6px; } - thead th { + thead th, + thead th:is(:first-child, :last-child) { border: 0; - padding-inline: 0.5rem; - white-space: normal; + padding-inline: 0.375rem; + font-size: 0.75rem; } - /* The 100 and 1K ticks sit too close together to label both. */ - [data-slot="gridline"]:first-child, - [data-slot="axis"] span:first-child { + /* The bars are too narrow to label 100 and 1K apart from 10K. */ + [data-slot="gridline"], + [data-slot="axis"] span:not(:last-child) { display: none; } thead th:first-child { @@ -301,17 +307,38 @@ } tbody th { grid-column: 1 / -1; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.25rem 0.5rem; padding-block-end: 0; } + [data-slot="labels"] { + margin-top: 0; + } + /* Bars extend under the requests column's spare header width, stopping short of the right-aligned numbers. */ [data-slot="bars"], [data-slot="axis"] { - margin-inline-start: 1rem; + grid-column: 1 / 3; + margin-inline: 1rem 4rem; + } + [data-slot="bars"] { + grid-row: 2; + } + [data-slot="bars"] + [data-slot="number"] { + grid-row: 2; + grid-column: 2; + } + [data-slot="number"]:last-child { + grid-row: 2; + grid-column: 3; } [data-slot="number"] { - padding-inline: 0.5rem; + padding-inline: 0.375rem; } /* Rows are grids here, so highlight the row itself instead of each cell. */ tbody tr { + padding-block: 0.375rem; border-radius: 6px; transition: background-color 120ms ease; } diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index 5496f3846c..c3753cb7d2 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -286,7 +286,7 @@ export const dict = { "go.graph.label": "Requests / 5 hours", "go.graph.period": "Usage", "go.graph.model": "Model", - "go.graph.requests": "Est. requests / 5 hr", + "go.graph.requests": "Est. requests / 5h", "go.graph.allowance": "Monthly usage", "go.graph.new": "New", "go.graph.scale": "Nonlinear request scale", diff --git a/packages/console/app/src/routes/go/index.css b/packages/console/app/src/routes/go/index.css index 0253e68166..b09be1e92a 100644 --- a/packages/console/app/src/routes/go/index.css +++ b/packages/console/app/src/routes/go/index.css @@ -365,6 +365,12 @@ body { color: var(--color-text-strong); line-height: 1.4; } + + @media (max-width: 40rem) { + flex-direction: column; + align-items: flex-start; + gap: 8px; + } } [data-slot="hero-copy"] { From 75e1e7ae310dc36c86c920e8997d0e1181e24a88 Mon Sep 17 00:00:00 2001 From: vprdev Date: Mon, 28 Sep 2026 08:44:42 -0700 Subject: [PATCH 04/10] fix(console): stop Black subscription renewals (#51884) --- packages/console/app/src/i18n/ar.ts | 3 +- packages/console/app/src/i18n/br.ts | 3 +- packages/console/app/src/i18n/da.ts | 3 +- packages/console/app/src/i18n/de.ts | 3 +- packages/console/app/src/i18n/en.ts | 3 +- packages/console/app/src/i18n/es.ts | 3 +- packages/console/app/src/i18n/fr.ts | 3 +- packages/console/app/src/i18n/it.ts | 3 +- packages/console/app/src/i18n/ja.ts | 3 +- packages/console/app/src/i18n/ko.ts | 3 +- packages/console/app/src/i18n/no.ts | 3 +- packages/console/app/src/i18n/pl.ts | 3 +- packages/console/app/src/i18n/ru.ts | 3 +- packages/console/app/src/i18n/th.ts | 3 +- packages/console/app/src/i18n/tr.ts | 3 +- packages/console/app/src/i18n/uk.ts | 3 +- packages/console/app/src/i18n/zh.ts | 3 +- packages/console/app/src/i18n/zht.ts | 3 +- .../console/app/src/routes/stripe/webhook.ts | 12 ++++++ .../[id]/billing/black-section.module.css | 7 ---- .../workspace/[id]/billing/black-section.tsx | 42 +------------------ 21 files changed, 32 insertions(+), 83 deletions(-) diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts index 0c5441ef29..265787545e 100644 --- a/packages/console/app/src/i18n/ar.ts +++ b/packages/console/app/src/i18n/ar.ts @@ -653,7 +653,6 @@ export const dict = { "workspace.payments.type.subscription": "اشتراك", "workspace.payments.view": "عرض", - "workspace.black.loading": "جارٍ التحميل...", "workspace.black.time.day": "يوم", "workspace.black.time.days": "أيام", "workspace.black.time.hour": "ساعة", @@ -663,7 +662,7 @@ export const dict = { "workspace.black.time.fewSeconds": "بضع ثوان", "workspace.black.subscription.title": "الاشتراك", "workspace.black.subscription.message": "أنت مشترك في OpenCode Black مقابل ${{plan}} شهريًا.", - "workspace.black.subscription.manage": "إدارة الاشتراك", + "workspace.black.subscription.ending": "ينتهي OpenCode Black بنهاية فترة الفوترة الحالية ولن يتم تجديده. سننقلك إلى وحدة التحكم الجديدة.", "workspace.black.subscription.rollingUsage": "استخدام لمدة 5 ساعات", "workspace.black.subscription.weeklyUsage": "الاستخدام الأسبوعي", "workspace.black.subscription.resetsIn": "إعادة تعيين في", diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index 4d76e2bddd..c4bb47d82d 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -664,7 +664,6 @@ export const dict = { "workspace.payments.type.subscription": "assinatura", "workspace.payments.view": "Ver", - "workspace.black.loading": "Carregando...", "workspace.black.time.day": "dia", "workspace.black.time.days": "dias", "workspace.black.time.hour": "hora", @@ -674,7 +673,7 @@ export const dict = { "workspace.black.time.fewSeconds": "alguns segundos", "workspace.black.subscription.title": "Assinatura", "workspace.black.subscription.message": "Você assina o OpenCode Black por ${{plan}} por mês.", - "workspace.black.subscription.manage": "Gerenciar Assinatura", + "workspace.black.subscription.ending": "O OpenCode Black termina com o seu período de cobrança atual e não será renovado. Vamos migrar você para o novo console.", "workspace.black.subscription.rollingUsage": "Uso de 5 horas", "workspace.black.subscription.weeklyUsage": "Uso Semanal", "workspace.black.subscription.resetsIn": "Reinicia em", diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index 013eb2e51d..ab131516a2 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -660,7 +660,6 @@ export const dict = { "workspace.payments.type.subscription": "abonnement", "workspace.payments.view": "Vis", - "workspace.black.loading": "Indlæser...", "workspace.black.time.day": "dag", "workspace.black.time.days": "dage", "workspace.black.time.hour": "time", @@ -670,7 +669,7 @@ export const dict = { "workspace.black.time.fewSeconds": "et par sekunder", "workspace.black.subscription.title": "Abonnement", "workspace.black.subscription.message": "Du abonnerer på OpenCode Black for ${{plan}} om måneden.", - "workspace.black.subscription.manage": "Administrer abonnement", + "workspace.black.subscription.ending": "OpenCode Black slutter med din nuværende faktureringsperiode og fornyes ikke. Vi flytter dig til den nye konsol.", "workspace.black.subscription.rollingUsage": "5-timers brug", "workspace.black.subscription.weeklyUsage": "Ugentlig brug", "workspace.black.subscription.resetsIn": "Nulstiller i", diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index 021d57ff61..e67be4b894 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -662,7 +662,6 @@ export const dict = { "workspace.payments.type.subscription": "Abonnement", "workspace.payments.view": "Ansehen", - "workspace.black.loading": "Lade...", "workspace.black.time.day": "Tag", "workspace.black.time.days": "Tage", "workspace.black.time.hour": "Stunde", @@ -672,7 +671,7 @@ export const dict = { "workspace.black.time.fewSeconds": "einige Sekunden", "workspace.black.subscription.title": "Abonnement", "workspace.black.subscription.message": "Du hast OpenCode Black für ${{plan}} pro Monat abonniert.", - "workspace.black.subscription.manage": "Abo verwalten", + "workspace.black.subscription.ending": "OpenCode Black endet mit deinem aktuellen Abrechnungszeitraum und wird nicht verlängert. Wir ziehen dich in die neue Konsole um.", "workspace.black.subscription.rollingUsage": "5-Stunden-Nutzung", "workspace.black.subscription.weeklyUsage": "Wöchentliche Nutzung", "workspace.black.subscription.resetsIn": "Setzt zurück in", diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index c3753cb7d2..5718d9fd14 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -659,7 +659,6 @@ export const dict = { "workspace.payments.type.subscription": "subscription", "workspace.payments.view": "View", - "workspace.black.loading": "Loading...", "workspace.black.time.day": "day", "workspace.black.time.days": "days", "workspace.black.time.hour": "hour", @@ -669,7 +668,7 @@ export const dict = { "workspace.black.time.fewSeconds": "a few seconds", "workspace.black.subscription.title": "Subscription", "workspace.black.subscription.message": "You are subscribed to OpenCode Black for ${{plan}} per month.", - "workspace.black.subscription.manage": "Manage Subscription", + "workspace.black.subscription.ending": "OpenCode Black ends with your current billing period and won't renew. We'll move you to the new console.", "workspace.black.subscription.rollingUsage": "5-hour Usage", "workspace.black.subscription.weeklyUsage": "Weekly Usage", "workspace.black.subscription.resetsIn": "Resets in", diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts index 6e9a02831b..29d35c3ff6 100644 --- a/packages/console/app/src/i18n/es.ts +++ b/packages/console/app/src/i18n/es.ts @@ -665,7 +665,6 @@ export const dict = { "workspace.payments.type.subscription": "suscripción", "workspace.payments.view": "Ver", - "workspace.black.loading": "Cargando...", "workspace.black.time.day": "día", "workspace.black.time.days": "días", "workspace.black.time.hour": "hora", @@ -675,7 +674,7 @@ export const dict = { "workspace.black.time.fewSeconds": "unos pocos segundos", "workspace.black.subscription.title": "Suscripción", "workspace.black.subscription.message": "Estás suscrito a OpenCode Black por ${{plan}} al mes.", - "workspace.black.subscription.manage": "Gestionar Suscripción", + "workspace.black.subscription.ending": "OpenCode Black finaliza con tu periodo de facturación actual y no se renovará. Te trasladaremos a la nueva consola.", "workspace.black.subscription.rollingUsage": "Uso de 5 horas", "workspace.black.subscription.weeklyUsage": "Uso Semanal", "workspace.black.subscription.resetsIn": "Se reinicia en", diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index bf11f5f964..a7db6136f4 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -667,7 +667,6 @@ export const dict = { "workspace.payments.type.subscription": "abonnement", "workspace.payments.view": "Voir", - "workspace.black.loading": "Chargement...", "workspace.black.time.day": "jour", "workspace.black.time.days": "jours", "workspace.black.time.hour": "heure", @@ -677,7 +676,7 @@ export const dict = { "workspace.black.time.fewSeconds": "quelques secondes", "workspace.black.subscription.title": "Abonnement", "workspace.black.subscription.message": "Vous êtes abonné à OpenCode Black pour {{plan}} $ par mois.", - "workspace.black.subscription.manage": "Gérer l'abonnement", + "workspace.black.subscription.ending": "OpenCode Black prend fin avec votre période de facturation actuelle et ne sera pas renouvelé. Nous vous migrerons vers la nouvelle console.", "workspace.black.subscription.rollingUsage": "Utilisation 5 heures", "workspace.black.subscription.weeklyUsage": "Utilisation hebdomadaire", "workspace.black.subscription.resetsIn": "Réinitialisation dans", diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts index 5d8527da1e..9a901118f9 100644 --- a/packages/console/app/src/i18n/it.ts +++ b/packages/console/app/src/i18n/it.ts @@ -663,7 +663,6 @@ export const dict = { "workspace.payments.type.subscription": "abbonamento", "workspace.payments.view": "Visualizza", - "workspace.black.loading": "Caricamento...", "workspace.black.time.day": "giorno", "workspace.black.time.days": "giorni", "workspace.black.time.hour": "ora", @@ -673,7 +672,7 @@ export const dict = { "workspace.black.time.fewSeconds": "pochi secondi", "workspace.black.subscription.title": "Abbonamento", "workspace.black.subscription.message": "Sei abbonato a OpenCode Black per ${{plan}} al mese.", - "workspace.black.subscription.manage": "Gestisci Abbonamento", + "workspace.black.subscription.ending": "OpenCode Black termina con il periodo di fatturazione in corso e non verrà rinnovato. Ti trasferiremo nella nuova console.", "workspace.black.subscription.rollingUsage": "Utilizzo 5-ore", "workspace.black.subscription.weeklyUsage": "Utilizzo Settimanale", "workspace.black.subscription.resetsIn": "Si resetta tra", diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts index 6d941a9b1b..82b758b21e 100644 --- a/packages/console/app/src/i18n/ja.ts +++ b/packages/console/app/src/i18n/ja.ts @@ -660,7 +660,6 @@ export const dict = { "workspace.payments.type.subscription": "サブスクリプション", "workspace.payments.view": "表示", - "workspace.black.loading": "読み込み中...", "workspace.black.time.day": "日", "workspace.black.time.days": "日", "workspace.black.time.hour": "時間", @@ -670,7 +669,7 @@ export const dict = { "workspace.black.time.fewSeconds": "数秒", "workspace.black.subscription.title": "サブスクリプション", "workspace.black.subscription.message": "あなたは OpenCode Black を月額 ${{plan}} で購読しています。", - "workspace.black.subscription.manage": "サブスクリプションの管理", + "workspace.black.subscription.ending": "OpenCode Black は現在の請求期間の終了とともに終了し、更新されません。新しいコンソールへ移行いたします。", "workspace.black.subscription.rollingUsage": "5時間利用", "workspace.black.subscription.weeklyUsage": "週間利用量", "workspace.black.subscription.resetsIn": "リセットまで", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index cc8a44f602..89bbd7904e 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -653,7 +653,6 @@ export const dict = { "workspace.payments.type.subscription": "구독", "workspace.payments.view": "보기", - "workspace.black.loading": "로드 중...", "workspace.black.time.day": "일", "workspace.black.time.days": "일", "workspace.black.time.hour": "시간", @@ -663,7 +662,7 @@ export const dict = { "workspace.black.time.fewSeconds": "몇 초", "workspace.black.subscription.title": "구독", "workspace.black.subscription.message": "현재 월 ${{plan}} OpenCode Black 플랜을 구독 중입니다.", - "workspace.black.subscription.manage": "구독 관리", + "workspace.black.subscription.ending": "OpenCode Black은 현재 결제 기간이 끝나면 종료되며 갱신되지 않습니다. 새 콘솔로 옮겨 드리겠습니다.", "workspace.black.subscription.rollingUsage": "5시간 사용량", "workspace.black.subscription.weeklyUsage": "주간 사용량", "workspace.black.subscription.resetsIn": "초기화까지 남은 시간:", diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index 714abb1ed5..da980496bf 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -661,7 +661,6 @@ export const dict = { "workspace.payments.type.subscription": "abonnement", "workspace.payments.view": "Vis", - "workspace.black.loading": "Laster...", "workspace.black.time.day": "dag", "workspace.black.time.days": "dager", "workspace.black.time.hour": "time", @@ -671,7 +670,7 @@ export const dict = { "workspace.black.time.fewSeconds": "noen få sekunder", "workspace.black.subscription.title": "Abonnement", "workspace.black.subscription.message": "Du abonnerer på OpenCode Black for ${{plan}} per måned.", - "workspace.black.subscription.manage": "Administrer abonnement", + "workspace.black.subscription.ending": "OpenCode Black avsluttes med gjeldende faktureringsperiode og fornyes ikke. Vi flytter deg til den nye konsollen.", "workspace.black.subscription.rollingUsage": "5-timers bruk", "workspace.black.subscription.weeklyUsage": "Ukentlig bruk", "workspace.black.subscription.resetsIn": "Nullstilles om", diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index e6b499388c..ee3ce8d2ee 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -662,7 +662,6 @@ export const dict = { "workspace.payments.type.subscription": "subskrypcja", "workspace.payments.view": "Zobacz", - "workspace.black.loading": "Ładowanie...", "workspace.black.time.day": "dzień", "workspace.black.time.days": "dni", "workspace.black.time.hour": "godzina", @@ -672,7 +671,7 @@ export const dict = { "workspace.black.time.fewSeconds": "kilka sekund", "workspace.black.subscription.title": "Subskrypcja", "workspace.black.subscription.message": "Subskrybujesz OpenCode Black za ${{plan}} miesięcznie.", - "workspace.black.subscription.manage": "Zarządzaj subskrypcją", + "workspace.black.subscription.ending": "OpenCode Black kończy się wraz z bieżącym okresem rozliczeniowym i nie zostanie odnowiony. Przeniesiemy Cię do nowej konsoli.", "workspace.black.subscription.rollingUsage": "Użycie (okno 5h)", "workspace.black.subscription.weeklyUsage": "Użycie tygodniowe", "workspace.black.subscription.resetsIn": "Resetuje się za", diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index 903d4d1223..c7a0399c6f 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -669,7 +669,6 @@ export const dict = { "workspace.payments.type.subscription": "подписка", "workspace.payments.view": "Просмотр", - "workspace.black.loading": "Загрузка...", "workspace.black.time.day": "день", "workspace.black.time.days": "дней", "workspace.black.time.hour": "час", @@ -679,7 +678,7 @@ export const dict = { "workspace.black.time.fewSeconds": "несколько секунд", "workspace.black.subscription.title": "Подписка", "workspace.black.subscription.message": "Вы подписаны на OpenCode Black за ${{plan}} в месяц.", - "workspace.black.subscription.manage": "Управление подпиской", + "workspace.black.subscription.ending": "OpenCode Black завершится в конце текущего расчётного периода и не будет продлён. Мы перенесём вас в новую консоль.", "workspace.black.subscription.rollingUsage": "5-часовое использование", "workspace.black.subscription.weeklyUsage": "Недельное использование", "workspace.black.subscription.resetsIn": "Сброс через", diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts index 8eb1f38827..5becff3c10 100644 --- a/packages/console/app/src/i18n/th.ts +++ b/packages/console/app/src/i18n/th.ts @@ -658,7 +658,6 @@ export const dict = { "workspace.payments.type.subscription": "subscription", "workspace.payments.view": "ดู", - "workspace.black.loading": "กำลังโหลด...", "workspace.black.time.day": "วัน", "workspace.black.time.days": "วัน", "workspace.black.time.hour": "ชั่วโมง", @@ -668,7 +667,7 @@ export const dict = { "workspace.black.time.fewSeconds": "ไม่กี่วินาที", "workspace.black.subscription.title": "การสมัครสมาชิก", "workspace.black.subscription.message": "คุณสมัครสมาชิก OpenCode Black ในราคา ${{plan}} ต่อเดือน", - "workspace.black.subscription.manage": "จัดการการสมัครสมาชิก", + "workspace.black.subscription.ending": "OpenCode Black จะสิ้นสุดเมื่อครบรอบการเรียกเก็บเงินปัจจุบันและจะไม่ต่ออายุ เราจะย้ายคุณไปยังคอนโซลใหม่", "workspace.black.subscription.rollingUsage": "การใช้งาน 5 ชั่วโมง", "workspace.black.subscription.weeklyUsage": "การใช้งานรายสัปดาห์", "workspace.black.subscription.resetsIn": "รีเซ็ตใน", diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index fc97cef462..878768f5ce 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -664,7 +664,6 @@ export const dict = { "workspace.payments.type.subscription": "abonelik", "workspace.payments.view": "Görüntüle", - "workspace.black.loading": "Yükleniyor...", "workspace.black.time.day": "gün", "workspace.black.time.days": "gün", "workspace.black.time.hour": "saat", @@ -674,7 +673,7 @@ export const dict = { "workspace.black.time.fewSeconds": "birkaç saniye", "workspace.black.subscription.title": "Abonelik", "workspace.black.subscription.message": "Aylık ${{plan}} karşılığında OpenCode Black'e abonesiniz.", - "workspace.black.subscription.manage": "Aboneliği Yönet", + "workspace.black.subscription.ending": "OpenCode Black mevcut fatura döneminizin sonunda sona erer ve yenilenmez. Sizi yeni konsola taşıyacağız.", "workspace.black.subscription.rollingUsage": "5 Saatlik Kullanım", "workspace.black.subscription.weeklyUsage": "Haftalık Kullanım", "workspace.black.subscription.resetsIn": "Sıfırlama süresi", diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts index 7fae5bfaa9..6fd079052f 100644 --- a/packages/console/app/src/i18n/uk.ts +++ b/packages/console/app/src/i18n/uk.ts @@ -659,7 +659,6 @@ export const dict = { "workspace.payments.type.subscription": "підписка", "workspace.payments.view": "Переглянути", - "workspace.black.loading": "Завантаження...", "workspace.black.time.day": "день", "workspace.black.time.days": "дні", "workspace.black.time.hour": "година", @@ -669,7 +668,7 @@ export const dict = { "workspace.black.time.fewSeconds": "кілька секунд", "workspace.black.subscription.title": "Підписка", "workspace.black.subscription.message": "Ви підписані на OpenCode Black за ${{plan}} на місяць.", - "workspace.black.subscription.manage": "Керувати підпискою", + "workspace.black.subscription.ending": "OpenCode Black завершиться наприкінці поточного розрахункового періоду й не буде подовжений. Ми перенесемо вас до нової консолі.", "workspace.black.subscription.rollingUsage": "Використання (5 год)", "workspace.black.subscription.weeklyUsage": "Тижневе використання", "workspace.black.subscription.resetsIn": "Скидається через", diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts index 9ec2536db8..228c87b4bb 100644 --- a/packages/console/app/src/i18n/zh.ts +++ b/packages/console/app/src/i18n/zh.ts @@ -634,7 +634,6 @@ export const dict = { "workspace.payments.type.subscription": "订阅", "workspace.payments.view": "查看", - "workspace.black.loading": "加载中...", "workspace.black.time.day": "天", "workspace.black.time.days": "天", "workspace.black.time.hour": "小时", @@ -644,7 +643,7 @@ export const dict = { "workspace.black.time.fewSeconds": "几秒钟", "workspace.black.subscription.title": "订阅", "workspace.black.subscription.message": "您已订阅 OpenCode Black,价格为每月 ${{plan}}。", - "workspace.black.subscription.manage": "管理订阅", + "workspace.black.subscription.ending": "OpenCode Black 将在当前计费周期结束时终止,不会续订。我们会将你迁移到新的控制台。", "workspace.black.subscription.rollingUsage": "5 小时用量", "workspace.black.subscription.weeklyUsage": "每周用量", "workspace.black.subscription.resetsIn": "重置于", diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts index be1f613f6f..fca811b59d 100644 --- a/packages/console/app/src/i18n/zht.ts +++ b/packages/console/app/src/i18n/zht.ts @@ -633,7 +633,6 @@ export const dict = { "workspace.payments.type.subscription": "訂閱", "workspace.payments.view": "檢視", - "workspace.black.loading": "載入中...", "workspace.black.time.day": "天", "workspace.black.time.days": "天", "workspace.black.time.hour": "小時", @@ -643,7 +642,7 @@ export const dict = { "workspace.black.time.fewSeconds": "幾秒鐘", "workspace.black.subscription.title": "訂閱", "workspace.black.subscription.message": "你已訂閱 OpenCode Black,費用為每月 ${{plan}}。", - "workspace.black.subscription.manage": "管理訂閱", + "workspace.black.subscription.ending": "OpenCode Black 將於目前計費週期結束時終止,不會續訂。我們會將你遷移至新的控制台。", "workspace.black.subscription.rollingUsage": "5 小時使用量", "workspace.black.subscription.weeklyUsage": "每週使用量", "workspace.black.subscription.resetsIn": "重置於", diff --git a/packages/console/app/src/routes/stripe/webhook.ts b/packages/console/app/src/routes/stripe/webhook.ts index 05f40e4fd2..63aeca80e5 100644 --- a/packages/console/app/src/routes/stripe/webhook.ts +++ b/packages/console/app/src/routes/stripe/webhook.ts @@ -195,6 +195,18 @@ export async function POST(input: APIEvent) { await Billing.unsubscribeBlack({ subscriptionID }) } } + if (body.type === "customer.subscription.updated") { + // Black is retired: no subscription may renew, so undo any renewal made in the billing portal. + const subscription = body.data.object + if (subscription.items.data[0].price.product !== BlackData.productID()) return "ignored" + if (!["active", "trialing", "past_due"].includes(subscription.status)) return "ignored" + if (subscription.cancel_at_period_end || subscription.cancel_at) return "ignored" + + await Billing.stripe().subscriptions.update(subscription.id, { + cancel_at_period_end: true, + cancellation_details: { comment: "Legacy Black retirement: renewal is not allowed" }, + }) + } if (body.type === "customer.subscription.deleted") { const subscriptionID = body.data.object.id if (!subscriptionID) throw new Error("Subscription ID not found") diff --git a/packages/console/app/src/routes/workspace/[id]/billing/black-section.module.css b/packages/console/app/src/routes/workspace/[id]/billing/black-section.module.css index f9dc0cb451..ef76486c16 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/black-section.module.css +++ b/packages/console/app/src/routes/workspace/[id]/billing/black-section.module.css @@ -1,11 +1,4 @@ .root { - [data-slot="title-row"] { - display: flex; - justify-content: space-between; - align-items: center; - gap: var(--space-4); - } - [data-slot="usage"] { display: flex; gap: var(--space-6); diff --git a/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx index ee3c1fc830..2a39283a73 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx @@ -84,23 +84,6 @@ const enroll = action(async (workspaceID: string) => { ) }, "enroll") -const createSessionUrl = action(async (workspaceID: string, returnUrl: string) => { - "use server" - return json( - await withActor( - () => - Billing.generateSessionUrl({ returnUrl }) - .then((data) => ({ error: undefined, data })) - .catch((e) => ({ - error: e.message as string, - data: undefined, - })), - workspaceID, - ), - { revalidate: [queryBillingInfo.key, querySubscription.key] }, - ) -}, "sessionUrl") - const setUseBalance = action(async (form: FormData) => { "use server" const workspaceID = form.get("workspaceID") as string | null @@ -130,27 +113,16 @@ export function BlackSection() { const i18n = useI18n() const billing = createAsync(() => queryBillingInfo(params.id!)) const subscription = createAsync(() => querySubscription(params.id!)) - const sessionAction = useAction(createSessionUrl) - const sessionSubmission = useSubmission(createSessionUrl) const cancelAction = useAction(cancelWaitlist) const cancelSubmission = useSubmission(cancelWaitlist) const enrollAction = useAction(enroll) const enrollSubmission = useSubmission(enroll) const useBalanceSubmission = useSubmission(setUseBalance) const [store, setStore] = createStore({ - sessionRedirecting: false, cancelled: false, enrolled: false, }) - async function onClickSession() { - const result = await sessionAction(params.id!, window.location.href) - if (result.data) { - setStore("sessionRedirecting", true) - window.location.href = result.data - } - } - async function onClickCancel() { const result = await cancelAction(params.id!) if (!result.error) { @@ -172,18 +144,8 @@ export function BlackSection() {

{i18n.t("workspace.black.subscription.title")}

-
-

{i18n.t("workspace.black.subscription.message", { plan: sub().plan })}

- -
+

{i18n.t("workspace.black.subscription.message", { plan: sub().plan })}

+

{i18n.t("workspace.black.subscription.ending")}

From ad6c72c7068812d43b31f3cfb9e413356a19d850 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Mon, 28 Sep 2026 15:46:01 +0000 Subject: [PATCH 05/10] chore: generate --- packages/console/app/src/i18n/ar.ts | 3 ++- packages/console/app/src/i18n/br.ts | 3 ++- packages/console/app/src/i18n/da.ts | 3 ++- packages/console/app/src/i18n/de.ts | 3 ++- packages/console/app/src/i18n/en.ts | 3 ++- packages/console/app/src/i18n/es.ts | 3 ++- packages/console/app/src/i18n/fr.ts | 3 ++- packages/console/app/src/i18n/it.ts | 3 ++- packages/console/app/src/i18n/ja.ts | 3 ++- packages/console/app/src/i18n/ko.ts | 3 ++- packages/console/app/src/i18n/no.ts | 3 ++- packages/console/app/src/i18n/pl.ts | 3 ++- packages/console/app/src/i18n/ru.ts | 3 ++- packages/console/app/src/i18n/th.ts | 3 ++- packages/console/app/src/i18n/tr.ts | 3 ++- packages/console/app/src/i18n/uk.ts | 3 ++- packages/console/app/src/i18n/zh.ts | 3 ++- packages/console/app/src/i18n/zht.ts | 3 ++- 18 files changed, 36 insertions(+), 18 deletions(-) diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts index 265787545e..cc8ac41714 100644 --- a/packages/console/app/src/i18n/ar.ts +++ b/packages/console/app/src/i18n/ar.ts @@ -662,7 +662,8 @@ export const dict = { "workspace.black.time.fewSeconds": "بضع ثوان", "workspace.black.subscription.title": "الاشتراك", "workspace.black.subscription.message": "أنت مشترك في OpenCode Black مقابل ${{plan}} شهريًا.", - "workspace.black.subscription.ending": "ينتهي OpenCode Black بنهاية فترة الفوترة الحالية ولن يتم تجديده. سننقلك إلى وحدة التحكم الجديدة.", + "workspace.black.subscription.ending": + "ينتهي OpenCode Black بنهاية فترة الفوترة الحالية ولن يتم تجديده. سننقلك إلى وحدة التحكم الجديدة.", "workspace.black.subscription.rollingUsage": "استخدام لمدة 5 ساعات", "workspace.black.subscription.weeklyUsage": "الاستخدام الأسبوعي", "workspace.black.subscription.resetsIn": "إعادة تعيين في", diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index c4bb47d82d..29ea6c7c40 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -673,7 +673,8 @@ export const dict = { "workspace.black.time.fewSeconds": "alguns segundos", "workspace.black.subscription.title": "Assinatura", "workspace.black.subscription.message": "Você assina o OpenCode Black por ${{plan}} por mês.", - "workspace.black.subscription.ending": "O OpenCode Black termina com o seu período de cobrança atual e não será renovado. Vamos migrar você para o novo console.", + "workspace.black.subscription.ending": + "O OpenCode Black termina com o seu período de cobrança atual e não será renovado. Vamos migrar você para o novo console.", "workspace.black.subscription.rollingUsage": "Uso de 5 horas", "workspace.black.subscription.weeklyUsage": "Uso Semanal", "workspace.black.subscription.resetsIn": "Reinicia em", diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index ab131516a2..7df4b84bfa 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -669,7 +669,8 @@ export const dict = { "workspace.black.time.fewSeconds": "et par sekunder", "workspace.black.subscription.title": "Abonnement", "workspace.black.subscription.message": "Du abonnerer på OpenCode Black for ${{plan}} om måneden.", - "workspace.black.subscription.ending": "OpenCode Black slutter med din nuværende faktureringsperiode og fornyes ikke. Vi flytter dig til den nye konsol.", + "workspace.black.subscription.ending": + "OpenCode Black slutter med din nuværende faktureringsperiode og fornyes ikke. Vi flytter dig til den nye konsol.", "workspace.black.subscription.rollingUsage": "5-timers brug", "workspace.black.subscription.weeklyUsage": "Ugentlig brug", "workspace.black.subscription.resetsIn": "Nulstiller i", diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index e67be4b894..b2175d355f 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -671,7 +671,8 @@ export const dict = { "workspace.black.time.fewSeconds": "einige Sekunden", "workspace.black.subscription.title": "Abonnement", "workspace.black.subscription.message": "Du hast OpenCode Black für ${{plan}} pro Monat abonniert.", - "workspace.black.subscription.ending": "OpenCode Black endet mit deinem aktuellen Abrechnungszeitraum und wird nicht verlängert. Wir ziehen dich in die neue Konsole um.", + "workspace.black.subscription.ending": + "OpenCode Black endet mit deinem aktuellen Abrechnungszeitraum und wird nicht verlängert. Wir ziehen dich in die neue Konsole um.", "workspace.black.subscription.rollingUsage": "5-Stunden-Nutzung", "workspace.black.subscription.weeklyUsage": "Wöchentliche Nutzung", "workspace.black.subscription.resetsIn": "Setzt zurück in", diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index 5718d9fd14..8f40096964 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -668,7 +668,8 @@ export const dict = { "workspace.black.time.fewSeconds": "a few seconds", "workspace.black.subscription.title": "Subscription", "workspace.black.subscription.message": "You are subscribed to OpenCode Black for ${{plan}} per month.", - "workspace.black.subscription.ending": "OpenCode Black ends with your current billing period and won't renew. We'll move you to the new console.", + "workspace.black.subscription.ending": + "OpenCode Black ends with your current billing period and won't renew. We'll move you to the new console.", "workspace.black.subscription.rollingUsage": "5-hour Usage", "workspace.black.subscription.weeklyUsage": "Weekly Usage", "workspace.black.subscription.resetsIn": "Resets in", diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts index 29d35c3ff6..4c52cd4303 100644 --- a/packages/console/app/src/i18n/es.ts +++ b/packages/console/app/src/i18n/es.ts @@ -674,7 +674,8 @@ export const dict = { "workspace.black.time.fewSeconds": "unos pocos segundos", "workspace.black.subscription.title": "Suscripción", "workspace.black.subscription.message": "Estás suscrito a OpenCode Black por ${{plan}} al mes.", - "workspace.black.subscription.ending": "OpenCode Black finaliza con tu periodo de facturación actual y no se renovará. Te trasladaremos a la nueva consola.", + "workspace.black.subscription.ending": + "OpenCode Black finaliza con tu periodo de facturación actual y no se renovará. Te trasladaremos a la nueva consola.", "workspace.black.subscription.rollingUsage": "Uso de 5 horas", "workspace.black.subscription.weeklyUsage": "Uso Semanal", "workspace.black.subscription.resetsIn": "Se reinicia en", diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index a7db6136f4..8cf82edb94 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -676,7 +676,8 @@ export const dict = { "workspace.black.time.fewSeconds": "quelques secondes", "workspace.black.subscription.title": "Abonnement", "workspace.black.subscription.message": "Vous êtes abonné à OpenCode Black pour {{plan}} $ par mois.", - "workspace.black.subscription.ending": "OpenCode Black prend fin avec votre période de facturation actuelle et ne sera pas renouvelé. Nous vous migrerons vers la nouvelle console.", + "workspace.black.subscription.ending": + "OpenCode Black prend fin avec votre période de facturation actuelle et ne sera pas renouvelé. Nous vous migrerons vers la nouvelle console.", "workspace.black.subscription.rollingUsage": "Utilisation 5 heures", "workspace.black.subscription.weeklyUsage": "Utilisation hebdomadaire", "workspace.black.subscription.resetsIn": "Réinitialisation dans", diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts index 9a901118f9..3354b7d869 100644 --- a/packages/console/app/src/i18n/it.ts +++ b/packages/console/app/src/i18n/it.ts @@ -672,7 +672,8 @@ export const dict = { "workspace.black.time.fewSeconds": "pochi secondi", "workspace.black.subscription.title": "Abbonamento", "workspace.black.subscription.message": "Sei abbonato a OpenCode Black per ${{plan}} al mese.", - "workspace.black.subscription.ending": "OpenCode Black termina con il periodo di fatturazione in corso e non verrà rinnovato. Ti trasferiremo nella nuova console.", + "workspace.black.subscription.ending": + "OpenCode Black termina con il periodo di fatturazione in corso e non verrà rinnovato. Ti trasferiremo nella nuova console.", "workspace.black.subscription.rollingUsage": "Utilizzo 5-ore", "workspace.black.subscription.weeklyUsage": "Utilizzo Settimanale", "workspace.black.subscription.resetsIn": "Si resetta tra", diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts index 82b758b21e..11f4a5990b 100644 --- a/packages/console/app/src/i18n/ja.ts +++ b/packages/console/app/src/i18n/ja.ts @@ -669,7 +669,8 @@ export const dict = { "workspace.black.time.fewSeconds": "数秒", "workspace.black.subscription.title": "サブスクリプション", "workspace.black.subscription.message": "あなたは OpenCode Black を月額 ${{plan}} で購読しています。", - "workspace.black.subscription.ending": "OpenCode Black は現在の請求期間の終了とともに終了し、更新されません。新しいコンソールへ移行いたします。", + "workspace.black.subscription.ending": + "OpenCode Black は現在の請求期間の終了とともに終了し、更新されません。新しいコンソールへ移行いたします。", "workspace.black.subscription.rollingUsage": "5時間利用", "workspace.black.subscription.weeklyUsage": "週間利用量", "workspace.black.subscription.resetsIn": "リセットまで", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index 89bbd7904e..b80381987c 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -662,7 +662,8 @@ export const dict = { "workspace.black.time.fewSeconds": "몇 초", "workspace.black.subscription.title": "구독", "workspace.black.subscription.message": "현재 월 ${{plan}} OpenCode Black 플랜을 구독 중입니다.", - "workspace.black.subscription.ending": "OpenCode Black은 현재 결제 기간이 끝나면 종료되며 갱신되지 않습니다. 새 콘솔로 옮겨 드리겠습니다.", + "workspace.black.subscription.ending": + "OpenCode Black은 현재 결제 기간이 끝나면 종료되며 갱신되지 않습니다. 새 콘솔로 옮겨 드리겠습니다.", "workspace.black.subscription.rollingUsage": "5시간 사용량", "workspace.black.subscription.weeklyUsage": "주간 사용량", "workspace.black.subscription.resetsIn": "초기화까지 남은 시간:", diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index da980496bf..eee62b31fb 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -670,7 +670,8 @@ export const dict = { "workspace.black.time.fewSeconds": "noen få sekunder", "workspace.black.subscription.title": "Abonnement", "workspace.black.subscription.message": "Du abonnerer på OpenCode Black for ${{plan}} per måned.", - "workspace.black.subscription.ending": "OpenCode Black avsluttes med gjeldende faktureringsperiode og fornyes ikke. Vi flytter deg til den nye konsollen.", + "workspace.black.subscription.ending": + "OpenCode Black avsluttes med gjeldende faktureringsperiode og fornyes ikke. Vi flytter deg til den nye konsollen.", "workspace.black.subscription.rollingUsage": "5-timers bruk", "workspace.black.subscription.weeklyUsage": "Ukentlig bruk", "workspace.black.subscription.resetsIn": "Nullstilles om", diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index ee3ce8d2ee..b1f9c0fb81 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -671,7 +671,8 @@ export const dict = { "workspace.black.time.fewSeconds": "kilka sekund", "workspace.black.subscription.title": "Subskrypcja", "workspace.black.subscription.message": "Subskrybujesz OpenCode Black za ${{plan}} miesięcznie.", - "workspace.black.subscription.ending": "OpenCode Black kończy się wraz z bieżącym okresem rozliczeniowym i nie zostanie odnowiony. Przeniesiemy Cię do nowej konsoli.", + "workspace.black.subscription.ending": + "OpenCode Black kończy się wraz z bieżącym okresem rozliczeniowym i nie zostanie odnowiony. Przeniesiemy Cię do nowej konsoli.", "workspace.black.subscription.rollingUsage": "Użycie (okno 5h)", "workspace.black.subscription.weeklyUsage": "Użycie tygodniowe", "workspace.black.subscription.resetsIn": "Resetuje się za", diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index c7a0399c6f..1100db7b67 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -678,7 +678,8 @@ export const dict = { "workspace.black.time.fewSeconds": "несколько секунд", "workspace.black.subscription.title": "Подписка", "workspace.black.subscription.message": "Вы подписаны на OpenCode Black за ${{plan}} в месяц.", - "workspace.black.subscription.ending": "OpenCode Black завершится в конце текущего расчётного периода и не будет продлён. Мы перенесём вас в новую консоль.", + "workspace.black.subscription.ending": + "OpenCode Black завершится в конце текущего расчётного периода и не будет продлён. Мы перенесём вас в новую консоль.", "workspace.black.subscription.rollingUsage": "5-часовое использование", "workspace.black.subscription.weeklyUsage": "Недельное использование", "workspace.black.subscription.resetsIn": "Сброс через", diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts index 5becff3c10..263f0fc894 100644 --- a/packages/console/app/src/i18n/th.ts +++ b/packages/console/app/src/i18n/th.ts @@ -667,7 +667,8 @@ export const dict = { "workspace.black.time.fewSeconds": "ไม่กี่วินาที", "workspace.black.subscription.title": "การสมัครสมาชิก", "workspace.black.subscription.message": "คุณสมัครสมาชิก OpenCode Black ในราคา ${{plan}} ต่อเดือน", - "workspace.black.subscription.ending": "OpenCode Black จะสิ้นสุดเมื่อครบรอบการเรียกเก็บเงินปัจจุบันและจะไม่ต่ออายุ เราจะย้ายคุณไปยังคอนโซลใหม่", + "workspace.black.subscription.ending": + "OpenCode Black จะสิ้นสุดเมื่อครบรอบการเรียกเก็บเงินปัจจุบันและจะไม่ต่ออายุ เราจะย้ายคุณไปยังคอนโซลใหม่", "workspace.black.subscription.rollingUsage": "การใช้งาน 5 ชั่วโมง", "workspace.black.subscription.weeklyUsage": "การใช้งานรายสัปดาห์", "workspace.black.subscription.resetsIn": "รีเซ็ตใน", diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index 878768f5ce..66094f71eb 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -673,7 +673,8 @@ export const dict = { "workspace.black.time.fewSeconds": "birkaç saniye", "workspace.black.subscription.title": "Abonelik", "workspace.black.subscription.message": "Aylık ${{plan}} karşılığında OpenCode Black'e abonesiniz.", - "workspace.black.subscription.ending": "OpenCode Black mevcut fatura döneminizin sonunda sona erer ve yenilenmez. Sizi yeni konsola taşıyacağız.", + "workspace.black.subscription.ending": + "OpenCode Black mevcut fatura döneminizin sonunda sona erer ve yenilenmez. Sizi yeni konsola taşıyacağız.", "workspace.black.subscription.rollingUsage": "5 Saatlik Kullanım", "workspace.black.subscription.weeklyUsage": "Haftalık Kullanım", "workspace.black.subscription.resetsIn": "Sıfırlama süresi", diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts index 6fd079052f..4def2f78da 100644 --- a/packages/console/app/src/i18n/uk.ts +++ b/packages/console/app/src/i18n/uk.ts @@ -668,7 +668,8 @@ export const dict = { "workspace.black.time.fewSeconds": "кілька секунд", "workspace.black.subscription.title": "Підписка", "workspace.black.subscription.message": "Ви підписані на OpenCode Black за ${{plan}} на місяць.", - "workspace.black.subscription.ending": "OpenCode Black завершиться наприкінці поточного розрахункового періоду й не буде подовжений. Ми перенесемо вас до нової консолі.", + "workspace.black.subscription.ending": + "OpenCode Black завершиться наприкінці поточного розрахункового періоду й не буде подовжений. Ми перенесемо вас до нової консолі.", "workspace.black.subscription.rollingUsage": "Використання (5 год)", "workspace.black.subscription.weeklyUsage": "Тижневе використання", "workspace.black.subscription.resetsIn": "Скидається через", diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts index 228c87b4bb..5596523a1a 100644 --- a/packages/console/app/src/i18n/zh.ts +++ b/packages/console/app/src/i18n/zh.ts @@ -643,7 +643,8 @@ export const dict = { "workspace.black.time.fewSeconds": "几秒钟", "workspace.black.subscription.title": "订阅", "workspace.black.subscription.message": "您已订阅 OpenCode Black,价格为每月 ${{plan}}。", - "workspace.black.subscription.ending": "OpenCode Black 将在当前计费周期结束时终止,不会续订。我们会将你迁移到新的控制台。", + "workspace.black.subscription.ending": + "OpenCode Black 将在当前计费周期结束时终止,不会续订。我们会将你迁移到新的控制台。", "workspace.black.subscription.rollingUsage": "5 小时用量", "workspace.black.subscription.weeklyUsage": "每周用量", "workspace.black.subscription.resetsIn": "重置于", diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts index fca811b59d..7e1909c5ab 100644 --- a/packages/console/app/src/i18n/zht.ts +++ b/packages/console/app/src/i18n/zht.ts @@ -642,7 +642,8 @@ export const dict = { "workspace.black.time.fewSeconds": "幾秒鐘", "workspace.black.subscription.title": "訂閱", "workspace.black.subscription.message": "你已訂閱 OpenCode Black,費用為每月 ${{plan}}。", - "workspace.black.subscription.ending": "OpenCode Black 將於目前計費週期結束時終止,不會續訂。我們會將你遷移至新的控制台。", + "workspace.black.subscription.ending": + "OpenCode Black 將於目前計費週期結束時終止,不會續訂。我們會將你遷移至新的控制台。", "workspace.black.subscription.rollingUsage": "5 小時使用量", "workspace.black.subscription.weeklyUsage": "每週使用量", "workspace.black.subscription.resetsIn": "重置於", From 7f964bbb00e505178847e2c08721b0fff56208f9 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 28 Sep 2026 11:30:23 -0500 Subject: [PATCH 06/10] fix(stats): keep chart tooltips readable (#51898) --- packages/stats/app/src/routes/index.css | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/stats/app/src/routes/index.css b/packages/stats/app/src/routes/index.css index 472280cca3..03009ebfe2 100644 --- a/packages/stats/app/src/routes/index.css +++ b/packages/stats/app/src/routes/index.css @@ -1212,6 +1212,10 @@ body { cursor: pointer; } +[data-page="stats"] [data-slot="top-models-bar"][data-active="true"] { + z-index: 2; +} + [data-page="stats"] [data-slot="top-models-bar"]::before { position: absolute; top: 0; @@ -1572,7 +1576,7 @@ body { gap: 8px; min-width: 220px; padding: 16px; - background: #fffffff2; + background: #ffffff; border: 1px solid var(--stats-line-strong); box-shadow: 0 8px 16px #0000000a, @@ -1640,7 +1644,7 @@ body { width: 192px; min-width: 192px; padding: 0; - background: #fffffff2; + background: #ffffff; border: 0; box-shadow: 0 0 0 0.5px #00000024, @@ -2390,7 +2394,7 @@ body { min-width: 228px; padding: 0; border: 0; - background: #fffffff2; + background: #ffffff; box-shadow: 0 0 0 0.5px #00000024, 0 8px 16px #0000000f, @@ -7325,7 +7329,7 @@ body { [data-page="stats"][data-theme="dark"] [data-component="chart-tooltip"], :root[data-stats-theme="dark"] [data-page="stats"]:not([data-theme="light"]) [data-component="chart-tooltip"] { - background: #242424f2; + background: #242424; } [data-page="stats"][data-theme="dark"] @@ -7340,7 +7344,7 @@ body { [data-page="stats"]:not([data-theme="light"]) :is([data-section="top-models"], [data-section="unique-users"]) [data-component="chart-tooltip"] { - background: #242424f2; + background: #242424; box-shadow: 0 0 0 0.5px #ffffff24, 0 8px 16px #0000003d, @@ -7503,14 +7507,14 @@ body { } :root:not([data-stats-theme="light"]) [data-page="stats"]:not([data-theme="light"]) [data-component="chart-tooltip"] { - background: #242424f2; + background: #242424; } :root:not([data-stats-theme="light"]) [data-page="stats"]:not([data-theme="light"]) [data-section="top-models"] [data-component="chart-tooltip"] { - background: #242424f2; + background: #242424; box-shadow: 0 0 0 0.5px #ffffff24, 0 8px 16px #0000003d, From d03d6e28d6b8f20471b720f594ba400a07ef2d72 Mon Sep 17 00:00:00 2001 From: vprdev Date: Mon, 28 Sep 2026 12:52:09 -0700 Subject: [PATCH 07/10] fix(console): tell referral link visitors the program has ended (#51920) --- packages/console/app/src/i18n/ar.ts | 2 ++ packages/console/app/src/i18n/br.ts | 2 ++ packages/console/app/src/i18n/da.ts | 2 ++ packages/console/app/src/i18n/de.ts | 2 ++ packages/console/app/src/i18n/en.ts | 2 ++ packages/console/app/src/i18n/es.ts | 2 ++ packages/console/app/src/i18n/fr.ts | 2 ++ packages/console/app/src/i18n/it.ts | 2 ++ packages/console/app/src/i18n/ja.ts | 2 ++ packages/console/app/src/i18n/ko.ts | 2 ++ packages/console/app/src/i18n/no.ts | 2 ++ packages/console/app/src/i18n/pl.ts | 2 ++ packages/console/app/src/i18n/ru.ts | 2 ++ packages/console/app/src/i18n/th.ts | 2 ++ packages/console/app/src/i18n/tr.ts | 2 ++ packages/console/app/src/i18n/uk.ts | 2 ++ packages/console/app/src/i18n/zh.ts | 2 ++ packages/console/app/src/i18n/zht.ts | 2 ++ packages/console/app/src/routes/go/index.css | 20 ++++++++++++++++++++ packages/console/app/src/routes/go/index.tsx | 11 +++++++++-- 20 files changed, 65 insertions(+), 2 deletions(-) diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts index cc8ac41714..786df4adeb 100644 --- a/packages/console/app/src/i18n/ar.ts +++ b/packages/console/app/src/i18n/ar.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "يتوفر Space Bunny Free، وهو نموذج مجهول جديد، لفترة محدودة", + "go.referral.ended.label": "تحذير", + "go.referral.ended": "انتهى برنامج الإحالة. لم تعد روابط الإحالة تمنح رصيدًا لك أو للشخص الذي شاركها.", "go.graph.bonus": "استخدام مضاعف {{count}} مرات", "nav.github": "GitHub", "nav.docs": "الوثائق", diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index 29ea6c7c40..d6a53167cf 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, um novo modelo anônimo, está disponível por tempo limitado", + "go.referral.ended.label": "Aviso", + "go.referral.ended": "O programa de indicação foi encerrado. Links de indicação não geram mais crédito para você nem para quem os compartilhou.", "go.graph.bonus": "{{count}}× mais uso", "nav.github": "GitHub", "nav.docs": "Documentação", diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index 7df4b84bfa..0ed501e374 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, en ny anonym model, er tilgængelig i en begrænset periode", + "go.referral.ended.label": "Advarsel", + "go.referral.ended": "Henvisningsprogrammet er afsluttet. Henvisningslinks giver ikke længere kredit til dig eller den, der delte dem.", "go.graph.bonus": "{{count}}× forbrug", "nav.github": "GitHub", "nav.docs": "Dokumentation", diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index b2175d355f..ac91623051 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, ein neues anonymes Modell, ist für begrenzte Zeit verfügbar", + "go.referral.ended.label": "Warnung", + "go.referral.ended": "Das Empfehlungsprogramm wurde beendet. Empfehlungslinks bringen weder dir noch der Person, die sie geteilt hat, Guthaben.", "go.graph.bonus": "{{count}}× Nutzung", "nav.github": "GitHub", "nav.docs": "Dokumentation", diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index 8f40096964..fd2efc3136 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -1,5 +1,7 @@ export const dict = { "go.promo.spaceBunny": "Space Bunny Free, a new anonymous model, is available for a limited time", + "go.referral.ended.label": "Warning", + "go.referral.ended": "The referral program has ended. Referral links no longer earn credit for you or the person who shared them.", "go.graph.bonus": "{{count}}× usage", "nav.github": "GitHub", "nav.docs": "Docs", diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts index 4c52cd4303..c19e8d1b25 100644 --- a/packages/console/app/src/i18n/es.ts +++ b/packages/console/app/src/i18n/es.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, un nuevo modelo anónimo, está disponible por tiempo limitado", + "go.referral.ended.label": "Advertencia", + "go.referral.ended": "El programa de referidos ha terminado. Los enlaces de referido ya no otorgan crédito ni a ti ni a quien los compartió.", "go.graph.bonus": "{{count}}× de uso", "nav.github": "GitHub", "nav.docs": "Documentación", diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index 8cf82edb94..7321b44d5f 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, un nouveau modèle anonyme, est disponible pour une durée limitée", + "go.referral.ended.label": "Avertissement", + "go.referral.ended": "Le programme de parrainage est terminé. Les liens de parrainage ne donnent plus de crédit, ni à vous ni à la personne qui les a partagés.", "go.graph.bonus": "{{count}}× d’utilisation", "app.meta.description": "OpenCode - L'agent de code open source.", "nav.github": "GitHub", diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts index 3354b7d869..438f0e7388 100644 --- a/packages/console/app/src/i18n/it.ts +++ b/packages/console/app/src/i18n/it.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, un nuovo modello anonimo, è disponibile per un periodo limitato", + "go.referral.ended.label": "Avviso", + "go.referral.ended": "Il programma referral è terminato. I link referral non danno più credito né a te né a chi li ha condivisi.", "go.graph.bonus": "Utilizzo {{count}}×", "nav.github": "GitHub", "nav.docs": "Documentazione", diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts index 11f4a5990b..916853dbd6 100644 --- a/packages/console/app/src/i18n/ja.ts +++ b/packages/console/app/src/i18n/ja.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "新しい匿名モデル Space Bunny Free が期間限定で利用可能です", + "go.referral.ended.label": "警告", + "go.referral.ended": "紹介プログラムは終了しました。紹介リンクを使っても、あなたや共有した人にクレジットは付与されません。", "go.graph.bonus": "利用枠{{count}}倍", "nav.github": "GitHub", "nav.docs": "ドキュメント", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index b80381987c..ac64a7e225 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "새로운 익명 모델 Space Bunny Free를 한정된 기간 동안 사용할 수 있습니다", + "go.referral.ended.label": "경고", + "go.referral.ended": "추천 프로그램이 종료되었습니다. 추천 링크로는 더 이상 본인이나 링크를 공유한 사람에게 크레딧이 지급되지 않습니다.", "go.graph.bonus": "사용량 {{count}}배", "nav.github": "GitHub", "nav.docs": "문서", diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index eee62b31fb..a95c2840a2 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, en ny anonym modell, er tilgjengelig i en begrenset periode", + "go.referral.ended.label": "Advarsel", + "go.referral.ended": "Henvisningsprogrammet er avsluttet. Henvisningslenker gir ikke lenger kreditt til deg eller den som delte dem.", "go.graph.bonus": "{{count}}× bruk", "nav.github": "GitHub", "nav.docs": "Dokumentasjon", diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index b1f9c0fb81..6d9e49ec5e 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -3,6 +3,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, nowy anonimowy model, jest dostępny przez ograniczony czas", + "go.referral.ended.label": "Ostrzeżenie", + "go.referral.ended": "Program poleceń został zakończony. Linki polecające nie dają już środków ani Tobie, ani osobie, która je udostępniła.", "go.graph.bonus": "{{count}}× większy limit", "nav.github": "GitHub", "nav.docs": "Dokumentacja", diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index 1100db7b67..e759cf9200 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free — новая анонимная модель, доступная в течение ограниченного времени", + "go.referral.ended.label": "Предупреждение", + "go.referral.ended": "Реферальная программа завершена. Реферальные ссылки больше не начисляют кредиты ни вам, ни тому, кто ими поделился.", "go.graph.bonus": "Лимит ×{{count}}", "nav.github": "GitHub", "nav.docs": "Документация", diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts index 263f0fc894..67f3868df7 100644 --- a/packages/console/app/src/i18n/th.ts +++ b/packages/console/app/src/i18n/th.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free โมเดลนิรนามใหม่ เปิดให้ใช้งานในช่วงเวลาจำกัด", + "go.referral.ended.label": "คำเตือน", + "go.referral.ended": "โปรแกรมแนะนำเพื่อนสิ้นสุดแล้ว ลิงก์แนะนำจะไม่ให้เครดิตแก่คุณหรือผู้ที่แชร์ลิงก์อีกต่อไป", "go.graph.bonus": "ใช้งาน {{count}} เท่า", "nav.github": "GitHub", "nav.docs": "เอกสาร", diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index 66094f71eb..f7c02947d4 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Yeni anonim model Space Bunny Free sınırlı bir süre için kullanılabilir", + "go.referral.ended.label": "Uyarı", + "go.referral.ended": "Tavsiye programı sona erdi. Tavsiye bağlantıları artık size veya bağlantıyı paylaşan kişiye kredi kazandırmıyor.", "go.graph.bonus": "{{count}}× kullanım", "nav.github": "GitHub", "nav.docs": "Dokümantasyon", diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts index 4def2f78da..97c67139cd 100644 --- a/packages/console/app/src/i18n/uk.ts +++ b/packages/console/app/src/i18n/uk.ts @@ -3,6 +3,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free — нова анонімна модель, доступна протягом обмеженого часу", + "go.referral.ended.label": "Попередження", + "go.referral.ended": "Реферальну програму завершено. Реферальні посилання більше не нараховують кредити ні вам, ні тому, хто ними поділився.", "go.graph.bonus": "Ліміт ×{{count}}", "nav.github": "GitHub", "nav.docs": "Документація", diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts index 5596523a1a..e728887bbf 100644 --- a/packages/console/app/src/i18n/zh.ts +++ b/packages/console/app/src/i18n/zh.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "全新匿名模型 Space Bunny Free 限时上线", + "go.referral.ended.label": "警告", + "go.referral.ended": "推荐计划已结束。推荐链接不再为你或分享链接的人提供额度。", "go.graph.bonus": "{{count}} 倍用量", "nav.github": "GitHub", "nav.docs": "文档", diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts index 7e1909c5ab..c8d50ea3be 100644 --- a/packages/console/app/src/i18n/zht.ts +++ b/packages/console/app/src/i18n/zht.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "全新匿名模型 Space Bunny Free 限時上線", + "go.referral.ended.label": "警告", + "go.referral.ended": "推薦計畫已結束。推薦連結不再為你或分享連結的人提供額度。", "go.graph.bonus": "{{count}} 倍用量", "nav.github": "GitHub", "nav.docs": "文件", diff --git a/packages/console/app/src/routes/go/index.css b/packages/console/app/src/routes/go/index.css index b09be1e92a..b74ad9306a 100644 --- a/packages/console/app/src/routes/go/index.css +++ b/packages/console/app/src/routes/go/index.css @@ -340,6 +340,26 @@ body { } } + [data-component="referral-ended-notice"] { + /* Matches the docs warning callout, which uses fixed colors in both themes. */ + border: 1px solid rgb(98, 71, 31); + background: rgb(28, 20, 8); + color: rgb(239, 239, 239); + line-height: 1.8; + padding: 16px; + margin-bottom: 24px; + + strong { + display: block; + text-transform: uppercase; + margin-bottom: 8px; + } + + p { + margin: 0; + } + } + [data-component="desktop-app-banner"] { display: flex; align-items: center; diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index ec1e78efae..49facbc8e2 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -1,7 +1,7 @@ import "./index.css" -import { createAsync, query } from "@solidjs/router" +import { createAsync, query, useSearchParams } from "@solidjs/router" import { Title, Meta } from "@solidjs/meta" -import { For } from "solid-js" +import { For, Show } from "solid-js" //import { HttpHeader } from "@solidjs/start" import goLogoLight from "../../asset/go-ornate-light.svg" import goLogoDark from "../../asset/go-ornate-dark.svg" @@ -61,6 +61,7 @@ export default function Home() { const subscribeUrl = "https://opencode.ai/console/go" const i18n = useI18n() const language = useLanguage() + const [searchParams] = useSearchParams() return (
{/**/} @@ -89,6 +90,12 @@ export default function Home() {
+ + +
{i18n.t("home.banner.badge")}
From 90853b212122bd15af24249ff2f8f0dcfb581df9 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Mon, 28 Sep 2026 19:53:39 +0000 Subject: [PATCH 08/10] chore: generate --- packages/console/app/src/i18n/br.ts | 3 ++- packages/console/app/src/i18n/da.ts | 3 ++- packages/console/app/src/i18n/de.ts | 3 ++- packages/console/app/src/i18n/en.ts | 3 ++- packages/console/app/src/i18n/es.ts | 3 ++- packages/console/app/src/i18n/fr.ts | 3 ++- packages/console/app/src/i18n/it.ts | 3 ++- packages/console/app/src/i18n/ja.ts | 3 ++- packages/console/app/src/i18n/ko.ts | 3 ++- packages/console/app/src/i18n/no.ts | 3 ++- packages/console/app/src/i18n/pl.ts | 3 ++- packages/console/app/src/i18n/ru.ts | 3 ++- packages/console/app/src/i18n/tr.ts | 3 ++- packages/console/app/src/i18n/uk.ts | 3 ++- 14 files changed, 28 insertions(+), 14 deletions(-) diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index d6a53167cf..ea6546ace6 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -5,7 +5,8 @@ export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, um novo modelo anônimo, está disponível por tempo limitado", "go.referral.ended.label": "Aviso", - "go.referral.ended": "O programa de indicação foi encerrado. Links de indicação não geram mais crédito para você nem para quem os compartilhou.", + "go.referral.ended": + "O programa de indicação foi encerrado. Links de indicação não geram mais crédito para você nem para quem os compartilhou.", "go.graph.bonus": "{{count}}× mais uso", "nav.github": "GitHub", "nav.docs": "Documentação", diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index 0ed501e374..79917f33dc 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -5,7 +5,8 @@ export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, en ny anonym model, er tilgængelig i en begrænset periode", "go.referral.ended.label": "Advarsel", - "go.referral.ended": "Henvisningsprogrammet er afsluttet. Henvisningslinks giver ikke længere kredit til dig eller den, der delte dem.", + "go.referral.ended": + "Henvisningsprogrammet er afsluttet. Henvisningslinks giver ikke længere kredit til dig eller den, der delte dem.", "go.graph.bonus": "{{count}}× forbrug", "nav.github": "GitHub", "nav.docs": "Dokumentation", diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index ac91623051..c98597a0f9 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -5,7 +5,8 @@ export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, ein neues anonymes Modell, ist für begrenzte Zeit verfügbar", "go.referral.ended.label": "Warnung", - "go.referral.ended": "Das Empfehlungsprogramm wurde beendet. Empfehlungslinks bringen weder dir noch der Person, die sie geteilt hat, Guthaben.", + "go.referral.ended": + "Das Empfehlungsprogramm wurde beendet. Empfehlungslinks bringen weder dir noch der Person, die sie geteilt hat, Guthaben.", "go.graph.bonus": "{{count}}× Nutzung", "nav.github": "GitHub", "nav.docs": "Dokumentation", diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index fd2efc3136..9fbd396271 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -1,7 +1,8 @@ export const dict = { "go.promo.spaceBunny": "Space Bunny Free, a new anonymous model, is available for a limited time", "go.referral.ended.label": "Warning", - "go.referral.ended": "The referral program has ended. Referral links no longer earn credit for you or the person who shared them.", + "go.referral.ended": + "The referral program has ended. Referral links no longer earn credit for you or the person who shared them.", "go.graph.bonus": "{{count}}× usage", "nav.github": "GitHub", "nav.docs": "Docs", diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts index c19e8d1b25..79ddbe11b4 100644 --- a/packages/console/app/src/i18n/es.ts +++ b/packages/console/app/src/i18n/es.ts @@ -5,7 +5,8 @@ export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, un nuevo modelo anónimo, está disponible por tiempo limitado", "go.referral.ended.label": "Advertencia", - "go.referral.ended": "El programa de referidos ha terminado. Los enlaces de referido ya no otorgan crédito ni a ti ni a quien los compartió.", + "go.referral.ended": + "El programa de referidos ha terminado. Los enlaces de referido ya no otorgan crédito ni a ti ni a quien los compartió.", "go.graph.bonus": "{{count}}× de uso", "nav.github": "GitHub", "nav.docs": "Documentación", diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index 7321b44d5f..52c6f0f4f0 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -5,7 +5,8 @@ export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, un nouveau modèle anonyme, est disponible pour une durée limitée", "go.referral.ended.label": "Avertissement", - "go.referral.ended": "Le programme de parrainage est terminé. Les liens de parrainage ne donnent plus de crédit, ni à vous ni à la personne qui les a partagés.", + "go.referral.ended": + "Le programme de parrainage est terminé. Les liens de parrainage ne donnent plus de crédit, ni à vous ni à la personne qui les a partagés.", "go.graph.bonus": "{{count}}× d’utilisation", "app.meta.description": "OpenCode - L'agent de code open source.", "nav.github": "GitHub", diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts index 438f0e7388..07054bd41a 100644 --- a/packages/console/app/src/i18n/it.ts +++ b/packages/console/app/src/i18n/it.ts @@ -5,7 +5,8 @@ export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, un nuovo modello anonimo, è disponibile per un periodo limitato", "go.referral.ended.label": "Avviso", - "go.referral.ended": "Il programma referral è terminato. I link referral non danno più credito né a te né a chi li ha condivisi.", + "go.referral.ended": + "Il programma referral è terminato. I link referral non danno più credito né a te né a chi li ha condivisi.", "go.graph.bonus": "Utilizzo {{count}}×", "nav.github": "GitHub", "nav.docs": "Documentazione", diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts index 916853dbd6..4da13b3b3b 100644 --- a/packages/console/app/src/i18n/ja.ts +++ b/packages/console/app/src/i18n/ja.ts @@ -5,7 +5,8 @@ export const dict = { ...en, "go.promo.spaceBunny": "新しい匿名モデル Space Bunny Free が期間限定で利用可能です", "go.referral.ended.label": "警告", - "go.referral.ended": "紹介プログラムは終了しました。紹介リンクを使っても、あなたや共有した人にクレジットは付与されません。", + "go.referral.ended": + "紹介プログラムは終了しました。紹介リンクを使っても、あなたや共有した人にクレジットは付与されません。", "go.graph.bonus": "利用枠{{count}}倍", "nav.github": "GitHub", "nav.docs": "ドキュメント", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index ac64a7e225..192f8179e6 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -5,7 +5,8 @@ export const dict = { ...en, "go.promo.spaceBunny": "새로운 익명 모델 Space Bunny Free를 한정된 기간 동안 사용할 수 있습니다", "go.referral.ended.label": "경고", - "go.referral.ended": "추천 프로그램이 종료되었습니다. 추천 링크로는 더 이상 본인이나 링크를 공유한 사람에게 크레딧이 지급되지 않습니다.", + "go.referral.ended": + "추천 프로그램이 종료되었습니다. 추천 링크로는 더 이상 본인이나 링크를 공유한 사람에게 크레딧이 지급되지 않습니다.", "go.graph.bonus": "사용량 {{count}}배", "nav.github": "GitHub", "nav.docs": "문서", diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index a95c2840a2..12b6c9e0fe 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -5,7 +5,8 @@ export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, en ny anonym modell, er tilgjengelig i en begrenset periode", "go.referral.ended.label": "Advarsel", - "go.referral.ended": "Henvisningsprogrammet er avsluttet. Henvisningslenker gir ikke lenger kreditt til deg eller den som delte dem.", + "go.referral.ended": + "Henvisningsprogrammet er avsluttet. Henvisningslenker gir ikke lenger kreditt til deg eller den som delte dem.", "go.graph.bonus": "{{count}}× bruk", "nav.github": "GitHub", "nav.docs": "Dokumentasjon", diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index 6d9e49ec5e..6ef12d8ab6 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -4,7 +4,8 @@ export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, nowy anonimowy model, jest dostępny przez ograniczony czas", "go.referral.ended.label": "Ostrzeżenie", - "go.referral.ended": "Program poleceń został zakończony. Linki polecające nie dają już środków ani Tobie, ani osobie, która je udostępniła.", + "go.referral.ended": + "Program poleceń został zakończony. Linki polecające nie dają już środków ani Tobie, ani osobie, która je udostępniła.", "go.graph.bonus": "{{count}}× większy limit", "nav.github": "GitHub", "nav.docs": "Dokumentacja", diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index e759cf9200..498df29ec4 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -5,7 +5,8 @@ export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free — новая анонимная модель, доступная в течение ограниченного времени", "go.referral.ended.label": "Предупреждение", - "go.referral.ended": "Реферальная программа завершена. Реферальные ссылки больше не начисляют кредиты ни вам, ни тому, кто ими поделился.", + "go.referral.ended": + "Реферальная программа завершена. Реферальные ссылки больше не начисляют кредиты ни вам, ни тому, кто ими поделился.", "go.graph.bonus": "Лимит ×{{count}}", "nav.github": "GitHub", "nav.docs": "Документация", diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index f7c02947d4..4904115494 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -5,7 +5,8 @@ export const dict = { ...en, "go.promo.spaceBunny": "Yeni anonim model Space Bunny Free sınırlı bir süre için kullanılabilir", "go.referral.ended.label": "Uyarı", - "go.referral.ended": "Tavsiye programı sona erdi. Tavsiye bağlantıları artık size veya bağlantıyı paylaşan kişiye kredi kazandırmıyor.", + "go.referral.ended": + "Tavsiye programı sona erdi. Tavsiye bağlantıları artık size veya bağlantıyı paylaşan kişiye kredi kazandırmıyor.", "go.graph.bonus": "{{count}}× kullanım", "nav.github": "GitHub", "nav.docs": "Dokümantasyon", diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts index 97c67139cd..dd5e322a0b 100644 --- a/packages/console/app/src/i18n/uk.ts +++ b/packages/console/app/src/i18n/uk.ts @@ -4,7 +4,8 @@ export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free — нова анонімна модель, доступна протягом обмеженого часу", "go.referral.ended.label": "Попередження", - "go.referral.ended": "Реферальну програму завершено. Реферальні посилання більше не нараховують кредити ні вам, ні тому, хто ними поділився.", + "go.referral.ended": + "Реферальну програму завершено. Реферальні посилання більше не нараховують кредити ні вам, ні тому, хто ними поділився.", "go.graph.bonus": "Ліміт ×{{count}}", "nav.github": "GitHub", "nav.docs": "Документація", From d1dc00d83d22e1e341779c17c03848a5e631b4ee Mon Sep 17 00:00:00 2001 From: vprdev Date: Mon, 28 Sep 2026 12:55:38 -0700 Subject: [PATCH 09/10] feat(console): refresh Go page hero and plans to match design (#51933) --- .../console/app/src/asset/go-ornate-dark.svg | 6 - .../console/app/src/asset/go-ornate-light.svg | 6 - .../app/src/component/go-plan-chart.css | 10 +- packages/console/app/src/component/icon.tsx | 31 ++- packages/console/app/src/i18n/ar.ts | 3 +- packages/console/app/src/i18n/br.ts | 3 +- packages/console/app/src/i18n/da.ts | 3 +- packages/console/app/src/i18n/de.ts | 3 +- packages/console/app/src/i18n/en.ts | 3 +- packages/console/app/src/i18n/es.ts | 3 +- packages/console/app/src/i18n/fr.ts | 3 +- packages/console/app/src/i18n/it.ts | 3 +- packages/console/app/src/i18n/ja.ts | 1 + packages/console/app/src/i18n/ko.ts | 1 + packages/console/app/src/i18n/no.ts | 3 +- packages/console/app/src/i18n/pl.ts | 3 +- packages/console/app/src/i18n/ru.ts | 3 +- packages/console/app/src/i18n/th.ts | 3 +- packages/console/app/src/i18n/tr.ts | 3 +- packages/console/app/src/i18n/uk.ts | 3 +- packages/console/app/src/i18n/zh.ts | 3 +- packages/console/app/src/i18n/zht.ts | 3 +- packages/console/app/src/routes/go/index.css | 228 ++++++++---------- packages/console/app/src/routes/go/index.tsx | 139 +++-------- 24 files changed, 190 insertions(+), 280 deletions(-) delete mode 100644 packages/console/app/src/asset/go-ornate-dark.svg delete mode 100644 packages/console/app/src/asset/go-ornate-light.svg diff --git a/packages/console/app/src/asset/go-ornate-dark.svg b/packages/console/app/src/asset/go-ornate-dark.svg deleted file mode 100644 index 9b617c6777..0000000000 --- a/packages/console/app/src/asset/go-ornate-dark.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/packages/console/app/src/asset/go-ornate-light.svg b/packages/console/app/src/asset/go-ornate-light.svg deleted file mode 100644 index 79991973d6..0000000000 --- a/packages/console/app/src/asset/go-ornate-light.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/packages/console/app/src/component/go-plan-chart.css b/packages/console/app/src/component/go-plan-chart.css index b2ca0ca661..ae0c277aef 100644 --- a/packages/console/app/src/component/go-plan-chart.css +++ b/packages/console/app/src/component/go-plan-chart.css @@ -1,13 +1,5 @@ @import "@opencode-ai/ui/v2/styles/colors.css"; -@font-face { - font-family: "Inter"; - src: url("@opencode-ai/ui/fonts/Inter.ttf") format("truetype"); - font-style: normal; - font-weight: 100 900; - font-display: swap; -} - [data-page="go"] { --go-console-bg: var(--v2-grey-50); --go-console-surface: var(--v2-grey-100); @@ -35,7 +27,7 @@ padding: 2rem var(--padding) 3rem; background: var(--go-console-bg); color: var(--go-console-text); - font-family: "Inter", sans-serif; + font-family: var(--font-mono); font-size: 0.8125rem; font-weight: 440; line-height: 1.25rem; diff --git a/packages/console/app/src/component/icon.tsx b/packages/console/app/src/component/icon.tsx index ed83a1934b..fc4af918fa 100644 --- a/packages/console/app/src/component/icon.tsx +++ b/packages/console/app/src/component/icon.tsx @@ -141,28 +141,16 @@ export function IconAnthropic(props: JSX.SvgSVGAttributes) { export function IconXai(props: JSX.SvgSVGAttributes) { return ( - - - + + ) } export function IconAlibaba(props: JSX.SvgSVGAttributes) { return ( - - + + ) } @@ -196,6 +184,17 @@ export function IconMiniMax(props: JSX.SvgSVGAttributes) { ) } +export function IconGoogle(props: JSX.SvgSVGAttributes) { + return ( + + + + + + + ) +} + export function IconGemini(props: JSX.SvgSVGAttributes) { return ( diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts index 786df4adeb..5f8404194f 100644 --- a/packages/console/app/src/i18n/ar.ts +++ b/packages/console/app/src/i18n/ar.ts @@ -262,6 +262,7 @@ export const dict = { "go.title": "OpenCode Go | نماذج برمجة منخفضة التكلفة للجميع", "go.meta.description": "يبلغ سعر Go ‏$10/شهر، مع حدود استخدام سخية ووصول موثوق إلى نماذج البرمجة الرائدة.", "go.hero.title": "نماذج برمجة منخفضة التكلفة للجميع", + "go.hero.tagline": "استخدمه مع أي وكيل. قم بزيادة الرصيد إذا لزم الأمر. الإلغاء في أي وقت.", "go.hero.body": "يجلب Go البرمجة الوكيلة للمبرمجين حول العالم. يوفر حدودًا سخية ووصولًا موثوقًا إلى أقوى النماذج مفتوحة المصدر، حتى تتمكن من البناء باستخدام وكلاء أقوياء دون القلق بشأن التكلفة أو التوفر.", @@ -269,7 +270,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "اشترك في Go", "go.cta.price": "$10/شهر", - "go.plans.month": "/شهر", + "go.plans.month": "شهريًا", "go.plans.plus.cta": "الاشتراك في Go Plus", "go.plans.plus.description": "تبلغ تكلفة Go Plus ‏$40/شهر مع حدود استخدام أعلى.", "go.plans.go.feature1": "نماذج مختارة بأسعار معقولة", diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index ea6546ace6..f80c600fe0 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -268,6 +268,7 @@ export const dict = { "go.meta.description": "O Go custa $10/mês, com limites generosos de uso e acesso confiável aos principais modelos de codificação.", "go.hero.title": "Modelos de codificação de baixo custo para todos", + "go.hero.tagline": "Use com qualquer agente. Adicione créditos se precisar. Cancele quando quiser.", "go.hero.body": "O Go traz a codificação com agentes para programadores em todo o mundo. Oferecendo limites generosos e acesso confiável aos modelos de código aberto mais capazes, para que você possa construir com agentes poderosos sem se preocupar com custos ou disponibilidade.", @@ -275,7 +276,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Assinar o Go", "go.cta.price": "$10/mês", - "go.plans.month": "/mês", + "go.plans.month": "por mês", "go.plans.plus.cta": "Assinar Go Plus", "go.plans.plus.description": "O Go Plus custa $40/mês e oferece limites maiores.", "go.plans.go.feature1": "Modelos selecionados e acessíveis", diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index 79917f33dc..fb854aea97 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -266,6 +266,7 @@ export const dict = { "go.meta.description": "Go koster $10/måned, med generøse brugsgrænser og pålidelig adgang til førende kodningsmodeller.", "go.hero.title": "Kodningsmodeller til lav pris for alle", + "go.hero.tagline": "Brug med enhver agent. Tank op med kredit efter behov. Afmeld når som helst.", "go.hero.body": "Go bringer agentisk kodning til programmører over hele verden. Med generøse grænser og pålidelig adgang til de mest kapable open source-modeller, så du kan bygge med kraftfulde agenter uden at bekymre dig om omkostninger eller tilgængelighed.", @@ -273,7 +274,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Abonner på Go", "go.cta.price": "$10/måned", - "go.plans.month": "/måned", + "go.plans.month": "om måneden", "go.plans.plus.cta": "Abonnér på Go Plus", "go.plans.plus.description": "Go Plus koster $40/måned og giver højere brugsgrænser.", "go.plans.go.feature1": "Udvalgte, prisvenlige modeller", diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index c98597a0f9..59c533e26e 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -268,6 +268,7 @@ export const dict = { "go.meta.description": "Go kostet $10/Monat, mit großzügigen Nutzungslimits und zuverlässigem Zugang zu führenden Coding-Modellen.", "go.hero.title": "Kostengünstige Coding-Modelle für alle", + "go.hero.tagline": "Mit jedem Agenten nutzbar. Guthaben bei Bedarf aufladen. Jederzeit kündbar.", "go.hero.body": "Go bringt Agentic Coding zu Programmierern auf der ganzen Welt. Mit großzügigen Limits und zuverlässigem Zugang zu den leistungsfähigsten Open-Source-Modellen, damit du mit leistungsstarken Agenten entwickeln kannst, ohne dir Gedanken über Kosten oder Verfügbarkeit zu machen.", @@ -275,7 +276,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Go abonnieren", "go.cta.price": "$10/Monat", - "go.plans.month": "/Monat", + "go.plans.month": "pro Monat", "go.plans.plus.cta": "Go Plus abonnieren", "go.plans.plus.description": "Go Plus kostet $40/Monat und bietet höhere Nutzungslimits.", "go.plans.go.feature1": "Ausgewählte, erschwingliche Modelle", diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index 9fbd396271..e14da575dd 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -263,6 +263,7 @@ export const dict = { "go.title": "OpenCode Go | Low cost coding models for everyone", "go.meta.description": "Go costs $10/month, with generous usage limits and reliable access to leading coding models.", "go.hero.title": "Low cost coding models for everyone", + "go.hero.tagline": "Use with any agent. Top up credit if needed. Cancel any time.", "go.hero.body": "Go brings agentic coding to programmers around the world. Offering generous limits and reliable access to the most capable open-source models, so you can build with powerful agents without worrying about cost or availability.", @@ -270,7 +271,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Subscribe to Go", "go.cta.price": "$10/month", - "go.plans.month": "/month", + "go.plans.month": "per month", "go.plans.plus.cta": "Subscribe to Go Plus", "go.plans.plus.description": "Go Plus costs $40/month with higher limits.", "go.plans.go.feature1": "Curated, affordable models", diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts index 79ddbe11b4..23e026b04b 100644 --- a/packages/console/app/src/i18n/es.ts +++ b/packages/console/app/src/i18n/es.ts @@ -269,6 +269,7 @@ export const dict = { "go.meta.description": "Go cuesta 10 $/mes, con límites de uso generosos y acceso fiable a modelos de programación líderes.", "go.hero.title": "Modelos de programación de bajo coste para todos", + "go.hero.tagline": "Úsalo con cualquier agente. Recarga crédito si lo necesitas. Cancela cuando quieras.", "go.hero.body": "Go lleva la programación agéntica a programadores de todo el mundo. Ofrece límites generosos y acceso fiable a los modelos de código abierto más capaces, para que puedas crear con agentes potentes sin preocuparte por el coste o la disponibilidad.", @@ -276,7 +277,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Suscribirse a Go", "go.cta.price": "10 $/mes", - "go.plans.month": "/mes", + "go.plans.month": "al mes", "go.plans.plus.cta": "Suscribirse a Go Plus", "go.plans.plus.description": "Go Plus cuesta 40 $/mes y ofrece límites más altos.", "go.plans.go.feature1": "Modelos seleccionados y asequibles", diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index 52c6f0f4f0..1858458113 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -270,6 +270,7 @@ export const dict = { "go.meta.description": "Go coûte 10 $/mois, avec des limites d'utilisation généreuses et un accès fiable aux principaux modèles de codage.", "go.hero.title": "Modèles de code à faible coût pour tous", + "go.hero.tagline": "Utilisable avec n'importe quel agent. Rechargez du crédit si besoin. Résiliez à tout moment.", "go.hero.body": "Go apporte le codage agentique aux programmeurs du monde entier. Offrant des limites généreuses et un accès fiable aux modèles open source les plus capables, pour que vous puissiez construire avec des agents puissants sans vous soucier du coût ou de la disponibilité.", @@ -277,7 +278,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "S'abonner à Go", "go.cta.price": "10 $/mois", - "go.plans.month": "/mois", + "go.plans.month": "par mois", "go.plans.plus.cta": "S'abonner à Go Plus", "go.plans.plus.description": "Go Plus coûte 40 $/mois et offre des limites plus élevées.", "go.plans.go.feature1": "Modèles sélectionnés et abordables", diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts index 07054bd41a..c837f2fbcb 100644 --- a/packages/console/app/src/i18n/it.ts +++ b/packages/console/app/src/i18n/it.ts @@ -266,6 +266,7 @@ export const dict = { "go.meta.description": "Go costa $10/mese, con limiti di utilizzo generosi e un accesso affidabile ai principali modelli di coding.", "go.hero.title": "Modelli di coding a basso costo per tutti", + "go.hero.tagline": "Usalo con qualsiasi agente. Ricarica il credito se necessario. Annulla quando vuoi.", "go.hero.body": "Go porta il coding agentico ai programmatori di tutto il mondo. Offrendo limiti generosi e un accesso affidabile ai modelli open source più capaci, in modo da poter costruire con agenti potenti senza preoccuparsi dei costi o della disponibilità.", @@ -273,7 +274,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Abbonati a Go", "go.cta.price": "$10/mese", - "go.plans.month": "/mese", + "go.plans.month": "al mese", "go.plans.plus.cta": "Abbonati a Go Plus", "go.plans.plus.description": "Go Plus costa $40/mese e offre limiti più alti.", "go.plans.go.feature1": "Modelli selezionati e convenienti", diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts index 4da13b3b3b..e87bbc7936 100644 --- a/packages/console/app/src/i18n/ja.ts +++ b/packages/console/app/src/i18n/ja.ts @@ -265,6 +265,7 @@ export const dict = { "go.meta.description": "Goは月額$10で、主要なコーディングモデルへのゆとりある利用上限と安定したアクセスを提供します。", "go.hero.title": "すべての人のための低価格なコーディングモデル", + "go.hero.tagline": "どのエージェントでも利用できます。必要に応じてクレジットをチャージ。いつでもキャンセル可能。", "go.hero.body": "Goは、世界中のプログラマーにエージェント型コーディングをもたらします。最も高性能なオープンソースモデルへの十分な制限と安定したアクセスを提供し、コストや可用性を気にすることなく強力なエージェントで構築できます。", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index 192f8179e6..ae0cad7d74 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -261,6 +261,7 @@ export const dict = { "go.title": "OpenCode Go | 모두를 위한 저비용 코딩 모델", "go.meta.description": "Go는 월 $10이며, 넉넉한 사용 한도와 주요 코딩 모델에 대한 안정적인 액세스를 제공합니다.", "go.hero.title": "모두를 위한 저비용 코딩 모델", + "go.hero.tagline": "어떤 에이전트와도 사용할 수 있습니다. 필요하면 크레딧을 충전하세요. 언제든지 취소할 수 있습니다.", "go.hero.body": "Go는 전 세계 프로그래머들에게 에이전트 코딩을 제공합니다. 가장 유능한 오픈 소스 모델에 대한 넉넉한 한도와 안정적인 액세스를 제공하므로, 비용이나 가용성 걱정 없이 강력한 에이전트로 빌드할 수 있습니다.", diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index 12b6c9e0fe..92a8d08aeb 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -266,6 +266,7 @@ export const dict = { "go.meta.description": "Go koster $10/måned, med sjenerøse bruksgrenser og pålitelig tilgang til ledende kodemodeller.", "go.hero.title": "Rimelige kodemodeller for alle", + "go.hero.tagline": "Bruk med hvilken som helst agent. Fyll på kreditt ved behov. Avslutt når som helst.", "go.hero.body": "Go bringer agent-koding til programmerere over hele verden. Med rause grenser og pålitelig tilgang til de mest kapable åpen kildekode-modellene, kan du bygge med kraftige agenter uten å bekymre deg for kostnader eller tilgjengelighet.", @@ -273,7 +274,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Abonner på Go", "go.cta.price": "$10/måned", - "go.plans.month": "/måned", + "go.plans.month": "per måned", "go.plans.plus.cta": "Abonner på Go Plus", "go.plans.plus.description": "Go Plus koster $40/måned og gir høyere bruksgrenser.", "go.plans.go.feature1": "Utvalgte, rimelige modeller", diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index 6ef12d8ab6..8656bdc43c 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -267,6 +267,7 @@ export const dict = { "go.meta.description": "Go kosztuje $10/miesiąc, oferując hojne limity użycia i niezawodny dostęp do wiodących modeli do kodowania.", "go.hero.title": "Niskokosztowe modele do kodowania dla każdego", + "go.hero.tagline": "Używaj z dowolnym agentem. Doładuj środki w razie potrzeby. Anuluj w dowolnym momencie.", "go.hero.body": "Go udostępnia programowanie z agentami programistom na całym świecie. Oferuje hojne limity i niezawodny dostęp do najzdolniejszych modeli open source, dzięki czemu możesz budować za pomocą potężnych agentów, nie martwiąc się o koszty czy dostępność.", @@ -274,7 +275,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Zasubskrybuj Go", "go.cta.price": "$10/miesiąc", - "go.plans.month": "/miesiąc", + "go.plans.month": "miesięcznie", "go.plans.plus.cta": "Subskrybuj Go Plus", "go.plans.plus.description": "Go Plus kosztuje $40/miesiąc i oferuje wyższe limity.", "go.plans.go.feature1": "Wyselekcjonowane, przystępne modele", diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index 498df29ec4..7730660384 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -270,6 +270,7 @@ export const dict = { "go.meta.description": "Go стоит $10/месяц и предлагает щедрые лимиты использования и надежный доступ к ведущим моделям для кодинга.", "go.hero.title": "Недорогие модели для кодинга для всех", + "go.hero.tagline": "Работает с любым агентом. Пополняйте баланс при необходимости. Отменить можно в любой момент.", "go.hero.body": "Go открывает доступ к агентам-программистам разработчикам по всему миру. Предлагая щедрые лимиты и надежный доступ к наиболее способным моделям с открытым исходным кодом, вы можете создавать проекты с мощными агентами, не беспокоясь о затратах или доступности.", @@ -277,7 +278,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Подписаться на Go", "go.cta.price": "$10/месяц", - "go.plans.month": "/мес.", + "go.plans.month": "в месяц", "go.plans.plus.cta": "Подписаться на Go Plus", "go.plans.plus.description": "Go Plus стоит $40/месяц и предлагает более высокие лимиты.", "go.plans.go.feature1": "Отобранные доступные модели", diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts index 67f3868df7..0db1f061f2 100644 --- a/packages/console/app/src/i18n/th.ts +++ b/packages/console/app/src/i18n/th.ts @@ -264,6 +264,7 @@ export const dict = { "go.meta.description": "Go มีราคา $10/เดือน พร้อมขีดจำกัดการใช้งานที่เอื้อเฟื้อและการเข้าถึงโมเดลเขียนโค้ดชั้นนำอย่างเชื่อถือได้", "go.hero.title": "โมเดลเขียนโค้ดราคาประหยัดสำหรับทุกคน", + "go.hero.tagline": "ใช้กับเอเจนต์ใดก็ได้ เติมเครดิตหากจำเป็น ยกเลิกได้ตลอดเวลา", "go.hero.body": "Go นำการเขียนโค้ดแบบเอเจนต์มาสู่นักเขียนโปรแกรมทั่วโลก เสนอขีดจำกัดที่กว้างขวางและการเข้าถึงโมเดลโอเพนซอร์สที่มีความสามารถสูงสุดได้อย่างน่าเชื่อถือ เพื่อให้คุณสามารถสร้างสรรค์ด้วยเอเจนต์ที่ทรงพลังโดยไม่ต้องกังวลเรื่องค่าใช้จ่ายหรือความพร้อมใช้งาน", @@ -271,7 +272,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "สมัครสมาชิก Go", "go.cta.price": "$10/เดือน", - "go.plans.month": "/เดือน", + "go.plans.month": "ต่อเดือน", "go.plans.plus.cta": "สมัคร Go Plus", "go.plans.plus.description": "Go Plus ราคา $40/เดือน พร้อมขีดจำกัดการใช้งานที่สูงขึ้น", "go.plans.go.feature1": "โมเดลคัดสรรในราคาคุ้มค่า", diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index 4904115494..9b5dfb238c 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -268,6 +268,7 @@ export const dict = { "go.meta.description": "Go ayda 10$'dır; cömert kullanım limitleri ve önde gelen kodlama modellerine güvenilir erişim sunar.", "go.hero.title": "Herkes için düşük maliyetli kodlama modelleri", + "go.hero.tagline": "Herhangi bir ajanla kullanın. Gerekirse kredi yükleyin. İstediğiniz zaman iptal edin.", "go.hero.body": "Go, dünya çapındaki programcılara ajan tabanlı kodlama getiriyor. En yetenekli açık kaynaklı modellere cömert limitler ve güvenilir erişim sunarak, maliyet veya erişilebilirlik konusunda endişelenmeden güçlü ajanlarla geliştirme yapmanızı sağlar.", @@ -275,7 +276,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Go'ya abone ol", "go.cta.price": "Ayda 10$", - "go.plans.month": "/ay", + "go.plans.month": "aylık", "go.plans.plus.cta": "Go Plus'a abone ol", "go.plans.plus.description": "Go Plus ayda 40$'dır ve daha yüksek limitler sunar.", "go.plans.go.feature1": "Seçilmiş, uygun fiyatlı modeller", diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts index dd5e322a0b..32f5750776 100644 --- a/packages/console/app/src/i18n/uk.ts +++ b/packages/console/app/src/i18n/uk.ts @@ -266,6 +266,7 @@ export const dict = { "go.meta.description": "Go коштує $10/місяць, зі щедрими лімітами використання та надійним доступом до провідних моделей для кодування.", "go.hero.title": "Недорогі моделі кодування для всіх", + "go.hero.tagline": "Використовуйте з будь-яким агентом. Поповнюйте за потреби. Скасуйте в будь-який час.", "go.hero.body": "Go надає агентне програмування програмістам у всьому світі, пропонуючи щедрі ліміти та надійний доступ до найкращих моделей з відкритим кодом.", @@ -273,7 +274,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Підписатися на Go", "go.cta.price": "$10/місяць", - "go.plans.month": "/місяць", + "go.plans.month": "на місяць", "go.plans.plus.cta": "Підписатися на Go Plus", "go.plans.plus.description": "Go Plus коштує $40/місяць і пропонує вищі ліміти.", "go.plans.go.feature1": "Відібрані доступні моделі", diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts index e728887bbf..13bbff9302 100644 --- a/packages/console/app/src/i18n/zh.ts +++ b/packages/console/app/src/i18n/zh.ts @@ -254,6 +254,7 @@ export const dict = { "go.title": "OpenCode Go | 人人可用的低成本编程模型", "go.meta.description": "Go 每月 $10,提供充裕的使用限额,并可可靠访问领先的编程模型。", "go.hero.title": "人人可用的低成本编程模型", + "go.hero.tagline": "可配合任何代理使用。如有需要可充值。随时取消。", "go.hero.body": "Go 将代理编程带给全世界的程序员。提供充裕的限额和对最强大的开源模型的可靠访问,让您可以利用强大的代理进行构建,而无需担心成本或可用性。", @@ -261,7 +262,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "订阅 Go", "go.cta.price": "$10/月", - "go.plans.month": "/月", + "go.plans.month": "每月", "go.plans.plus.cta": "订阅 Go Plus", "go.plans.plus.description": "Go Plus 每月 $40,提供更高的使用额度。", "go.plans.go.feature1": "精选实惠的模型", diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts index c8d50ea3be..72bd6418af 100644 --- a/packages/console/app/src/i18n/zht.ts +++ b/packages/console/app/src/i18n/zht.ts @@ -253,6 +253,7 @@ export const dict = { "go.title": "OpenCode Go | 低成本全民編碼模型", "go.meta.description": "Go 每月 $10,提供充裕的使用限額,並可穩定存取領先的編碼模型。", "go.hero.title": "低成本全民編碼模型", + "go.hero.tagline": "可搭配任何代理使用。如有需要可儲值。隨時取消。", "go.hero.body": "Go 將代理編碼帶給全世界的程式設計師。提供寬裕的限額以及對最強大開源模型的穩定存取,讓你可以使用強大的代理進行構建,而無需擔心成本或可用性。", @@ -260,7 +261,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "訂閱 Go", "go.cta.price": "$10/月", - "go.plans.month": "/月", + "go.plans.month": "每月", "go.plans.plus.cta": "訂閱 Go Plus", "go.plans.plus.description": "Go Plus 每月 $40,提供更高的使用額度。", "go.plans.go.feature1": "精選實惠的模型", diff --git a/packages/console/app/src/routes/go/index.css b/packages/console/app/src/routes/go/index.css index b74ad9306a..72a78c700d 100644 --- a/packages/console/app/src/routes/go/index.css +++ b/packages/console/app/src/routes/go/index.css @@ -322,21 +322,28 @@ body { flex-direction: column; padding: calc(var(--vertical-padding) * 1.5) var(--padding); - [data-slot="zen logo dark"] { - display: none; - } - @media (max-width: 30rem) { padding: var(--vertical-padding) var(--padding); } + } - @media (prefers-color-scheme: dark) { - [data-slot="zen logo light"] { - display: none; - } - [data-slot="zen logo dark"] { - display: block; - } + [data-component="referral-ended-notice"] { + /* Matches the docs warning callout, which uses fixed colors in both themes. */ + border: 1px solid rgb(98, 71, 31); + background: rgb(28, 20, 8); + color: rgb(239, 239, 239); + line-height: 1.8; + padding: 16px; + margin-bottom: 24px; + + strong { + display: block; + text-transform: uppercase; + margin-bottom: 8px; + } + + p { + margin: 0; } } @@ -364,14 +371,15 @@ body { display: flex; align-items: center; gap: 12px; - margin-bottom: 32px; + margin-bottom: 40px; + font-size: 16px; [data-slot="badge"] { background: var(--color-background-strong); color: var(--color-text-inverted); font-weight: 500; padding: 4px 8px; - line-height: 1; + line-height: 1.1; flex-shrink: 0; } @@ -382,8 +390,8 @@ body { } [data-slot="text"] { - color: var(--color-text-strong); - line-height: 1.4; + color: var(--color-text); + line-height: 1.5; } @media (max-width: 40rem) { @@ -394,83 +402,45 @@ body { } [data-slot="hero-copy"] { - img { - margin-bottom: 24px; + display: flex; + flex-direction: column; + gap: 40px; + margin-bottom: 80px; + + [data-slot="headline"] { + display: flex; + flex-direction: column; + gap: 24px; } h1 { - font-size: 28px; + font-size: 48px; + font-weight: 500; + line-height: 1.25; color: var(--color-text-strong); - font-weight: 700; - margin-bottom: 16px; - display: block; @media (max-width: 60rem) { - font-size: 22px; + font-size: 32px; } } p { + max-width: 720px; + font-size: 16px; + line-height: 1.75; color: var(--color-text); - margin-bottom: 24px; - max-width: 82%; - - @media (max-width: 50rem) { - max-width: 100%; - } - } - - a { - background: var(--color-background-strong); - padding: 8px 12px 8px 20px; - color: var(--color-text-inverted); - border: none; - border-radius: 4px; - font-weight: 500; - cursor: pointer; - margin-bottom: 40px; - display: flex; - width: fit-content; - gap: 12px; - text-decoration: none; - - [data-slot="cta-price"] { - display: inline-flex; - align-items: center; - gap: 8px; - } - - [data-slot="cta-price-old"] { - opacity: 0.45; - text-decoration: line-through; - } - - [data-slot="cta-price-new"] { - opacity: 1; - } - - svg { - opacity: 0.6; - } - } - - a:hover { - background: var(--color-background-strong-hover); } } + [data-slot="model-logos"] { display: flex; - gap: 24px; - margin-bottom: 56px; + flex-wrap: wrap; + gap: 8px; svg { - color: var(--color-background-strong); - } - - @media (prefers-color-scheme: dark) { - svg { - color: var(--color-background-strong); - } + width: 32px; + height: 32px; + color: var(--color-text-strong); } } @@ -1099,86 +1069,100 @@ body { [data-slot="plans"] { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 0.75rem; - margin-top: 2rem; - font-family: "Inter", sans-serif; - font-size: 0.8125rem; - font-weight: 440; - line-height: 1.25rem; - letter-spacing: -0.04px; - text-rendering: geometricPrecision; - -webkit-font-smoothing: antialiased; + gap: 24px; + font-size: 16px; + line-height: 1.5; [data-slot="plan"] { display: flex; flex-direction: column; justify-content: space-between; - gap: 1.75rem; - padding: 1rem; - border: 1px solid var(--go-console-border); - border-radius: 6px; - background: var(--go-console-surface); - color: var(--go-console-text); + gap: 80px; + padding: 24px; + border: 1px solid var(--color-border-weak); + background: var(--color-background-weak); } + + [data-slot="plan-body"] { + display: flex; + flex-direction: column; + gap: 16px; + } + [data-slot="name"] { - color: var(--go-console-secondary); - line-height: 1.25rem; + font-weight: 500; + color: var(--color-text); } + [data-slot="price"] { - margin-top: 1rem; - font-size: 1.625rem; - font-weight: 610; - line-height: 2rem; - letter-spacing: -0.5px; + display: flex; + align-items: center; + gap: 12px; + font-size: 64px; + font-weight: 500; + line-height: 1.25; + color: var(--color-text-strong); + span { - font-size: 0.8125rem; - font-weight: 440; - letter-spacing: -0.04px; - color: var(--go-console-secondary); + font-size: 16px; + line-height: 1.5; + color: var(--color-text); } } + ul { - display: grid; - gap: 0.5rem; - margin-top: 1.25rem; + display: flex; + flex-direction: column; + gap: 8px; padding: 0; list-style: none; - color: var(--go-console-secondary); + color: var(--color-text); } + li { display: flex; align-items: center; - gap: 0.5rem; - } - li span { - display: inline-flex; - flex: none; - color: var(--go-console-icon); + gap: 16px; + + svg { + flex: none; + color: var(--color-icon); + } } + a { display: flex; align-items: center; justify-content: center; - height: 2rem; - padding: 0 1rem; - font-size: 0.8125rem; - font-weight: 530; - border: 1px solid var(--go-console-border); - border-radius: 6px; - background: var(--go-console-bg); - color: var(--go-console-text); - text-align: center; + height: 40px; + padding: 0 14px 0 12px; + font-weight: 500; + line-height: 1.1; + background: var(--color-background-strong); + color: var(--color-text-inverted); + box-shadow: + inset 0 -1px 2px rgba(0, 0, 0, 0.06), + inset 0 1px 2px rgba(255, 255, 255, 0.14), + 0 0 0 0.5px var(--color-background-strong-hover), + 0 1px 1.5px rgba(0, 0, 0, 0.2); text-decoration: none; } + a:hover { - background: var(--go-console-track); + background: var(--color-background-strong-hover); } + a:focus-visible { - outline: 2px solid var(--go-console-text); + outline: 2px solid var(--color-text-strong); outline-offset: 2px; } + @media (max-width: 42rem) { grid-template-columns: 1fr; + + [data-slot="price"] { + font-size: 48px; + } } } diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index 49facbc8e2..ce4137f697 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -3,8 +3,6 @@ import { createAsync, query, useSearchParams } from "@solidjs/router" import { Title, Meta } from "@solidjs/meta" import { For, Show } from "solid-js" //import { HttpHeader } from "@solidjs/start" -import goLogoLight from "../../asset/go-ornate-light.svg" -import goLogoDark from "../../asset/go-ornate-dark.svg" import { EmailSignup } from "~/component/email-signup" import { Faq } from "~/component/faq" import { Legal } from "~/component/legal" @@ -13,7 +11,16 @@ import { Header } from "~/component/header" import { GoPlanChart } from "~/component/go-plan-chart" import { config } from "~/config" import { getLastSeenWorkspaceID } from "../workspace/common" -import { IconMiniMax, IconMiMo, IconZai, IconAlibaba, IconDeepSeek } from "~/component/icon" +import { + IconAlibaba, + IconAnthropic, + IconGoogle, + IconMiniMax, + IconMoonshotAI, + IconOpenAI, + IconXai, + IconZai, +} from "~/component/icon" import { useI18n } from "~/context/i18n" import { useLanguage } from "~/context/language" import { LocaleLinks } from "~/component/locale-links" @@ -103,94 +110,21 @@ export default function Home() {
- - -

{i18n.t("go.hero.title")}

-

{i18n.t("go.hero.body")}

-
- {/* -
- - - - - - - - -
-
- - - - -
-
- -
-
- - - - -
- */} -
- -
-
- - - -
-
- -
-
- -
-
- -
-
- -
- {/* -
- - - -
- */} +
+

{i18n.t("go.hero.title")}

+

{i18n.t("go.hero.body")}

+
+ + + + + + + + +
+

{i18n.t("go.hero.tagline")}

{(plan) => (
-
+

{plan.name}

{plan.price} {i18n.t("go.plans.month")} @@ -224,18 +158,13 @@ export default function Home() { {(feature) => (

  • - + {i18n.t(feature)}
  • )} From 8d05153965bee0a1e46eccffe944dc84d0b0c6f1 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Mon, 28 Sep 2026 19:57:36 +0000 Subject: [PATCH 10/10] chore: generate --- packages/console/app/src/component/icon.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/console/app/src/component/icon.tsx b/packages/console/app/src/component/icon.tsx index fc4af918fa..00bea727b9 100644 --- a/packages/console/app/src/component/icon.tsx +++ b/packages/console/app/src/component/icon.tsx @@ -142,7 +142,10 @@ export function IconAnthropic(props: JSX.SvgSVGAttributes) { export function IconXai(props: JSX.SvgSVGAttributes) { return ( - + ) } @@ -150,7 +153,10 @@ export function IconXai(props: JSX.SvgSVGAttributes) { export function IconAlibaba(props: JSX.SvgSVGAttributes) { return ( - + ) }
    - - {model.name} - - {i18n.t("go.graph.new")} - - - {i18n.t("go.graph.limitedTime")} - - - - - - - + {model.name} + + + + {i18n.t("go.graph.new")} + + + {i18n.t("go.graph.limitedTime")} + + + + {i18n.t("go.graph.limitedRegions")} + + + + - - {(selected) => ( - - {format().format(selected === "go" ? model.requests : model.plusRequests)} - - )} - + {format().format(model.requests)} + {format().format(model.plusRequests)} - - {(selected) => ( - - {Number.isFinite(selected === "go" ? model.allowance : model.plusAllowance) - ? currency().format(selected === "go" ? model.allowance : model.plusAllowance) - : "∞"} - - )} - + {Number.isFinite(model.allowance) ? currency().format(model.allowance) : "∞"} + {Number.isFinite(model.plusAllowance) ? currency().format(model.plusAllowance) : "∞"}