Files
popiart-server/web/lib/site-content.ts
T
wtgoku ede502a63c Show the safe OpenClaw PopiArt skill install path
The public site now points OpenClaw users at the dedicated popiartcli skill directory and raw SKILL.md copy path, so installers do not scan runtime PopiSkills as agent skills.

Constraint: The server worktree already contains unrelated billing and UI edits, so this commit is intentionally limited to the homepage content and renderer.

Rejected: Document only in popiartcli README | users may follow the website install flow instead.

Confidence: high

Scope-risk: narrow

Directive: Keep OpenClaw installation guidance pointed at popiartcli/tree/main/skill, not a repository-root skills directory.

Tested: npm run build in web

Not-tested: Live deployed website smoke test.
2026-04-29 13:02:56 +08:00

873 lines
30 KiB
TypeScript

export const locales = ["zh", "en"] as const;
export type Locale = (typeof locales)[number];
type Stat = {
label: string;
value: string;
};
type Scene = {
category: string;
name: string;
description: string;
};
type Step = {
title: string;
description: string;
};
type InstallMethod = {
badge: string;
name: string;
description: string;
command: string;
note: string;
};
type Plan = {
badge: string;
name: string;
price: string;
cadence: string;
summary: string;
features: string[];
cta: string;
highlight?: boolean;
};
type Faq = {
question: string;
answer: string;
};
type QuickStep = {
title: string;
description: string;
code: string;
};
type EnvVar = {
name: string;
required: string;
description: string;
};
type DocSkill = {
name: string;
command: string;
description: string;
};
type Benefit = {
kicker: string;
title: string;
description: string;
};
type ConsoleMetric = {
label: string;
value: string;
};
type ConsoleSkill = {
name: string;
routeKey: string;
status: string;
};
type ApiKey = {
name: string;
masked: string;
scope: string;
};
type UsageRow = {
name: string;
count: string;
cost: string;
};
export type AppDictionary = {
brand: {
name: string;
subtitle: string;
};
nav: {
home: string;
docs: string;
console: string;
pricing: string;
login: string;
};
footer: {
copy: string;
};
home: {
tag: string;
title: string;
subtitle: string;
primaryCta: string;
secondaryCta: string;
freeTrial: string;
socialProof: string;
stageLabel: string;
stageValue: string;
stageDescription: string;
heroPhrases: string[];
scenesTag: string;
scenesTitle: string;
scenesSubtitle: string;
scenes: Scene[];
flowTag: string;
flowTitle: string;
flowSubtitle: string;
flowSteps: Step[];
installTag: string;
installTitle: string;
installSubtitle: string;
installMethods: InstallMethod[];
bootstrapTitle: string;
bootstrapDescription: string;
bootstrapCommand: string;
agentSkillTitle: string;
agentSkillDescription: string;
agentSkillCommand: string;
trustTag: string;
trustTitle: string;
trustStats: Stat[];
};
pricing: {
tag: string;
title: string;
subtitle: string;
plans: Plan[];
faqTag: string;
faqTitle: string;
faqs: Faq[];
};
docs: {
tag: string;
title: string;
intro: string;
quickStartTitle: string;
quickSteps: QuickStep[];
envTitle: string;
envVars: EnvVar[];
skillsTag: string;
skillsTitle: string;
skills: DocSkill[];
};
login: {
tag: string;
title: string;
subtitle: string;
primaryProvider: string;
secondaryProvider: string;
termsPrefix: string;
termsLink: string;
and: string;
privacyLink: string;
benefits: Benefit[];
};
console: {
tag: string;
title: string;
subtitle: string;
billingCta: string;
loginCta: string;
metrics: ConsoleMetric[];
skillsTag: string;
skillsTitle: string;
officialSkills: ConsoleSkill[];
keysTag: string;
keysTitle: string;
apiKeys: ApiKey[];
usageTag: string;
usageTitle: string;
usageRows: UsageRow[];
planTag: string;
planTitle: string;
planDescription: string;
planBenefits: string[];
planCta: string;
};
};
const zh: AppDictionary = {
brand: {
name: "PopiArt",
subtitle: "官方 AI Skill 控制台",
},
nav: {
home: "首页",
docs: "文档",
console: "控制台",
pricing: "定价",
login: "登录",
},
footer: {
copy: "面向创作者与 coding agent 的官方 Skill 接入、控制台与订阅平台。",
},
home: {
tag: "OFFICIAL SKILLS",
title: "安装 popiartcli,把官方 PopiArt Skills 接进你的 Coding Agent",
subtitle:
"通过统一 CLI 发现、查看、调用官方 skills;当任务需要图像、视频与多模态模型时,再由产品层统一处理授权、路由和计费。",
primaryCta: "安装 CLI",
secondaryCta: "查看文档",
freeTrial: "支持 Homebrew、curl | sh、Windows PowerShell 与源码构建",
socialProof: "安装后可直接 bootstrap 到 Codex、OpenCode 与 OpenClaw",
stageLabel: "CLI 命令面",
stageValue: "auth / skills / run",
stageDescription: "继续用 jobs、artifacts、budget、project、models、bootstrap 完成完整工作流。",
heroPhrases: [
"auth login",
"skills list",
"run --wait",
"jobs wait",
"artifacts pull",
"budget status",
],
scenesTag: "SCENARIOS",
scenesTitle: "覆盖高频 AI 创作场景",
scenesSubtitle: "沿用目标站点的信息结构,但切换为更贴近 PopiArt 产品语义的能力列表。",
scenes: [
{
category: "IMAGE",
name: "文生图",
description: "从简短 prompt 到完整视觉概念,一键生成统一风格的图像结果。",
},
{
category: "IMAGE",
name: "图片编辑",
description: "支持局部重绘、风格替换、多参考图融合与批量出图工作流。",
},
{
category: "VIDEO",
name: "图生视频",
description: "以首帧图片为基础生成短视频,适合角色、商品和海报动效。",
},
{
category: "VIDEO",
name: "动作迁移",
description: "将参考视频动作迁移到目标人物图像,快速生产社媒动态内容。",
},
{
category: "UTILITY",
name: "抠图与超清",
description: "把日常修图能力做成稳定的 Skill,适配电商与工作台场景。",
},
{
category: "OPS",
name: "批量官方技能",
description: "把技能能力、额度、项目和账单统一到一个控制台管理。",
},
],
flowTag: "QUICK START",
flowTitle: "三步开始使用 popiartcli",
flowSubtitle: "直接沿用仓库 README 的真实安装与首次使用路径,而不是另造一套平台流程。",
flowSteps: [
{
title: "安装 popiartcli",
description: "优先使用 Homebrew、官方 install.sh 或 PowerShell 脚本,把 CLI 先装到本地环境。",
},
{
title: "执行 bootstrap 接入 agent 生态",
description: "生成 completion、默认 discovery profile,并可直接暴露给 Codex / OpenCode 使用。",
},
{
title: "登录并调用官方 skill",
description: "执行 auth login、skills list、run、jobs wait、artifacts pull,进入完整工作流。",
},
],
installTag: "INSTALL",
installTitle: "首页直接开始安装 popiartcli",
installSubtitle: "推荐先安装 CLI,再按需执行 bootstrap,让 PopiArt 在你的 agent 环境里直接可发现。",
installMethods: [
{
badge: "RECOMMENDED",
name: "Homebrew",
description: "适合 macOS / Linux,也是后续升级最稳定的方式。",
command: "brew tap wtgoku-create/popi\nbrew install wtgoku-create/popi/popiart",
note: "升级:brew upgrade wtgoku-create/popi/popiart",
},
{
badge: "CLI ONLY",
name: "curl | sh",
description: "从 GitHub Releases 安装 Go CLI 二进制,默认只安装 CLI 本体。",
command:
"curl -fsSL https://raw.githubusercontent.com/wtgoku-create/popiartcli/main/install.sh | sh -s -- --cli-only",
note: "升级:popiart update",
},
{
badge: "WINDOWS",
name: "PowerShell",
description: "Windows 环境使用官方 install.ps1,支持指定版本安装。",
command:
"irm https://raw.githubusercontent.com/wtgoku-create/popiartcli/main/install.ps1 | iex",
note: "也可以通过 VERSION 环境变量安装指定版本。",
},
],
bootstrapTitle: "安装后建议立即执行 bootstrap",
bootstrapDescription: "生成 shell completion、默认 skill discovery profile,并把 PopiArt 直接暴露给 agent。",
bootstrapCommand:
"popiart bootstrap --agent codex --completion zsh\npopiart bootstrap --agent codex --discoverable\npopiart skills list",
agentSkillTitle: "OpenClaw 手动安装 agent skill",
agentSkillDescription:
"如果通过 GitHub 目录安装,请指向 popiartcli 仓库的 skill/ 目录;不要使用仓库根目录或 blob/main/skill/SKILL.md,避免安装器扫描到 runtime PopiSkills。",
agentSkillCommand:
"https://github.com/wtgoku-create/popiartcli/tree/main/skill\n\nmkdir -p ~/.openclaw/skills/popiart-cli\ncurl -fsSL https://raw.githubusercontent.com/wtgoku-create/popiartcli/main/skill/SKILL.md \\\n -o ~/.openclaw/skills/popiart-cli/SKILL.md",
trustTag: "CLI DESIGN",
trustTitle: "围绕 agent 工作流设计,而不是零散脚本拼装",
trustStats: [
{ label: "默认 JSON 输出", value: "ok / data" },
{ label: "长任务轮询", value: "jobs wait" },
{ label: "工件恢复下载", value: "artifacts pull" },
{ label: "生态引导", value: "bootstrap" },
],
},
pricing: {
tag: "PRICING",
title: "简单透明的订阅与充值",
subtitle: "既能买月度订阅,也能按项目补充 Credits,适合个人与团队一起用。",
plans: [
{
badge: "推荐方案",
name: "Pro Subscription",
price: "¥69.99",
cadence: "/月",
summary: "适合个人创作者和轻量团队,优先拿到官方技能、控制台与基础配额。",
features: [
"每月 12,000 Credits",
"官方技能全量可见",
"项目级用量统计",
"标准 API key 与 CLI 接入",
],
cta: "订阅 Pro",
highlight: true,
},
{
badge: "灵活补充",
name: "Credit Top-up",
price: "¥199",
cadence: "/包",
summary: "在已有订阅上追加额度,适合视频类高消耗任务或团队集中出图周。",
features: [
"追加 50,000 Credits",
"购买后立即生效",
"支持与订阅叠加",
"统一记录到账单中心",
],
cta: "立即充值",
},
],
faqTag: "FAQ",
faqTitle: "常见问题",
faqs: [
{
question: "订阅和充值包可以同时购买吗?",
answer: "可以。订阅提供基础月额度,充值包作为叠加额度优先消耗。",
},
{
question: "控制台会显示技能级用量吗?",
answer: "会。按 skill、项目、时间维度展示调用次数、Credits 和费用归因。",
},
{
question: "后续能接企业方案吗?",
answer: "可以。企业版通常会补充团队成员、预算控制、发票和专属支持能力。",
},
],
},
docs: {
tag: "DOCUMENTATION",
title: "PopiArt 开发者文档",
intro:
"首页与文档都直接围绕 popiartcli README 的真实安装链路、bootstrap 和命令面来组织。",
quickStartTitle: "快速开始",
quickSteps: [
{
title: "1. 安装 popiartcli",
description: "优先使用 Homebrew,或者用官方 install.sh / install.ps1 安装 CLI。",
code: "brew tap wtgoku-create/popi\nbrew install wtgoku-create/popi/popiart",
},
{
title: "2. 执行 bootstrap",
description: "把 PopiArt 直接接进 Codex / OpenCode,并生成 completion 与默认发现配置。",
code: "popiart bootstrap --agent codex --discoverable",
},
{
title: "3. 登录并调用官方 skill",
description: "完成 auth login 后,先列技能,再执行 run / jobs wait / artifacts pull。",
code:
"popiart auth login --key <your-product-token>\npopiart skills list\npopiart run popiskill-image-text2image-basic-v1 --input @params.json --wait",
},
],
envTitle: "环境变量",
envVars: [
{
name: "POPIART_ENDPOINT",
required: "必填",
description: "产品层 API 地址,CLI 与控制台共用。",
},
{
name: "POPIART_API_KEY",
required: "必填",
description: "登录后签发的产品层 token,而不是上游 provider key。",
},
{
name: "POPIART_OUTPUT_DIR",
required: "选填",
description: "默认输出目录,未设置时可沿用当前工作目录。",
},
{
name: "POPIART_PROJECT_ID",
required: "选填",
description: "项目级路由、预算和用量归因的作用域。",
},
],
skillsTag: "OFFICIAL SKILLS",
skillsTitle: "技能能力一览",
skills: [
{
name: "文生图",
command: "popiart run --skill popiskill-image-text2image-basic-v1",
description: "从 prompt 直接生成图片,适合快速概念验证与海报起稿。",
},
{
name: "图像编辑",
command: "popiart run --skill popiskill-image-img2img-basic-v1",
description: "对已有图片进行编辑、风格迁移和参考图约束生成。",
},
{
name: "图生视频",
command: "popiart run --skill popiskill-video-image2video-basic-v1",
description: "把静态图转成动态短视频,并保留任务追踪与 artifact 引用。",
},
{
name: "模型直连",
command: "popiart models infer --model gemini-3.1-flash-image-preview",
description: "跳过技能层,直接以模型为入口发任务,适合调试模型能力。",
},
],
},
login: {
tag: "SIGN IN",
title: "登录以访问 PopiArt 官方控制台",
subtitle: "登录后即可查看官方技能目录、项目级用量、API key 与订阅状态。",
primaryProvider: "使用 PopiArt 账号登录",
secondaryProvider: "使用 GitHub 登录",
termsPrefix: "点击登录即表示同意",
termsLink: "服务条款",
and: "和",
privacyLink: "隐私政策",
benefits: [
{
kicker: "CONSOLE",
title: "统一查看技能与项目",
description: "所有官方技能、项目路由和调用记录都收敛到一个控制台。",
},
{
kicker: "BILLING",
title: "订阅与充值同页管理",
description: "避免在 CLI、支付页和后台系统之间来回切换。",
},
{
kicker: "ACCESS",
title: "产品层账号替代裸密钥分发",
description: "让团队协作建立在 session、权限和计费规则之上。",
},
],
},
console: {
tag: "CONSOLE",
title: "官方技能与用量控制台",
subtitle: "第一版先用静态数据还原页面信息架构,下一步再接回真实 auth、skills、budget 和 billing API。",
billingCta: "查看定价",
loginCta: "登录账号",
metrics: [
{ label: "剩余 Credits", value: "8,420" },
{ label: "本月调用次数", value: "1,284" },
{ label: "活跃项目", value: "6" },
{ label: "账单周期支出", value: "¥412.60" },
],
skillsTag: "SKILLS",
skillsTitle: "官方技能目录",
officialSkills: [
{ name: "Basic Text2Image", routeKey: "image.text2image", status: "Live" },
{ name: "Basic Img2Img", routeKey: "image.img2img", status: "Beta" },
{ name: "Basic Image2Video", routeKey: "video.image2video", status: "Live" },
{ name: "Poster Generator", routeKey: "image.poster", status: "Planned" },
],
keysTag: "API KEYS",
keysTitle: "当前可用密钥",
apiKeys: [
{ name: "Primary App Key", masked: "pk_live_****9f2d", scope: "skills:read jobs:write" },
{ name: "Automation Key", masked: "pk_live_****1a70", scope: "jobs:write artifacts:read" },
],
usageTag: "USAGE",
usageTitle: "近期技能用量",
usageRows: [
{ name: "文生图", count: "682 calls", cost: "¥118.20" },
{ name: "图像编辑", count: "391 calls", cost: "¥94.60" },
{ name: "图生视频", count: "77 jobs", cost: "¥199.80" },
],
planTag: "BILLING",
planTitle: "当前订阅",
planDescription: "Pro Subscription 已激活,额度不足时可追加 Credits Top-up。",
planBenefits: [
"月度基础额度 12,000 Credits",
"充值包与订阅额度可叠加",
"账单、发票和续费记录集中管理",
],
planCta: "管理订阅与充值",
},
};
const en: AppDictionary = {
brand: {
name: "PopiArt",
subtitle: "Official AI Skill Console",
},
nav: {
home: "Home",
docs: "Docs",
console: "Console",
pricing: "Pricing",
login: "Login",
},
footer: {
copy: "The official skill catalog, console, and billing surface for creators and coding agents.",
},
home: {
tag: "OFFICIAL SKILLS",
title: "Install popiartcli and bring official PopiArt skills into your coding agent",
subtitle:
"Use one CLI to discover, inspect, and run official skills, while product-layer auth, routing, and billing stay behind the PopiArt backend.",
primaryCta: "Install CLI",
secondaryCta: "Read docs",
freeTrial: "Supports Homebrew, curl | sh, Windows PowerShell, and source builds",
socialProof: "Bootstrap directly into Codex, OpenCode, and OpenClaw after install",
stageLabel: "CLI surface",
stageValue: "auth / skills / run",
stageDescription: "Then move into jobs, artifacts, budget, project, models, and bootstrap for the full workflow.",
heroPhrases: [
"auth login",
"skills list",
"run --wait",
"jobs wait",
"artifacts pull",
"budget status",
],
scenesTag: "SCENARIOS",
scenesTitle: "Designed around high-frequency AI production flows",
scenesSubtitle:
"The structure mirrors the reference site, but the content is adapted to PopiArt's product model.",
scenes: [
{
category: "IMAGE",
name: "Text to image",
description: "Generate polished concept visuals from prompts with room for brand and style control.",
},
{
category: "IMAGE",
name: "Image editing",
description: "Run inpainting, style transfer, multi-reference edits, and iterative revision workflows.",
},
{
category: "VIDEO",
name: "Image to video",
description: "Turn key visuals into short motion clips for creator campaigns and demos.",
},
{
category: "VIDEO",
name: "Motion transfer",
description: "Apply motion from a reference clip to a target portrait or character frame.",
},
{
category: "UTILITY",
name: "Cutout and upscale",
description: "Ship dependable utility skills for ecommerce, editorial, and content pipelines.",
},
{
category: "OPS",
name: "Official skill operations",
description: "Bring skills, quotas, projects, and billing together in one product surface.",
},
],
flowTag: "QUICK START",
flowTitle: "Three steps to start with popiartcli",
flowSubtitle:
"This mirrors the real install and first-run path from the popiartcli README instead of inventing a separate web-only flow.",
flowSteps: [
{
title: "Install popiartcli",
description: "Use Homebrew, the official install.sh, or PowerShell to get the CLI onto your local machine.",
},
{
title: "Run bootstrap for your agent environment",
description: "Generate completion, default discovery profiles, and make PopiArt directly discoverable to Codex or OpenCode.",
},
{
title: "Sign in and run official skills",
description: "Use auth login, skills list, run, jobs wait, and artifacts pull to complete the first real workflow.",
},
],
installTag: "INSTALL",
installTitle: "Install popiartcli directly from the homepage",
installSubtitle: "Install the CLI first, then optionally run bootstrap so PopiArt becomes discoverable inside your agent environment.",
installMethods: [
{
badge: "RECOMMENDED",
name: "Homebrew",
description: "Best for macOS and Linux, and the cleanest upgrade path later.",
command: "brew tap wtgoku-create/popi\nbrew install wtgoku-create/popi/popiart",
note: "Upgrade with: brew upgrade wtgoku-create/popi/popiart",
},
{
badge: "CLI ONLY",
name: "curl | sh",
description: "Download the released Go CLI binary directly from GitHub Releases.",
command:
"curl -fsSL https://raw.githubusercontent.com/wtgoku-create/popiartcli/main/install.sh | sh -s -- --cli-only",
note: "Upgrade with: popiart update",
},
{
badge: "WINDOWS",
name: "PowerShell",
description: "Use the official install.ps1 flow on Windows, with optional version pinning.",
command:
"irm https://raw.githubusercontent.com/wtgoku-create/popiartcli/main/install.ps1 | iex",
note: "You can also pin a VERSION before running the installer.",
},
],
bootstrapTitle: "Run bootstrap right after installation",
bootstrapDescription: "Generate shell completion, a default discovery profile, and make PopiArt directly available to your coding agent.",
bootstrapCommand:
"popiart bootstrap --agent codex --completion zsh\npopiart bootstrap --agent codex --discoverable\npopiart skills list",
agentSkillTitle: "Manual OpenClaw agent skill install",
agentSkillDescription:
"If installing from GitHub, point installers at the popiartcli skill/ directory. Do not use the repository root or blob/main/skill/SKILL.md, because some installers scan runtime PopiSkills as agent skills.",
agentSkillCommand:
"https://github.com/wtgoku-create/popiartcli/tree/main/skill\n\nmkdir -p ~/.openclaw/skills/popiart-cli\ncurl -fsSL https://raw.githubusercontent.com/wtgoku-create/popiartcli/main/skill/SKILL.md \\\n -o ~/.openclaw/skills/popiart-cli/SKILL.md",
trustTag: "CLI DESIGN",
trustTitle: "Designed around agent workflows instead of scattered scripts",
trustStats: [
{ label: "JSON-first output", value: "ok / data" },
{ label: "Long-task polling", value: "jobs wait" },
{ label: "Artifact recovery", value: "artifacts pull" },
{ label: "Agent bootstrap", value: "bootstrap" },
],
},
pricing: {
tag: "PRICING",
title: "Simple subscriptions and credit top-ups",
subtitle: "Use a monthly plan for the baseline and top up when video or batch workflows spike.",
plans: [
{
badge: "Recommended",
name: "Pro Subscription",
price: "$9.99",
cadence: "/month",
summary: "For solo creators and small teams that need the official skill catalog and a predictable base quota.",
features: [
"12,000 monthly credits",
"Full official skill directory",
"Per-project usage analytics",
"Standard API key and CLI access",
],
cta: "Subscribe to Pro",
highlight: true,
},
{
badge: "Flexible",
name: "Credit Top-up",
price: "$28",
cadence: "/pack",
summary: "Add extra capacity during launch weeks, video-heavy runs, or large team sprints.",
features: [
"50,000 extra credits",
"Instant activation after purchase",
"Stacks on top of subscriptions",
"Tracked in the same billing center",
],
cta: "Top up credits",
},
],
faqTag: "FAQ",
faqTitle: "Common questions",
faqs: [
{
question: "Can subscriptions and top-ups be combined?",
answer: "Yes. The subscription provides the base monthly quota and top-ups add extra spendable credits.",
},
{
question: "Will the console show per-skill usage?",
answer: "Yes. The intended product surface tracks calls, credits, and cost attribution by skill and project.",
},
{
question: "Can this grow into an enterprise plan later?",
answer: "Yes. Team seats, budgets, invoicing, and enterprise controls can sit on top of the same billing layer.",
},
],
},
docs: {
tag: "DOCUMENTATION",
title: "PopiArt developer docs",
intro:
"The homepage and docs now follow the real install chain, bootstrap flow, and command surface from popiartcli.",
quickStartTitle: "Quick start",
quickSteps: [
{
title: "1. Install popiartcli",
description: "Use Homebrew first when possible, or fall back to install.sh / install.ps1.",
code: "brew tap wtgoku-create/popi\nbrew install wtgoku-create/popi/popiart",
},
{
title: "2. Bootstrap your agent environment",
description: "Generate completion, default discovery profiles, and make PopiArt directly discoverable.",
code: "popiart bootstrap --agent codex --discoverable",
},
{
title: "3. Sign in and run official skills",
description: "Authenticate, inspect the catalog, and run the first skill through the real job workflow.",
code:
"popiart auth login --key <your-product-token>\npopiart skills list\npopiart run popiskill-image-text2image-basic-v1 --input @params.json --wait",
},
],
envTitle: "Environment variables",
envVars: [
{
name: "POPIART_ENDPOINT",
required: "Required",
description: "The product-layer API base shared by the CLI and the console.",
},
{
name: "POPIART_API_KEY",
required: "Required",
description: "A product-layer token issued after login, not a raw provider key.",
},
{
name: "POPIART_OUTPUT_DIR",
required: "Optional",
description: "Default output directory for generated artifacts.",
},
{
name: "POPIART_PROJECT_ID",
required: "Optional",
description: "Project scope for routing, budgets, and usage attribution.",
},
],
skillsTag: "OFFICIAL SKILLS",
skillsTitle: "Skill catalog",
skills: [
{
name: "Text to image",
command: "popiart run --skill popiskill-image-text2image-basic-v1",
description: "Generate polished visuals directly from text prompts.",
},
{
name: "Image editing",
command: "popiart run --skill popiskill-image-img2img-basic-v1",
description: "Edit existing visuals with references, masks, and style constraints.",
},
{
name: "Image to video",
command: "popiart run --skill popiskill-video-image2video-basic-v1",
description: "Turn a still image into a short motion clip with tracked artifacts.",
},
{
name: "Model inference",
command: "popiart models infer --model gemini-3.1-flash-image-preview",
description: "Bypass the skill layer for direct model testing.",
},
],
},
login: {
tag: "SIGN IN",
title: "Sign in to access the PopiArt official console",
subtitle: "View official skills, project usage, API keys, and subscriptions after login.",
primaryProvider: "Continue with PopiArt account",
secondaryProvider: "Continue with GitHub",
termsPrefix: "By continuing you agree to the",
termsLink: "Terms of Service",
and: "and",
privacyLink: "Privacy Policy",
benefits: [
{
kicker: "CONSOLE",
title: "One place for skills and projects",
description: "See the official catalog, routing state, and job visibility from a single product surface.",
},
{
kicker: "BILLING",
title: "Subscriptions and top-ups together",
description: "Avoid splitting billing, product, and CLI workflows across separate systems.",
},
{
kicker: "ACCESS",
title: "Accounts over raw secrets",
description: "Build collaboration on sessions, permissions, and billing rules instead of shared provider keys.",
},
],
},
console: {
tag: "CONSOLE",
title: "Official skills and usage console",
subtitle:
"This first pass uses seeded data to recreate the target dashboard structure before wiring it to real auth, skill, usage, and billing APIs.",
billingCta: "View pricing",
loginCta: "Sign in",
metrics: [
{ label: "Credits left", value: "8,420" },
{ label: "Monthly calls", value: "1,284" },
{ label: "Active projects", value: "6" },
{ label: "Billing cycle spend", value: "$56.20" },
],
skillsTag: "SKILLS",
skillsTitle: "Official catalog",
officialSkills: [
{ name: "Basic Text2Image", routeKey: "image.text2image", status: "Live" },
{ name: "Basic Img2Img", routeKey: "image.img2img", status: "Beta" },
{ name: "Basic Image2Video", routeKey: "video.image2video", status: "Live" },
{ name: "Poster Generator", routeKey: "image.poster", status: "Planned" },
],
keysTag: "API KEYS",
keysTitle: "Available keys",
apiKeys: [
{ name: "Primary App Key", masked: "pk_live_****9f2d", scope: "skills:read jobs:write" },
{ name: "Automation Key", masked: "pk_live_****1a70", scope: "jobs:write artifacts:read" },
],
usageTag: "USAGE",
usageTitle: "Recent skill usage",
usageRows: [
{ name: "Text to image", count: "682 calls", cost: "$16.10" },
{ name: "Image editing", count: "391 calls", cost: "$12.90" },
{ name: "Image to video", count: "77 jobs", cost: "$27.20" },
],
planTag: "BILLING",
planTitle: "Current plan",
planDescription: "Pro Subscription is active, with top-ups available whenever the team needs extra credits.",
planBenefits: [
"12,000 base monthly credits",
"Top-up packs stack with subscriptions",
"Invoices, renewals, and spend live in one place",
],
planCta: "Manage billing",
},
};
const dictionaries: Record<Locale, AppDictionary> = {
zh,
en,
};
export function isLocale(value: string): value is Locale {
return locales.includes(value as Locale);
}
export function getDictionary(locale: Locale): AppDictionary {
return dictionaries[locale] ?? dictionaries.zh;
}