summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFrank <[email protected]>2026-02-23 23:01:23 -0500
committerFrank <[email protected]>2026-02-24 04:45:41 -0500
commitcda2af2589ddef9265ca2db379ecd4ab556f6be8 (patch)
tree40c02796f63186cf1bb27b5a80146bef7685fa16
parenteda71373b0f37e56ca07921d13b3faf566824d04 (diff)
downloadopencode-cda2af2589ddef9265ca2db379ecd4ab556f6be8.tar.gz
opencode-cda2af2589ddef9265ca2db379ecd4ab556f6be8.zip
wip: zen lite
-rw-r--r--packages/console/app/src/i18n/ar.ts1
-rw-r--r--packages/console/app/src/i18n/br.ts1
-rw-r--r--packages/console/app/src/i18n/da.ts1
-rw-r--r--packages/console/app/src/i18n/de.ts1
-rw-r--r--packages/console/app/src/i18n/en.ts1
-rw-r--r--packages/console/app/src/i18n/es.ts1
-rw-r--r--packages/console/app/src/i18n/fr.ts1
-rw-r--r--packages/console/app/src/i18n/it.ts1
-rw-r--r--packages/console/app/src/i18n/ja.ts1
-rw-r--r--packages/console/app/src/i18n/ko.ts1
-rw-r--r--packages/console/app/src/i18n/no.ts1
-rw-r--r--packages/console/app/src/i18n/pl.ts1
-rw-r--r--packages/console/app/src/i18n/ru.ts1
-rw-r--r--packages/console/app/src/i18n/th.ts1
-rw-r--r--packages/console/app/src/i18n/tr.ts1
-rw-r--r--packages/console/app/src/i18n/zh.ts1
-rw-r--r--packages/console/app/src/i18n/zht.ts1
-rw-r--r--packages/console/app/src/routes/black.css13
-rw-r--r--packages/console/app/src/routes/black/_subscribe/[plan].tsx (renamed from packages/console/app/src/routes/black/subscribe/[plan].tsx)0
-rw-r--r--packages/console/app/src/routes/black/index.tsx122
20 files changed, 94 insertions, 58 deletions
diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts
index b595af2e5..5520df87f 100644
--- a/packages/console/app/src/i18n/ar.ts
+++ b/packages/console/app/src/i18n/ar.ts
@@ -243,6 +243,7 @@ export const dict = {
"black.hero.title": "الوصول إلى أفضل نماذج البرمجة في العالم",
"black.hero.subtitle": "بما في ذلك Claude، GPT، Gemini والمزيد",
"black.title": "OpenCode Black | الأسعار",
+ "black.paused": "التسجيل في خطة Black متوقف مؤقتًا.",
"black.plan.icon20": "خطة Black 20",
"black.plan.icon100": "خطة Black 100",
"black.plan.icon200": "خطة Black 200",
diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts
index ad30d05dc..d03522683 100644
--- a/packages/console/app/src/i18n/br.ts
+++ b/packages/console/app/src/i18n/br.ts
@@ -247,6 +247,7 @@ export const dict = {
"black.hero.title": "Acesse os melhores modelos de codificação do mundo",
"black.hero.subtitle": "Incluindo Claude, GPT, Gemini e mais",
"black.title": "OpenCode Black | Preços",
+ "black.paused": "A inscrição no plano Black está temporariamente pausada.",
"black.plan.icon20": "Plano Black 20",
"black.plan.icon100": "Plano Black 100",
"black.plan.icon200": "Plano Black 200",
diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts
index bca212229..94826c438 100644
--- a/packages/console/app/src/i18n/da.ts
+++ b/packages/console/app/src/i18n/da.ts
@@ -245,6 +245,7 @@ export const dict = {
"black.hero.title": "Få adgang til verdens bedste kodningsmodeller",
"black.hero.subtitle": "Inklusive Claude, GPT, Gemini og mere",
"black.title": "OpenCode Black | Priser",
+ "black.paused": "Black-plantilmelding er midlertidigt sat på pause.",
"black.plan.icon20": "Black 20-plan",
"black.plan.icon100": "Black 100-plan",
"black.plan.icon200": "Black 200-plan",
diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts
index c54b124cd..cfa207066 100644
--- a/packages/console/app/src/i18n/de.ts
+++ b/packages/console/app/src/i18n/de.ts
@@ -247,6 +247,7 @@ export const dict = {
"black.hero.title": "Zugriff auf die weltweit besten Coding-Modelle",
"black.hero.subtitle": "Einschließlich Claude, GPT, Gemini und mehr",
"black.title": "OpenCode Black | Preise",
+ "black.paused": "Die Anmeldung zum Black-Plan ist vorübergehend pausiert.",
"black.plan.icon20": "Black 20 Plan",
"black.plan.icon100": "Black 100 Plan",
"black.plan.icon200": "Black 200 Plan",
diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts
index 7ee737e66..8e096dd5c 100644
--- a/packages/console/app/src/i18n/en.ts
+++ b/packages/console/app/src/i18n/en.ts
@@ -239,6 +239,7 @@ export const dict = {
"black.hero.title": "Access all the world's best coding models",
"black.hero.subtitle": "Including Claude, GPT, Gemini and more",
"black.title": "OpenCode Black | Pricing",
+ "black.paused": "Black plan enrollment is temporarily paused.",
"black.plan.icon20": "Black 20 plan",
"black.plan.icon100": "Black 100 plan",
"black.plan.icon200": "Black 200 plan",
diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts
index 946469ca3..c8579462e 100644
--- a/packages/console/app/src/i18n/es.ts
+++ b/packages/console/app/src/i18n/es.ts
@@ -248,6 +248,7 @@ export const dict = {
"black.hero.title": "Accede a los mejores modelos de codificación del mundo",
"black.hero.subtitle": "Incluyendo Claude, GPT, Gemini y más",
"black.title": "OpenCode Black | Precios",
+ "black.paused": "La inscripción al plan Black está temporalmente pausada.",
"black.plan.icon20": "Plan Black 20",
"black.plan.icon100": "Plan Black 100",
"black.plan.icon200": "Plan Black 200",
diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts
index e653a6c74..ccb0a8cc6 100644
--- a/packages/console/app/src/i18n/fr.ts
+++ b/packages/console/app/src/i18n/fr.ts
@@ -251,6 +251,7 @@ export const dict = {
"black.hero.title": "Accédez aux meilleurs modèles de code au monde",
"black.hero.subtitle": "Y compris Claude, GPT, Gemini et plus",
"black.title": "OpenCode Black | Tarification",
+ "black.paused": "L'inscription au plan Black est temporairement suspendue.",
"black.plan.icon20": "Forfait Black 20",
"black.plan.icon100": "Forfait Black 100",
"black.plan.icon200": "Forfait Black 200",
diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts
index 5d1c84a2d..21162f699 100644
--- a/packages/console/app/src/i18n/it.ts
+++ b/packages/console/app/src/i18n/it.ts
@@ -246,6 +246,7 @@ export const dict = {
"black.hero.title": "Accedi ai migliori modelli di coding al mondo",
"black.hero.subtitle": "Inclusi Claude, GPT, Gemini e altri",
"black.title": "OpenCode Black | Prezzi",
+ "black.paused": "L'iscrizione al piano Black è temporaneamente sospesa.",
"black.plan.icon20": "Piano Black 20",
"black.plan.icon100": "Piano Black 100",
"black.plan.icon200": "Piano Black 200",
diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts
index dbc2554a7..1f2746f2b 100644
--- a/packages/console/app/src/i18n/ja.ts
+++ b/packages/console/app/src/i18n/ja.ts
@@ -244,6 +244,7 @@ export const dict = {
"black.hero.title": "世界最高峰のコーディングモデルすべてにアクセス",
"black.hero.subtitle": "Claude、GPT、Gemini などを含む",
"black.title": "OpenCode Black | 料金",
+ "black.paused": "Blackプランの登録は一時的に停止しています。",
"black.plan.icon20": "Black 20 プラン",
"black.plan.icon100": "Black 100 プラン",
"black.plan.icon200": "Black 200 プラン",
diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts
index 4c0882f3b..5a5f9bc71 100644
--- a/packages/console/app/src/i18n/ko.ts
+++ b/packages/console/app/src/i18n/ko.ts
@@ -241,6 +241,7 @@ export const dict = {
"black.hero.title": "세계 최고의 코딩 모델에 액세스하세요",
"black.hero.subtitle": "Claude, GPT, Gemini 등 포함",
"black.title": "OpenCode Black | 가격",
+ "black.paused": "Black 플랜 등록이 일시적으로 중단되었습니다.",
"black.plan.icon20": "Black 20 플랜",
"black.plan.icon100": "Black 100 플랜",
"black.plan.icon200": "Black 200 플랜",
diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts
index a87a2493a..abd9ba086 100644
--- a/packages/console/app/src/i18n/no.ts
+++ b/packages/console/app/src/i18n/no.ts
@@ -245,6 +245,7 @@ export const dict = {
"black.hero.title": "Få tilgang til verdens beste kodemodeller",
"black.hero.subtitle": "Inkludert Claude, GPT, Gemini og mer",
"black.title": "OpenCode Black | Priser",
+ "black.paused": "Black-planregistrering er midlertidig satt på pause.",
"black.plan.icon20": "Black 20-plan",
"black.plan.icon100": "Black 100-plan",
"black.plan.icon200": "Black 200-plan",
diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts
index 0466f6410..eeb7ce2b0 100644
--- a/packages/console/app/src/i18n/pl.ts
+++ b/packages/console/app/src/i18n/pl.ts
@@ -246,6 +246,7 @@ export const dict = {
"black.hero.title": "Dostęp do najlepszych na świecie modeli kodujących",
"black.hero.subtitle": "W tym Claude, GPT, Gemini i inne",
"black.title": "OpenCode Black | Cennik",
+ "black.paused": "Rejestracja planu Black jest tymczasowo wstrzymana.",
"black.plan.icon20": "Plan Black 20",
"black.plan.icon100": "Plan Black 100",
"black.plan.icon200": "Plan Black 200",
diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts
index 86058638a..1f752fd59 100644
--- a/packages/console/app/src/i18n/ru.ts
+++ b/packages/console/app/src/i18n/ru.ts
@@ -249,6 +249,7 @@ export const dict = {
"black.hero.title": "Доступ к лучшим моделям для кодинга в мире",
"black.hero.subtitle": "Включая Claude, GPT, Gemini и другие",
"black.title": "OpenCode Black | Цены",
+ "black.paused": "Регистрация на план Black временно приостановлена.",
"black.plan.icon20": "План Black 20",
"black.plan.icon100": "План Black 100",
"black.plan.icon200": "План Black 200",
diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts
index 4646183dd..8196bd9c1 100644
--- a/packages/console/app/src/i18n/th.ts
+++ b/packages/console/app/src/i18n/th.ts
@@ -244,6 +244,7 @@ export const dict = {
"black.hero.title": "เข้าถึงโมเดลเขียนโค้ดที่ดีที่สุดในโลก",
"black.hero.subtitle": "รวมถึง Claude, GPT, Gemini และอื่นๆ อีกมากมาย",
"black.title": "OpenCode Black | ราคา",
+ "black.paused": "การสมัครแผน Black หยุดชั่วคราว",
"black.plan.icon20": "แผน Black 20",
"black.plan.icon100": "แผน Black 100",
"black.plan.icon200": "แผน Black 200",
diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts
index 9ff33dfee..7ee8b6a75 100644
--- a/packages/console/app/src/i18n/tr.ts
+++ b/packages/console/app/src/i18n/tr.ts
@@ -247,6 +247,7 @@ export const dict = {
"black.hero.title": "Dünyanın en iyi kodlama modellerine erişin",
"black.hero.subtitle": "Claude, GPT, Gemini ve daha fazlası dahil",
"black.title": "OpenCode Black | Fiyatlandırma",
+ "black.paused": "Black plan kaydı geçici olarak duraklatıldı.",
"black.plan.icon20": "Black 20 planı",
"black.plan.icon100": "Black 100 planı",
"black.plan.icon200": "Black 200 planı",
diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts
index cf3e6b0f9..e5fae6f3f 100644
--- a/packages/console/app/src/i18n/zh.ts
+++ b/packages/console/app/src/i18n/zh.ts
@@ -234,6 +234,7 @@ export const dict = {
"black.hero.title": "访问全球顶尖编程模型",
"black.hero.subtitle": "包括 Claude, GPT, Gemini 等",
"black.title": "OpenCode Black | 定价",
+ "black.paused": "Black 订阅已暂时暂停注册。",
"black.plan.icon20": "Black 20 计划",
"black.plan.icon100": "Black 100 计划",
"black.plan.icon200": "Black 200 计划",
diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts
index 8adc9e16e..79582b0ce 100644
--- a/packages/console/app/src/i18n/zht.ts
+++ b/packages/console/app/src/i18n/zht.ts
@@ -234,6 +234,7 @@ export const dict = {
"black.hero.title": "存取全球最佳編碼模型",
"black.hero.subtitle": "包括 Claude、GPT、Gemini 等",
"black.title": "OpenCode Black | 定價",
+ "black.paused": "Black 訂閱暫時暫停註冊。",
"black.plan.icon20": "Black 20 方案",
"black.plan.icon100": "Black 100 方案",
"black.plan.icon200": "Black 200 方案",
diff --git a/packages/console/app/src/routes/black.css b/packages/console/app/src/routes/black.css
index 66bffea59..4031a78fc 100644
--- a/packages/console/app/src/routes/black.css
+++ b/packages/console/app/src/routes/black.css
@@ -335,6 +335,19 @@
}
}
+ [data-slot="paused"] {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: rgba(255, 255, 255, 0.59);
+ font-size: 18px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 160%;
+ padding: 120px 20px;
+ }
+
[data-slot="pricing-card"] {
display: flex;
flex-direction: column;
diff --git a/packages/console/app/src/routes/black/subscribe/[plan].tsx b/packages/console/app/src/routes/black/_subscribe/[plan].tsx
index 644d87d9b..644d87d9b 100644
--- a/packages/console/app/src/routes/black/subscribe/[plan].tsx
+++ b/packages/console/app/src/routes/black/_subscribe/[plan].tsx
diff --git a/packages/console/app/src/routes/black/index.tsx b/packages/console/app/src/routes/black/index.tsx
index 72b196f57..382832e8f 100644
--- a/packages/console/app/src/routes/black/index.tsx
+++ b/packages/console/app/src/routes/black/index.tsx
@@ -5,6 +5,8 @@ import { PlanIcon, plans } from "./common"
import { useI18n } from "~/context/i18n"
import { useLanguage } from "~/context/language"
+const paused = true
+
export default function Black() {
const [params] = useSearchParams()
const i18n = useI18n()
@@ -42,72 +44,76 @@ export default function Black() {
<>
<Title>{i18n.t("black.title")}</Title>
<section data-slot="cta">
- <Switch>
- <Match when={!selected()}>
- <div data-slot="pricing">
- <For each={plans}>
- {(plan) => (
- <button
- type="button"
- onClick={() => select(plan.id)}
- data-slot="pricing-card"
- style={{ "view-transition-name": `card-${plan.id}` }}
- >
+ <Show when={!paused} fallback={<p data-slot="paused">{i18n.t("black.paused")}</p>}>
+ <Switch>
+ <Match when={!selected()}>
+ <div data-slot="pricing">
+ <For each={plans}>
+ {(plan) => (
+ <button
+ type="button"
+ onClick={() => select(plan.id)}
+ data-slot="pricing-card"
+ style={{ "view-transition-name": `card-${plan.id}` }}
+ >
+ <div data-slot="icon">
+ <PlanIcon plan={plan.id} />
+ </div>
+ <p data-slot="price">
+ <span data-slot="amount">${plan.id}</span>{" "}
+ <span data-slot="period">{i18n.t("black.price.perMonth")}</span>
+ <Show when={plan.multiplier}>
+ {(multiplier) => <span data-slot="multiplier">{i18n.t(multiplier())}</span>}
+ </Show>
+ </p>
+ </button>
+ )}
+ </For>
+ </div>
+ </Match>
+ <Match when={selectedPlan()}>
+ {(plan) => (
+ <div data-slot="selected-plan">
+ <div data-slot="selected-card" style={{ "view-transition-name": `card-${plan().id}` }}>
<div data-slot="icon">
- <PlanIcon plan={plan.id} />
+ <PlanIcon plan={plan().id} />
</div>
<p data-slot="price">
- <span data-slot="amount">${plan.id}</span>{" "}
- <span data-slot="period">{i18n.t("black.price.perMonth")}</span>
- <Show when={plan.multiplier}>
+ <span data-slot="amount">${plan().id}</span>{" "}
+ <span data-slot="period">{i18n.t("black.price.perPersonBilledMonthly")}</span>
+ <Show when={plan().multiplier}>
{(multiplier) => <span data-slot="multiplier">{i18n.t(multiplier())}</span>}
</Show>
</p>
- </button>
- )}
- </For>
- </div>
- </Match>
- <Match when={selectedPlan()}>
- {(plan) => (
- <div data-slot="selected-plan">
- <div data-slot="selected-card" style={{ "view-transition-name": `card-${plan().id}` }}>
- <div data-slot="icon">
- <PlanIcon plan={plan().id} />
- </div>
- <p data-slot="price">
- <span data-slot="amount">${plan().id}</span>{" "}
- <span data-slot="period">{i18n.t("black.price.perPersonBilledMonthly")}</span>
- <Show when={plan().multiplier}>
- {(multiplier) => <span data-slot="multiplier">{i18n.t(multiplier())}</span>}
- </Show>
- </p>
- <ul data-slot="terms" style={{ "view-transition-name": `terms-${plan().id}` }}>
- <li>{i18n.t("black.terms.1")}</li>
- <li>{i18n.t("black.terms.2")}</li>
- <li>{i18n.t("black.terms.3")}</li>
- <li>{i18n.t("black.terms.4")}</li>
- <li>{i18n.t("black.terms.5")}</li>
- <li>{i18n.t("black.terms.6")}</li>
- <li>{i18n.t("black.terms.7")}</li>
- </ul>
- <div data-slot="actions" style={{ "view-transition-name": `actions-${plan().id}` }}>
- <button type="button" onClick={() => cancel()} data-slot="cancel">
- {i18n.t("common.cancel")}
- </button>
- <a href={`/black/subscribe/${plan().id}`} data-slot="continue">
- {i18n.t("black.action.continue")}
- </a>
+ <ul data-slot="terms" style={{ "view-transition-name": `terms-${plan().id}` }}>
+ <li>{i18n.t("black.terms.1")}</li>
+ <li>{i18n.t("black.terms.2")}</li>
+ <li>{i18n.t("black.terms.3")}</li>
+ <li>{i18n.t("black.terms.4")}</li>
+ <li>{i18n.t("black.terms.5")}</li>
+ <li>{i18n.t("black.terms.6")}</li>
+ <li>{i18n.t("black.terms.7")}</li>
+ </ul>
+ <div data-slot="actions" style={{ "view-transition-name": `actions-${plan().id}` }}>
+ <button type="button" onClick={() => cancel()} data-slot="cancel">
+ {i18n.t("common.cancel")}
+ </button>
+ <a href={`/black/subscribe/${plan().id}`} data-slot="continue">
+ {i18n.t("black.action.continue")}
+ </a>
+ </div>
</div>
</div>
- </div>
- )}
- </Match>
- </Switch>
- <p data-slot="fine-print" style={{ "view-transition-name": "fine-print" }}>
- {i18n.t("black.finePrint.beforeTerms")} ·{" "}
- <A href={language.route("/legal/terms-of-service")}>{i18n.t("black.finePrint.terms")}</A>
- </p>
+ )}
+ </Match>
+ </Switch>
+ </Show>
+ <Show when={!paused}>
+ <p data-slot="fine-print" style={{ "view-transition-name": "fine-print" }}>
+ {i18n.t("black.finePrint.beforeTerms")} ·{" "}
+ <A href={language.route("/legal/terms-of-service")}>{i18n.t("black.finePrint.terms")}</A>
+ </p>
+ </Show>
</section>
</>
)