feat: MVP 跑通 — prompt → 批量生成 → 九宫格快筛 → 选中落盘
- Next.js 15 + React 19 + Tailwind 骨架,端口 4560 - /api/generate:mock 模式(SVG 占位)+ Poe nano-banana-pro 真接口预留 - 九宫格 + 数字键 1-9 选中 / Shift+1-9 打叉,选中自动复制到 data/selected/ - 侧栏会话历史(来自 data/sessions/*.json) - 修 race condition:select state 改 functional setState - 修 svg+xml MIME 正则 - RULES.md 写清启动 / 环境变量 / 工作流 待办:申请新 Poe Key 后接入真生图(POE_API_KEY 环境变量) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,12 @@
|
|||||||
"status": "active",
|
"status": "active",
|
||||||
"kind": "tool",
|
"kind": "tool",
|
||||||
"created": "2026-05-18",
|
"created": "2026-05-18",
|
||||||
"urls": [],
|
"urls": [
|
||||||
|
{ "type": "app", "url": "http://localhost:4560", "label": "本地 dev" }
|
||||||
|
],
|
||||||
|
"credentials": [
|
||||||
|
{ "name": "POE_API_KEY", "env": "POE_API_KEY", "note": "调 nano-banana-pro 生图,没填则 mock" }
|
||||||
|
],
|
||||||
"ports": [
|
"ports": [
|
||||||
{
|
{
|
||||||
"port": 4560,
|
"port": 4560,
|
||||||
|
|||||||
53
RULES.md
53
RULES.md
@@ -1,39 +1,48 @@
|
|||||||
# AI玩具专利生成工作流
|
# AI玩具专利生成工作流
|
||||||
|
|
||||||
## 启动
|
## 启动
|
||||||
- `待补充` — 端口 4560
|
- `cd ~/Projects/code/20260518-ai-toy-patent-workflow && npm run dev` — 端口 4560
|
||||||
|
- 浏览器打开 http://localhost:4560
|
||||||
|
- 首次依赖装好:`npm install --legacy-peer-deps`(next 15 + react 19 有 peer 警告)
|
||||||
|
|
||||||
## 部署事实
|
## 部署事实
|
||||||
- 平台:待定
|
- 平台:本地开发(未上 VPS)
|
||||||
- 发布状态:未部署
|
- 发布状态:本地可用,仅个人使用
|
||||||
- 主站 / 前端:待定
|
- 主站 / 前端:http://localhost:4560
|
||||||
- API / 后端:待定
|
- API / 后端:内置 Next.js API Route(同端口)
|
||||||
- 文档 / 解析:待定
|
- 文档 / 解析:无
|
||||||
- 管理后台:待定
|
- 管理后台:无
|
||||||
|
|
||||||
## 快捷登录
|
## 快捷登录
|
||||||
- 登录地址:待补充
|
- 无登录系统(本地工具)
|
||||||
- 用户名:待补充
|
|
||||||
- 密码:待补充
|
|
||||||
- 说明:这里只写项目专属网页登录;数据库密码、API Key、服务器 root 密码不要写这里
|
|
||||||
|
|
||||||
## 元数据回写清单
|
## 元数据回写清单
|
||||||
- 新增或变更公网地址后,必须同步更新 `.project.json.urls`
|
- 上 VPS / 加域名时,更新 `.project.json.urls` + 本节
|
||||||
- 仓库内存在 App 源码或构建入口时,必须能在看板显示 `App` 标记;自动检测不准时,手动写 `.project.json.app_artifacts`
|
- 数据持久化在 `data/`(gitignored),不入库
|
||||||
- 如果有网页后台登录:
|
|
||||||
- 可直接入库:写 `.project.json.quick_login`
|
|
||||||
- 不应入库:写 `.project.json.credentials` 引用
|
|
||||||
- 部署完成后,`RULES.md` 和 `.project.json` 必须同一次任务一起更新
|
|
||||||
|
|
||||||
## 环境变量
|
## 环境变量
|
||||||
- 待补充
|
- `POE_API_KEY` — Poe API Key,调 `nano-banana-pro` 生图;不填则回退 mock(SVG 占位图)
|
||||||
|
- 配置位置:`.env.local`(gitignored),参考 `.env.local.example`
|
||||||
|
- credentials.md 里旧 Poe Key 已"离职清除",**需要重新申请**或临时跑 mock
|
||||||
|
|
||||||
## 规则
|
## 规则
|
||||||
- 全项目规则真源:`/Users/kangwan/Projects/code/20260317-rules-dashboard/RULES.md`
|
- 全项目规则真源:`/Users/kangwan/Projects/code/20260317-rules-dashboard/RULES.md`
|
||||||
- 版本发布规则:`/Users/kangwan/Projects/code/20260317-rules-dashboard/rules/04-版本发布规则.md`
|
- 生图模型固定 `nano-banana-pro`(feedback_image-gen-model)
|
||||||
- 不允许编造不存在的部署域名、账号、密码
|
- 不允许编造不存在的部署域名、账号、密码
|
||||||
- 没有公网地址时,`.project.json.urls` 保持空数组
|
|
||||||
- 任何部署或域名变化,都要先改元数据,再视为任务完成
|
|
||||||
|
|
||||||
## 注意事项
|
## 注意事项
|
||||||
- 待补充
|
- `data/` 目录会存原图(generated/selected/refs),可能体积大,已 gitignored
|
||||||
|
- `refs/` 下放参考资料 PDF/DOCX/图(已 gitignored,但 `refs/README` 之类可放进库)
|
||||||
|
- mock 模式仅用于跑通流程,生图质量为零(只是 SVG 笑脸占位)
|
||||||
|
|
||||||
|
## 工作流(MVP Step1+2)
|
||||||
|
1. 输入 prompt + 可选参考图(最多 4 张)+ 风格 + 数量(4/8/12)
|
||||||
|
2. 点 🪄 批量生成 / `⌘/Ctrl+Enter`
|
||||||
|
3. 九宫格快筛:数字键 `1-9` 选中,`Shift+1-9` 打叉
|
||||||
|
4. 选中的图自动复制到 `data/selected/`
|
||||||
|
5. 侧栏保留历史会话,点击切换
|
||||||
|
|
||||||
|
## 后续路线
|
||||||
|
- Step3:多视图扩展(正/侧/背/45°/俯视)—— 待 Poe Key 接入后做
|
||||||
|
- Step4:尺寸标注 / 三视图蓝图样式 —— 同上
|
||||||
|
- 导出专利包:PNG高清 + PDF合订
|
||||||
|
|||||||
@@ -52,10 +52,10 @@ export default function Home() {
|
|||||||
});
|
});
|
||||||
if (!r.ok) return;
|
if (!r.ok) return;
|
||||||
const d: { image: GenImage } = await r.json();
|
const d: { image: GenImage } = await r.json();
|
||||||
setCurrent({
|
setCurrent(prev => prev ? {
|
||||||
...current,
|
...prev,
|
||||||
images: current.images.map(i => i.id === imageId ? d.image : i),
|
images: prev.images.map(i => i.id === imageId ? d.image : i),
|
||||||
});
|
} : prev);
|
||||||
refreshSessions();
|
refreshSessions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user