From 823e195395de68ec3f959c1c4b0dd2c4368f1370 Mon Sep 17 00:00:00 2001 From: kang Date: Mon, 13 Apr 2026 18:30:28 +0800 Subject: [PATCH] docs: lock MVP plan and design decisions - Define architecture: PWA upload + FastAPI backend + Groq Whisper + Poe Claude - Skip browser recording (use phone native), skip real-time, skip calendar (v2) - Use MinIO S3 multipart direct upload with ffmpeg silencedetect chunking - Target: $1/month personal use, 4-5 day MVP Co-Authored-By: Claude Opus 4.6 (1M context) --- .memory/status.md | 83 +++++++++++++++++++++++++++++++++++++++++++++++ RULES.md | 39 ++++++++++++++++++---- 2 files changed, 115 insertions(+), 7 deletions(-) create mode 100644 .memory/status.md diff --git a/.memory/status.md b/.memory/status.md new file mode 100644 index 0000000..bda29e0 --- /dev/null +++ b/.memory/status.md @@ -0,0 +1,83 @@ +# MeetNote 项目状态 + +> 立项日期:2026-04-13 +> 个人项目 / 私有部署 / 自用优先 + +## 一句话 +手机录音 → 上传网页 → 云端转写 → AI 总结,中英混说精准。对标 Otter.ai / 通义听悟 / 飞书妙记,零订阅成本。 + +## 锁定决策(Phase 1 规划结论) + +### 架构 +- **手机端录音**:用原生录音 App(iOS 语音备忘录 / Android 录音机),不做浏览器录音 +- **PWA 角色**:上传 + 资料库 + 查看,响应式网页即可 +- **转写**:云端 Groq Whisper-large-v3(中英混说最佳) +- **总结**:Poe Claude Sonnet 4.6(已有配额) +- **VPS Claude Code**:MVP 不碰,v2 Phase C 作为智能体增强层 +- **日历集成**:MVP 不做,列表按日期分组替代;v2 再加 .ics 订阅 +- **说话人分离**:MVP 不做;v2 再加 pyannoteAI + +### 技术栈 +- 前端:Next.js 15 + React 19 + Tailwind + shadcn/ui +- 后端:FastAPI + SQLModel + RQ(内嵌 Redis) +- 上传:前端直传 MinIO,S3 multipart 断点续传(绕开后端 body 限制) +- 切片:后端 ffmpeg silencedetect,按静音点切成 <20MB/块,时间戳合并 +- 存储:PostgreSQL (复用 `/opt/postgres/` 新建 meetnote 库) + MinIO (复用 `/opt/minio/` 新建 meetnote bucket) +- 部署:Coolify 两应用 → `meetnote.kang-kang.com` + `meetnote-api.kang-kang.com` + +### 设计风格 +- **候选 1(推荐)**:11 Dark Dev SaaS(完整源码,56 UI 组件,Bento 卡片契合四格总结) +- 候选 2:01 Swiss 极简留白(亮色,无源码要从头撸) +- 最终决策待 A2 确认 + +## 端口分配 +- 前端:**4490** +- API:**4491** +- 来源:init-project 分配(2026-04-13,端口注册中心 3201 当时 503,走文件扫描回退) + +## 成本估算(个人使用,约 20h 会议/月) +| 项 | 月成本 | +|---|---| +| Groq Whisper API | ~$0.80 | +| Poe Claude 总结 | $0(已有配额)| +| VPS 增量 | $0(复用)| +| **合计** | **≈ $1/月** | + +对比 Otter Pro $16.99/月、飞书妙记 ¥30/月 → 省 95%+。 + +## MVP 任务清单(Phase A,目标 4-5 天) +1. A1 项目初始化 ✓ 进行中 +2. A2 设计系统选型(对接风格库 11) +3. A3 后端骨架(FastAPI + 三张表 + upload-url/upload-complete API) +4. A4 前端直传 MinIO(分片 + 断点续传 + 进度条) +5. A5 切片转写 + 总结 worker(ffmpeg → Groq → Poe) +6. A6 前端列表 + 详情页(按日期分组 + 音频播放器 + 四格总结) +7. A7 部署上线(Coolify) + +## v2 候选(Phase B + C,MVP 稳定后) +- Phase B:日历 .ics 订阅、全文/语义搜索(pgvector)、说话人分离、分享链接 +- Phase C:VPS Claude Code 智能体层(跨会议关联、跨会议待办聚合、自动建 Gitea issue、生成跟进邮件) + +## 关键约束 & 坑位 +- **Groq Whisper 单次上限 25MB** → 必须切片,按静音点切避免切坏句子 +- **长音频总结** → >2h 走 map-reduce(先分段总结再合成全局) +- **MinIO CORS** → 必须允许 `meetnote.kang-kang.com` 直传,否则浏览器拦截 +- **iOS m4a** → 1h ≈ 30MB,3h ≈ 90MB,6h ≈ 180MB +- **前端 @aws-sdk/client-s3** → S3 multipart 分片(5MB/片),断网续传 + +## 环境变量(后端) +``` +DATABASE_URL=postgresql://...@127.0.0.1:5432/meetnote +MINIO_ENDPOINT=127.0.0.1:9000 +MINIO_BUCKET=meetnote +MINIO_ACCESS_KEY= +MINIO_SECRET_KEY= +GROQ_API_KEY= +POE_API_KEY=(复用全局) +``` + +## 依赖(未完成) +- [ ] Groq API key 申请(https://console.groq.com) +- [ ] MinIO 创建 meetnote bucket + CORS 配置 +- [ ] PostgreSQL 创建 meetnote 库 +- [ ] GitHub 远程未配(本机 gh 未装,走 Gitea only) diff --git a/RULES.md b/RULES.md index 7942fb9..64d3ca3 100644 --- a/RULES.md +++ b/RULES.md @@ -1,18 +1,43 @@ # MeetNote 会议转写总结 +手机录音 → 上传网页 → 云端 Groq Whisper 转写 → Poe Claude 总结。中英混说精准,零订阅成本。 + ## 启动 -- `pnpm dev` — 前端,端口 4490 -- `待补充` — 后端 API,端口 4491 +- 前端(Next.js 15):`cd web && pnpm dev` → http://localhost:4490 +- 后端(FastAPI):`cd api && uv run uvicorn main:app --reload --port 4491` → http://localhost:4491 + +## 端口 +- 前端:**4490** +- API:**4491** ## 部署 -- 平台:待定 -- 域名:待定 +- 平台:Coolify +- 域名: + - 前端 `meetnote.kang-kang.com` + - API `meetnote-api.kang-kang.com` +- 复用资产: + - PostgreSQL `/opt/postgres/` 新建 `meetnote` 库 + - MinIO `/opt/minio/` 新建 `meetnote` bucket ## 环境变量 -- 待补充 +``` +DATABASE_URL=postgresql://...@127.0.0.1:5432/meetnote +MINIO_ENDPOINT=127.0.0.1:9000 +MINIO_BUCKET=meetnote +MINIO_ACCESS_KEY= +MINIO_SECRET_KEY= +GROQ_API_KEY= +POE_API_KEY= +``` ## 规则 -- 待补充 +- **长音频必须切片**:Groq Whisper 单次上限 25MB,ffmpeg `silencedetect` 按静音点切 +- **上传走直传**:前端 `@aws-sdk/client-s3` 分片直传 MinIO,不经后端 +- **设计风格**:对接 `~/Projects/research/20260305-网页风格库/` 11 Dark Dev SaaS +- **状态机**:`pending → uploading → uploaded → splitting → transcribing(x/y) → summarizing → done` ## 注意事项 -- 待补充 +- MinIO 必须配 CORS 允许 `meetnote.kang-kang.com` 直传 +- 长会议总结走 map-reduce(先分段再合成) +- MVP 不做:浏览器录音、日历集成、说话人分离、实时流式 +- 详情见 `.memory/status.md`