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) <noreply@anthropic.com>
This commit is contained in:
2026-04-13 18:30:28 +08:00
parent b990abdb3b
commit 823e195395
2 changed files with 115 additions and 7 deletions

83
.memory/status.md Normal file
View File

@@ -0,0 +1,83 @@
# MeetNote 项目状态
> 立项日期2026-04-13
> 个人项目 / 私有部署 / 自用优先
## 一句话
手机录音 → 上传网页 → 云端转写 → AI 总结,中英混说精准。对标 Otter.ai / 通义听悟 / 飞书妙记,零订阅成本。
## 锁定决策Phase 1 规划结论)
### 架构
- **手机端录音**:用原生录音 AppiOS 语音备忘录 / 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
- 上传:前端直传 MinIOS3 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 卡片契合四格总结)
- 候选 201 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 切片转写 + 总结 workerffmpeg → Groq → Poe
6. A6 前端列表 + 详情页(按日期分组 + 音频播放器 + 四格总结)
7. A7 部署上线Coolify
## v2 候选Phase B + CMVP 稳定后)
- Phase B日历 .ics 订阅、全文/语义搜索pgvector、说话人分离、分享链接
- Phase CVPS Claude Code 智能体层(跨会议关联、跨会议待办聚合、自动建 Gitea issue、生成跟进邮件
## 关键约束 & 坑位
- **Groq Whisper 单次上限 25MB** → 必须切片,按静音点切避免切坏句子
- **长音频总结** → >2h 走 map-reduce先分段总结再合成全局
- **MinIO CORS** → 必须允许 `meetnote.kang-kang.com` 直传,否则浏览器拦截
- **iOS m4a** → 1h ≈ 30MB3h ≈ 90MB6h ≈ 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

View File

@@ -1,18 +1,43 @@
# MeetNote 会议转写总结 # MeetNote 会议转写总结
手机录音 → 上传网页 → 云端 Groq Whisper 转写 → Poe Claude 总结。中英混说精准,零订阅成本。
## 启动 ## 启动
- `pnpm dev` — 前端,端口 4490 - 前端Next.js 15`cd web && pnpm dev` → http://localhost:4490
- `待补充` — 后端 API端口 4491 - 后端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 单次上限 25MBffmpeg `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`