# bluerouter **Repository Path**: gitoschinaWt/bluerouter ## Basic Information - **Project Name**: bluerouter - **Description**: bluerouter - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-14 - **Last Updated**: 2026-05-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BlueRouter Pro-grade AI gateway · 暗色科技蓝主题。一个 API 接入 50+ 模型,故障自动 fallback,团队级监控与预算管控。 ## Stack - **Next.js 16** (App Router, Turbopack 默认, **Proxy** 替代 middleware) - **React 19** · **TypeScript 5** - **Tailwind v4**(CSS-first `@theme` token) - **next/font**:Space Grotesk · Inter · JetBrains Mono - **Drizzle ORM** + **MySQL**(生产部署在腾讯云/宝塔 MySQL) - **jose** JWT session cookie - `lucide-react` · `clsx` · `tailwind-merge` · `cva` ## 快速开始(本地) ```bash # 1. 准备 MySQL 数据库,复制连接串,类似 mysql://user:password@host:3306/bluerouter cp .env.example .env.local # 2. 编辑 .env.local:填 DATABASE_URL(MySQL URL)+ AUTH_SECRET + # UPSTREAM_API_KEY(从 https://www.ohmygpt.com/ 获取) npm install npm run db:push # 把 schema 推到 MySQL npm run dev # http://localhost:3000 ``` ### 端到端走通流程 1. 打开 2. 填邮箱和密码 → 创建账户,注册即送 $1 试用额度 3. `/keys` → 创建一个 API Key,复制完整 `sk-...` 4. 在终端执行: ```bash curl http://localhost:3000/v1/chat/completions \ -H "Authorization: Bearer sk-YOUR-FULL-KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "glm-4.7", "messages": [{"role":"user","content":"hello"}] }' ``` 如果 `.env.local` 配了真实的 `UPSTREAM_API_KEY`(OhMyGPT API key),会返回 OhMyGPT 路由后的真实响应;同时 `request_logs` 会记一条(优先使用返回账单加 20%,否则用本地估算加 20%),`/dashboard` 的统计、`/keys` 的 spent / requests 都会更新。 ## 架构定位 — OhMyGPT 二级中转 BlueRouter 是 **OhMyGPT 之上的本地化封装层**,不自己维护号池/不直连 provider: ``` [ User SDK ] → [ BlueRouter ] → [ OhMyGPT ] → [ OpenAI / Anthropic / ... ] sk-… audit upstream key 订阅+用量 审计+告警 200+ models ``` 我们做什么: - ✅ 中文/本地化的注册、计费、支付(支付宝、USDT 在路上) - ✅ API Key 管理、用量分析、请求日志和充值后台 - ✅ 请求账单按返回的最终 `usage.cost` 加 20% 记账;没有 cost 时使用本地估算加 20% - ✅ 充值订单用 Admin 后台配置的人民币/美元额度比例生成应付金额 我们不做: - ❌ 自己买 OpenAI 号池、维护多家 provider 的可用性 — OhMyGPT 已经做了 - ❌ 自己维护复杂价格表 — 优先使用请求返回的 cost 加 20%,没有则本地估算 ## 环境变量 | 变量 | 说明 | 默认 | |---|---|---| | `DATABASE_URL` | MySQL 连接串 | — | | `AUTH_SECRET` | JWT 签名密钥(生产必须) | dev 默认值(请改) | | `UPSTREAM_API_KEY` | 上游 key(**OhMyGPT API key**) | — | | `UPSTREAM_BASE_URL` | 上游 base URL | `https://api.ohmygpt.com/v1` | | `UPSTREAM_APP_NAME` | 上游 `X-Title` 头 | `BlueRouter` | | `UPSTREAM_APP_URL` | 上游 `HTTP-Referer` 头 | `https://bluerouter.dev` | ## 路由总览 | 类型 | 路径 | 说明 | |---|---|---| | 营销 | `/` `/models` `/docs` `/design-system` | 静态预渲染 | | 营销 | `/changelog` `/status` `/blog/*` | 待开发 | | 鉴权 | `/login` `/signup` | 邮箱 + 密码 | | **控制台** | `/dashboard` | 用户余额 / QPS / sparkline / cost ring(真实数据 + 占位) | | **控制台** | `/keys` | API Key 列表 + 创建表单 + revoke(真实 db) | | **API** | `POST /v1/chat/completions` | **OpenAI 兼容代理 · 鉴权 / 转发 / 记账** | | Proxy | (Next 16 proxy.ts) | 未登录访问 console 路由 → 重定向 `/login?error=auth_required&next=...` | ## 项目结构 ``` src/ ├── app/ │ ├── globals.css 完整设计系统 + 动效 │ ├── layout.tsx 字体注入 + metadata │ ├── page.tsx 营销首页 │ ├── design-system/ docs/ login/ models/ pricing/ signup/ verify/ │ ├── (console)/ ← route group,独立 layout │ │ ├── layout.tsx Sidebar + requireUser() │ │ ├── dashboard/ keys/ playground/ router/ │ ├── v1/chat/completions/route.ts OpenAI 兼容代理 │ └── actions/ │ ├── auth.ts sendOtp / verifyOtp / logout │ └── keys.ts createKey / revokeKey / dismiss ├── components/ │ ├── brand/logo.tsx BlueRouter 菱形 Logo │ ├── layout/{site-header,site-footer}.tsx │ ├── console/{sidebar,topbar}.tsx │ ├── auth/auth-shell.tsx │ └── ui/copy-button.tsx ├── db/ │ ├── schema.ts users / api_keys / request_logs / otps │ └── client.ts drizzle + mysql2 ├── lib/ │ ├── auth.ts session JWT · key generation │ ├── session.ts getCurrentUser / requireUser │ ├── stats.ts dashboard aggregates │ ├── pricing.ts per-model rate book │ └── utils.ts cn() └── proxy.ts auth proxy (Next 16 conv.) ``` ## 开发脚本 ```bash npm run dev # turbopack dev npm run build # production build npm run lint # eslint npm run db:push # drizzle-kit push (apply schema) npm run db:studio # drizzle-kit studio (web UI) npm run db:generate # 生成 SQL migration 文件 ``` ## 部署到 Vercel + Neon 完整流程(5 分钟): 1. **创建 Neon 数据库** - 去 https://neon.tech 注册,新建 project(建议 region 离你近) - Dashboard → Connection details → 复制 **"Pooled connection"** URL 2. **代码推到 GitHub** - 你的本地仓库已经初始化好了。在 GitHub 新建一个空 repo,然后: ```bash git remote add origin git@github.com:YOUR_USERNAME/bluerouter.git git push -u origin main ``` 3. **导入到 Vercel** - 去 https://vercel.com/new,选 Import Git Repository - Framework Preset 自动识别 Next.js,点 Deploy 4. **设置环境变量**(Project Settings → Environment Variables) ``` DATABASE_URL Neon "Pooled connection" URL AUTH_SECRET openssl rand -base64 48 UPSTREAM_API_KEY OhMyGPT API key UPSTREAM_BASE_URL https://api.ohmygpt.com/v1 UPSTREAM_APP_NAME BlueRouter UPSTREAM_APP_URL https://your-domain.com ``` 5. **Push schema 到 Neon**(一次) ```bash # 把 .env.local 里 DATABASE_URL 改成 Neon prod URL(临时) npm run db:push ``` 6. **Redeploy** 触发一次新构建(Vercel → Deployments → … → Redeploy) 7. **绑定域名**(可选):Vercel → Settings → Domains → Add 完事。 > 提示:Neon 支持「数据库分支」。建议给开发环境单独建一条 dev 分支, > 这样你本地用 dev 分支,prod 用 main 分支,互不污染。 ## 路线图 - [x] **P1** 项目骨架 + 设计系统 + 营销首页 - [x] **P2** 营销站 + 控制台 4 页 (mock) - [x] **P3** 真实后端:DB + Auth + Keys CRUD + Proxy + Dashboard 数据 - [x] **P4** 用量分析 + 请求日志 + 充值 UI - [x] **P5** OhMyGPT 二级中转 + 请求账单加 20% 计费 - [x] **P6** Postgres 切换 (Neon) + Vercel 部署就绪 - [x] **P7** 线下充值闭环:客服微信转账 + 兑换码 + BYOK + Admin 后台 - [ ] **P8** Stripe / 支付宝 / USDT 自动支付集成 - [ ] **P9** 团队工作区 + SSO + 智能路由真实生效 + 状态页 - [ ] **P10** Enterprise(私有部署 / SLA 合同) ## 怎么把自己变成 admin 第一次注册的用户都是普通 user。把自己设为 admin 的最简方式: ```bash # 在 Neon SQL Editor 里跑: update users set role = 'admin' where email = 'your-email@example.com'; ``` 刷新 `/dashboard`,左侧 sidebar 底部会出现 "Admin · 充值订单 / 用户 / 兑换码" 三个入口。从此可以手动确认充值订单、给用户加余额、生成兑换码。 ## 关于商业模式 — 你需要 OhMyGPT 的 key BlueRouter 的本质是 **OhMyGPT 之上的本地化中转**。你(运营者)需要: 1. 去 https://www.ohmygpt.com/ 注册并充值 2. 把 OhMyGPT API key 填到 `.env.local` 的 `UPSTREAM_API_KEY` 3. 终端用户调用 → 你扣自己的 OhMyGPT 余额 → 用户付人民币给你 → 你赚请求 20% 加价和充值比例差价 利润 = `(用户请求账单$ - OhMyGPT 扣款$) × 你的人民币/美元额度比例` 可调杠杆: - Admin `/admin/billing` 的充值比例 — 默认 1 USD 额度收 ¥7.00,可按运营策略调整 - 请求账单加价 — 当前为返回账单或估算账单的 20% 如果不想自己进货,让用户走 BYOK 模式(在 /billing 自带 OhMyGPT key), 你只赚 SaaS 订阅费,不接触 token 费用。 ## 不撞 freemodel.dev | | freemodel | BlueRouter | |---|---|---| | 配色 | 白底 + ChatGPT 绿 `#19c37d` | **深蓝黑 `#07091a` + 科技蓝 `#2e7dff`** | | 字体 | Geist + Newsreader | **Space Grotesk + Inter + JetBrains Mono** | | 气质 | 极简博客 | **Bloomberg 终端 / 数据中心** | | 重点 | 注册送额度、Codex 原版 | **智能路由 · 实时监控 · SLA · 团队** | | 用户 | 个人开发者 | **团队 + 重度** |