10 HTML pages + puro.css + HANDOFF.md + 2 images (~810KB total). Reference artifacts for Stage 3 Vue 3 translation. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7.6 KiB
PURO AI · 设计交付文档
把已有的 Claude / ChatGPT / Codex / Gemini 订阅聚合成统一 API · 让"已经付过钱的订阅"真正可编程
本文档面向接手实现这套设计的工程团队 / Coding Agent,说明每个 HTML 文件的用途、数据契约、交互逻辑,以及与后端的对接点。
0. 文件清单
| 文件 | 类型 | 说明 |
|---|---|---|
Landing.html |
营销首页 | 未登录入口 · Hero / 模型墙 / 功能 / 代码示例 / Dashboard 预览 / Pricing / FAQ |
Pricing.html |
定价页 | 完整定价 + 成本估算器 + 工具兼容墙 + 10 条 FAQ |
Docs.html |
文档 | 快速开始 / 模型列表 / API 参考 / 各客户端配置 |
Login.html |
登录 | 左侧叙事 + 右侧表单 · 支持 LinuxDO OAuth |
Register.html |
注册 | 带密码强度 · 下一步引导 · 送 $5 |
Binding.html |
订阅绑定 | 核心差异化流程 · OAuth 接入 Claude Pro / ChatGPT Plus |
Dashboard.html |
控制台首页 | 余额 / 用量图表 / 近期请求 / 订阅池状态 |
API Keys.html |
Key 管理 | 创建 / 吊销 / 预算限制 / 模型白名单 |
Design System.html |
设计系统 | 色板 / 字号 / 组件索引 |
puro.css |
全站样式 | 所有页面共用的 tokens + primitives(.btn / .pill / .tag / .input 等) |
所有页面必须首行 meta: <meta name="color-scheme" content="dark"> —— 防止浏览器 auto-darken 覆盖 cyan 按钮。
1. 设计 Tokens(见 puro.css)
--bg-0: #0a0e1a 页面底
--bg-1: #0f172a raised
--bg-2: #111827 card alt
--bg-code: #020617 代码面板
--border: #1e293b
--border-2:#334155
--border-3:#475569
--text-0: #f8fafc 主
--text-1: #cbd5e1 次
--text-2: #94a3b8 说明
--text-3: #64748b 弱
--cyan: #22d3ee 主强调(primary btn / 链接 / 数据点)
--cyan-2: #67e8f9 hover
--purple: #a855f7 次强调 / 装饰
--amber: #fbbf24 提醒 / 限时标签
--green: #34d399 成功 / 在线
--red: #f87171 错误 / 危险
字体:Inter(正文)+ JetBrains Mono(所有数值 / 代码 / 元信息)。
圆角:--r-sm 6px / --r-md 8px / --r-lg 12px / --r-xl 16px。
2. 页面 → 后端契约
2.1 Landing · 无后端依赖(纯营销)
锚点:#pricing / #faq / #features / #code / #dashboard。注册 CTA → Register.html。
2.2 Register
提交表单需要 后端返回:
POST /auth/register
{ email, password, linuxdo_token? }
→ 200 { user_id, jwt, balance_credits: 5.00 /* $5 注册赠送 */ }
前端验证规则:
- 邮箱格式
^[^\s@]+@[^\s@]+\.[^\s@]+$ - 密码强度 ≥ 2(长度 ≥ 8 + 字母大小写混合即可通过)
- 两次密码一致 + 勾选 terms
成功后跳
Binding.html。
2.3 Login
POST /auth/login
{ email, password } 或 { linuxdo_oauth_code }
→ 200 { jwt, user, has_subscriptions: boolean }
若 has_subscriptions === false,引导去 Binding.html;否则去 Dashboard.html。
2.4 Binding(核心差异化)
OAuth 流程,每个平台:
POST /bindings/oauth/start
{ provider: 'claude' | 'chatgpt' | 'codex' | 'gemini' }
→ { auth_url, state }
前端打开 auth_url 新窗口;OAuth 回调:
GET /bindings/oauth/callback?code=...&state=...
→ 302 → /binding/success?provider=claude&account_id=...
绑定列表:
GET /bindings
→ [ { id, provider, account_email, plan, status: 'healthy'|'cooling'|'error', quota_remaining_pct, bound_at } ]
DELETE /bindings/:id 解绑
POST /bindings/:id/test 发一条测试请求验证凭证有效
2.5 Dashboard
GET /me/overview
→ {
balance: { credits: 45.23, bonus_credits: 12.00, expires_at: null },
usage_today: { requests: 1842, tokens_in: 2.1e6, tokens_out: 4.8e5, cost: 1.23 },
usage_30d: [{ date, cost, requests }, ...],
recent_requests: [{ ts, model, route_to, status, latency_ms, tokens, cost }, ...],
pool_status: [{ provider, accounts: [{ status, quota_pct }] }]
}
图表用 usage_30d 绘制折线(cyan 主线,purple 副线)。
2.6 API Keys
GET /api-keys
POST /api-keys { name, models?: string[], monthly_budget?: number }
DELETE /api-keys/:id
Key 前缀 sk-puro- + 32 字符。创建后仅显示一次完整值,之后只保留前 8 位。
2.7 Pricing
纯静态展示。充值 CTA 统一走:
POST /billing/topup
{ amount_usd, payment_method: 'alipay'|'wechat'|'usdt'|'stripe' }
→ { payment_url / qr_code, order_id }
阶梯赠送在前端计算并展示(见 Pricing.html 底部 script),后端下单时再次校验:
阶梯 = amount >= 500 ? 120%
: amount >= 200 ? 110%
: amount >= 99 ? 100%
: amount >= 50 ? 70%
: amount >= 30 ? 50%
: amount >= 20 ? 35%
: 21%
3. 统一 API Gateway(产品核心)
所有用户集成的终点:
https://api.puro.im/v1/chat/completions # OpenAI 兼容
https://api.puro.im/v1/messages # Anthropic 兼容
https://api.puro.im/v1beta/models/:m:generateContent # Gemini 兼容
Header: Authorization: Bearer sk-puro-xxx
调度逻辑(文档化在 Docs.html):
- 根据模型解析目标 provider
- 从该 provider 的订阅池挑一个
status=healthy的账号(权重:剩余配额 × 响应时延倒数) - 若 429 / 限流,标记
cooling60-300s,failover 到下一个 - 若该 provider 所有订阅都 cooling 且用户余额 > 0,fallback 到官方 API
- 所有请求写入
request_logs(用户可见,保留周期按套餐)
4. 套餐与限制
| Starter $9.9 | Pro $29.9 ⭐ | Scale $99 | Custom | |
|---|---|---|---|---|
| 赠送 | +21% | +50% | +100% | 阶梯 |
| API Keys | 1 | 3 | 10 | 按 Pro |
| RPM | 60 | 120 | 300 | 按 Pro |
| 日志保留 | 7d | 30d | 90d | 按 Pro |
| 自带订阅 | ❌ | ∞ | ∞ | ✅ |
| 多账号 failover | — | ✅ | ✅ + 优先级 | ✅ |
Enterprise 走 Sales 线:私有化 / SLA / Invoice,不在普通订单流里。
5. 交互细节(容易漏)
- 余额不足:Gateway 返回
402 Payment Required,Dashboard 顶部红色 banner + 发邮件(80% / 95% 两档预警) - 订阅 cooling 时 Dashboard 订阅卡片上角 amber 闪烁点
- API Key 创建:弹窗必须强制用户复制一次,关闭弹窗后永远看不到完整值
- 密码强度:评分 0-4,label 对应
— / 弱 / 中 / 强 / 极强,颜色border / red / amber / cyan / green - 登录成功:按钮变 green 显示
✓ 登录成功,800ms 后 window.location 跳转 - LinuxDO OAuth 是 PURO 的目标用户群(开发者社区),作为次要登录按钮展示
6. 响应式断点
<= 900px:Login/Register 的 split 变单列,narrative 折叠<= 820px:Pricing grid 从 4 列 → 1 列<= 820px:Landing pricing-grid-landing 从 3 列 → 1 列<= 960px:Pricing 的 calculator 从 2 列 → 1 列
7. 后端技术建议(非设计范畴,仅供参考)
- Gateway 层:Go / Rust 写高吞吐代理,HTTP/2 + streaming,每 provider 起独立 worker pool
- 调度:Redis ZSET 存每个订阅的健康分 + cooling 过期时间
- 日志:写 ClickHouse(列存 + 按日分区),Dashboard 直接查
- 凭证加密:每个订阅凭证用 AES-256-GCM 加密,key 放 KMS;解密只在 gateway worker 内存里,绝不落日志
- 计费:Pulsar / Redis Streams 实时扣费,最终一致性,异步对账
8. 已知 TODO(设计层面暂不处理,开发阶段补)
- Dashboard 真实图表联动(目前是静态 SVG)
- Binding OAuth 回调 loading / 成功动效
- 邮件模板(注册验证 / 余额预警 / 充值成功)
- 忘记密码流程
- 团队 / 多人协作 UI(Enterprise 档需要)
- i18n:当前仅中文,英文版待出
生成时间:2026-04 · 设计稿版本:v1
联系 Sam / 产品负责人确认实现细节。