cven-diary-helper
项目摘要
cven-diary-helper 是围绕每日记录构建的独立全栈产品。用户回答当天问题后生成日记正文,可选择生成配图,并通过年度热力图、历史详情和 Markdown/Zip 导出持续管理内容。项目的核心不是单次模型调用,而是把生成、私人内容、身份、存储和长期回看组织成稳定流程。
作者职责
- 定义每日提问、生成、回看、补写和导出的产品范围。
- 实现 Next.js 页面、Server Actions、Supabase 数据访问和对象存储。
- 设计用户 AI Key 的加密保存、服务端解密和访问边界。
- 建立 Vitest、生产构建、Docker standalone 和 CNB 镜像流程。
系统架构
Next.js App Router 同时承载页面和服务端操作。Supabase Auth 负责身份,PostgreSQL 保存日记、题目和生成配置,Storage 保存可选图片。业务代码按 ai、diaries、questions、storage 和 supabase 分层,避免页面直接拼装持久化与模型调用细节。
关键设计决策
- 日记生成必须由用户当天回答驱动,不将空白模板直接交给模型补写。
- 系统题与自定义题统一进入概率选择流程,保留每日变化,同时确保结果可解释。
- 单篇导出使用 Markdown,多篇导出使用 Zip,降低对站点长期在线的依赖。
- 图片生成保持可选,文本记录路径不因图片服务失败而阻断。
安全边界
用户提供的 AI Key 在服务端使用 AES-256-GCM 加密后持久化,主加密密钥和 Supabase 管理密钥只存在于服务器环境。公开案例不包含日记正文、对象存储地址、会话 Cookie、数据库记录或任何真实部署变量。
工程难点
生成流程横跨身份校验、题目选择、模型请求、文本落库和可选图片上传。实现中将每个阶段独立处理错误,使文本已生成但图片失败时仍能保留可用结果,并避免重复提交产生多份内容。
验证证据
- 单元测试覆盖题目选择、内容处理和关键数据逻辑。
- 生产构建验证服务端与客户端边界,standalone 镜像验证运行依赖完整性。
- 健康检查和 Compose 配置用于确认容器启动状态。
已知限制
- 当前案例不提供公开在线演示,避免把私人日记场景变成匿名公共写入服务。
- 登录、数据库和图片生成依赖第三方服务,离线环境不可用。
- 正式发布前仍需由实际用户完成移动端书写、导出文件和长期数据恢复的人工验收。
后续演进
后续可补充可撤销的批量导出、生成失败重试记录和更明确的数据保留策略,同时保持用户内容默认私有。