Files
nj/docs/superpowers/specs/2026-05-31-nuanji-warm-notes-design.md
iven c539e6fd83 feat: initialize Nuanji (Warm Notes) project
- Base platform from base.git (ERP base: auth, core, config, message, workflow, plugin)
- Created erp-diary module skeleton (lib.rs, dto.rs, error.rs, event.rs, state.rs)
- Integrated erp-diary into workspace and erp-server
- Added DiaryModule registration in main.rs
- Added DiaryState FromRef in state.rs
- Diary routes mounted (empty routes, ready for implementation)
- Product design spec v1.2 preserved in docs/
- Implementation plan preserved in plans/

Cargo check: OK
Cargo test: OK (78+ base tests passing)
2026-05-31 20:52:19 +08:00

26 KiB
Raw Blame History

暖记 (Warm Notes) — 产品设计规格

版本: 1.2
日期: 2026-05-31
状态: Phase 1 待确认
平台: Android / iOS / macOS / Windows / HarmonyOS
后端: HMS ERP 基座 (Rust/Axum) + erp-diary 业务模块


1. 产品定位

暖记 是一款温暖治愈风格的手账日记 app以手写/涂鸦为核心输入方式,覆盖小学到大学全学段用户。

1.1 目标用户

阶段 用户群 核心场景 优先级
Phase 1 小学生 (8-12岁, 3-6年级) 平板+触控笔手写日记、班级分享、老师点评 核心
Phase 2 中学生 (13-15岁) 独立创作、心情追踪、好友互动 扩展
Phase 3 高中/大学生/年轻人 (16+) 完整社交、高级模板、数据分析 扩展

1.2 核心价值主张

  • 笔迹保真:保留用户真实手写笔迹,适度去抖但不过度平滑,让日记有温度和个人辨识度
  • 手账体验:贴纸、涂鸦、照片、和纸胶带——不只是在手机上打字,而是一本可以装饰的手账
  • 班级连接:老师布置主题 → 学生写作 → 老师点评,形成写作闭环,培养写作习惯
  • 成长记录:心情追踪、成就徽章、日历回顾,让用户看见自己的变化

1.3 双模式设计

App 同时支持两类用户,互不排斥:

  • 班级用户:通过班级码加入,享受班级分享、老师点评功能。以小学生为主。
  • 独立用户:手机号/第三方注册,自由使用全部日记功能,无需加入班级。覆盖中学生到成人。

2. 角色与权限

2.1 三种角色

👩‍🏫 老师

  • 创建/管理班级,生成班级码
  • 布置日记主题/作业
  • 查看班级所有已分享的日记
  • 点评 + 文字评语
  • 统计班级完成情况
  • 不可查看学生标记为"私密"的日记

👧 学生

  • 手写/打字/拍照创建日记
  • 装饰日记(贴纸/涂鸦/胶带/照片)
  • 选择性分享到班级(每篇日记自主选择公开或私密)
  • 查看同学分享的日记
  • 收到老师评语通知
  • 收集成就徽章

👨‍👩‍👧 家长

  • 绑定孩子账号(扫码/短信验证)
  • 查看自己孩子的日记(只读)
  • 查看老师的评语
  • 设置使用时间限制(可选)
  • 接收周报/月报
  • 不可查看其他学生日记
  • 不可修改孩子日记内容

2.2 权限矩阵

操作 老师 学生 家长
创建日记
查看自己孩子的日记
查看其他学生分享的日记
查看学生私密日记 仅自己
布置日记主题
点评日记
管理班级成员
设置使用时间

3. 功能模块

3.1 手账编辑器(核心)

架构Flutter Stack 层叠

  • Layer 1 — Canvas 手写层CustomPainter + perfect_freehand
  • Layer 2 — 元素层Positioned Widgets贴纸/照片/文字/胶带Draggable + 手势缩放旋转
  • Layer 3 — 工具栏:贴纸面板、模板面板、画笔面板、格式栏、标签面板

手写引擎

  • perfect_freehand 库实现速度→线宽映射
  • 触控笔压感直传PointerEvent.pressure → 线宽/透明度)
  • 轻量去抖(仅消除 ±1-2px 设备采样噪声,保留个人笔迹特征)
  • Palm rejection触控笔书写时忽略手掌触碰
  • 笔画收尾处理保留(起笔/收笔轻重变化是个人风格关键)

画笔工具

  • 钢笔(细线、压感敏感)
  • 铅笔(中等粗细、轻微纹理感)
  • 马克笔(宽笔触、半透明叠加)
  • 橡皮(区域擦除)

工具面板

  • 贴纸面板:分类浏览(热门/可爱/植物/天气/节日/手绘/校园)、搜索、拖拽放置
  • 模板面板:日/周/月视图模板、学生专属模板
  • 画笔面板:工具选择、粗细滑块、颜色选择、透明度(马克笔专属)
  • 格式栏:加粗/斜体/下划线、文字颜色、对齐方式
  • 标签面板:已选标签、输入新标签、推荐标签

自动保存:每次笔画结束或元素变更时增量保存。

3.2 日记内容数据模型

JournalEntry {
  id: String
  title: String
  date: DateTime
  mood: Enum (happy, calm, sad, angry, thinking)
  weather: Enum (sunny, cloudy, rainy, snowy, windy)
  elements: List<JournalElement>  // 有序排列
  tags: List<String>
  isSharedToClass: Boolean
  teacherComment: String?
  createdAt: DateTime
  updatedAt: DateTime
}

JournalElement {
  type: Enum (handwriting, text, sticker, photo, washiTape)
  position: Offset
  size: Size
  rotation: Double
  zIndex: Int
  // type-specific data:
  handwritingData: HandwritingStroke[]?  // 矢量点序列
  textContent: String?
  stickerId: String?
  photoPath: String?
  washiTapeStyle: String?
}

HandwritingStroke {
  points: List<Offset>      // 原始坐标
  pressures: List<Double>   // 压感数据
  timestamps: List<Int>     // 时间戳(可回放)
  color: String
  width: Double
  toolType: Enum (pen, pencil, marker, eraser)
  opacity: Double
}

3.3 日历系统

  • 月视图7×N 网格,心情色彩标记(心情点),日记标记点
  • 周视图7 天概览,每日卡片展示日记缩略
  • 时间轴:按时间线展示当日日记条目
  • 心情概览:条形图统计本月各心情天数

3.4 心情追踪

  • 5 种标准化心情:😊开心、😐平静、😢难过、😡生气、🤔思考
  • 天气标记:☀️晴、多云、🌧雨、❄️雪、🍃
  • 心情趋势图近7天/30天/3月
  • 统计卡片:好心情占比、连续记录天数、天气分布、日记篇数
  • 心情洞察:最佳心情日、开心触发因素、月度变化趋势

3.5 班级系统Phase 1 新增)

班级功能

  • 老师创建班级 → 生成 6 位班级码 → 学生输入加入
  • 班级成员列表(老师可管理)
  • 班级日记墙(展示所有已分享的日记)
  • 老师布置日记主题/作业(带截止时间)
  • 老师点评 + 评语通知

分享机制

  • 学生写完日记后自主选择:分享到班级 / 保持私密
  • 分享后的日记出现在班级日记墙
  • 老师可点评任意已分享日记
  • 学生收到点评通知

3.6 贴纸/模板系统

  • 预装基础贴纸包(免费)
  • 扩展贴纸包下载(免费 + 付费)
  • 分类:热门/可爱/植物/天气/节日/手绘/校园/文字/和纸胶带
  • 收藏夹功能
  • 模板画廊:日/周/月视图模板、学生专属模板(考试复习/课程表/读书笔记/校园生活)

3.7 成就系统

  • 连续记录徽章7天/30天/100天
  • 百篇日记徽章
  • 贴纸达人徽章
  • 年度记录徽章
  • 解锁条件明确,视觉反馈清晰

3.8 搜索系统

  • 全文搜索日记内容
  • 按标签搜索
  • 按心情/天气筛选
  • 模板搜索
  • 搜索历史 + 热门搜索

3.9 个人中心

  • 头像 + 昵称 + 签名
  • 统计:总日记数、连续天数、本月日记、使用贴纸数
  • 成就徽章展示
  • 设置:日记提醒、隐私锁、云同步、主题外观、数据导出、反馈、关于

4. 视觉设计系统

4.1 色彩

Token 浅色模式 深色模式 用途
bg #FFF8F0 #1A1614 页面背景(奶油白)
surface #FFFFFF #2A2520 卡片/面板背景
fg #2D2420 #F0E8DF 主文字
accent #E07A5F #E8907A 主色调(珊瑚色)
secondary #81B29A #8FBF9E 辅助色(鼠尾草绿)
tertiary #F2CC8F #D4B878 第三色(暖金)
rose #D4A5A5 #C4A0A0 玫瑰粉

4.2 字体

  • 显示字体Quicksand / Nunito / SF Pro Rounded
  • 正文字体Nunito
  • 手写体Caveat / Kalam
  • 等宽字体JetBrains Mono

4.3 设计要素

  • 大圆角体系10px / 16px / 22px / 28px / pill
  • 柔和阴影soft / medium / float 三级
  • 触摸目标最小 44pxWCAG 2.5.8
  • 弹性动画曲线cubic-bezier(0.34, 1.56, 0.64, 1)
  • 深色模式完整支持

5. 技术架构

5.1 技术栈

层级 技术方案 选型理由
UI 框架 Flutter 3.x 跨平台、高性能自绘引擎
状态管理 flutter_bloc (BLoC) 复杂交互场景、可测试性强
本地存储 Isar 查询能力 + 全文搜索 + 内置加密
手写绘制 CustomPainter + perfect_freehand 笔迹保真、压感支持、速度→线宽
图表 fl_chart 功能完善、高度自定义
主题 ThemeData + ColorScheme 官方支持、深色模式
图片处理 flutter_image_compress 压缩存储
路由 go_router 声明式路由、深链接支持
网络 dio + connectivity_plus 云同步 + 离线检测
数据模型 freezed + json_serializable 不可变、类型安全
通知 flutter_local_notifications 日记提醒
权限 permission_handler 相机/存储/通知
导出 pdf + screenshot + share_plus 日记导出与分享
日志 logger 调试与错误追踪

5.2 跨平台策略

  • Android / iOSFlutter 直接构建Phase 1 首发)
  • macOS / WindowsFlutter 桌面端适配(响应式布局)
  • HarmonyOS:通过 ohos_flutter 社区方案适配
  • 优先级Android/iOS → macOS/Windows → HarmonyOS

5.3 响应式布局

  • 手机端(< 600px单列布局底部 TabBar
  • 平板端600-1024px双栏布局列表+详情),侧边导航
  • 桌面端(> 1024px三栏布局导航+列表+详情/编辑器)

5.4 数据架构

离线优先 + 定时云同步

  • 所有数据优先写入 Isar 本地数据库,离线完全可用
  • WiFi 环境下自动增量同步到云端(避免消耗学生流量)
  • 同步冲突策略:本地优先 → 云端合并 → 人工提示解决
  • 班级分享数据通过云端推送(需网络),本地缓存离线可读
  • 素材包:预装基础贴纸 + WiFi 下载扩展包 + 本地缓存管理

6. 注册与安全

6.1 注册流程

班级用户(小学生)

  1. 方式 A输入老师提供的 6 位班级码 → 设置昵称+头像 → 加入班级 → 首次使用需家长授权
  2. 方式 B家长注册 → 为孩子创建子账号 → 绑定班级码

独立用户(中学/成人)

  1. 手机号 + 验证码注册
  2. 第三方登录(微信/Apple/Google
  3. 选择年龄段标签
  4. 直接使用全部功能

6.2 儿童安全

PIPL 合规(中国个人信息保护法)

  • 未满 14 岁必须取得父母/监护人同意(家长授权弹窗 + 短信/扫码确认)
  • 制定专门的儿童个人信息处理规则(单独隐私政策文档)
  • 收集信息最小必要(昵称+年级即可,无需真实姓名/身份证)
  • 家长有权查阅/更正/删除孩子的个人信息
  • 账号注销后 30 天内删除所有数据

数据安全

  • Isar 内置加密存储(日记内容 AES 加密)
  • 云同步 TLS 传输加密
  • 照片加密本地存储

内容安全

  • 敏感词本地词库过滤
  • 分享前自动检查
  • 老师可审核班级内容
  • 家长可查看孩子日记(只读)

7. Phase 1 页面清单

基于原型稿Phase 1 需实现的屏幕:

7.1 直接复用原型稿(需适配小学生内容)

页面 原型文件 调整说明
启动页 splash.html 保持不变
引导页 onboarding.html 内容调整为小学生向
首页日记流 home-daily.html 移除"考研"等成人内容
手账编辑器 editor.html 强化手写优先
日历视图 calendar.html 保持不变
周概览 weekly.html 保持不变
月度概览 monthly.html 保持不变
心情追踪 mood-tracker.html 保持不变
贴纸素材库 stickers.html 增加校园主题贴纸
模板画廊 templates.html 内容调整为小学生向
搜索 search.html 保持不变
个人中心 profile.html 增加家长关联/班级入口

7.2 Phase 1 新增页面

页面 说明
班级码加入 输入班级码 → 设置昵称头像 → 加入班级
家长授权 弹窗 → 家长扫码/短信确认 → 授权完成
班级主页 班级信息、成员列表、日记墙、老师布置的主题
班级日记墙 瀑布流展示同学分享的日记
老师布置主题 老师发布日记主题/作业(带截止时间)
老师点评 查看学生分享日记 → 写评语
家长仪表板 查看孩子日记、使用报告、时间设置
家长关联 扫码/短信绑定孩子账号

7.3 推迟到 Phase 2+

页面 原型文件 说明
发现页 discover.html 社交功能Phase 2 开放给中学生

8. 项目范围总结

Phase 1 MVP 范围(小学生版)

  • 完整手账编辑器(手写优先)
  • 日历/周/月视图
  • 心情追踪系统
  • 贴纸/模板系统(预装 + 扩展下载)
  • 班级系统(创建/加入/分享/点评)
  • 三角色(老师/学生/家长)
  • 成就系统
  • 搜索系统
  • 儿童安全与家长控制
  • 深色模式
  • Android + iOS 首发
  • 发现页/社交功能Phase 2
  • 达人日记/热门话题Phase 2+
  • 高级数据分析Phase 3
  • macOS/Windows/HarmonyOSPhase 1 后续)

9. 后端架构 — 基于 HMS ERP 基座

核心决策:复用 HMS 健康管理平台的 ERP 基座,以 Feature Flag 工作区模式加载暖记业务模块。

9.1 架构策略Feature Flag 工作区

采用 单一仓库 + Cargo Workspace + Feature Flag 模式:

hms/                                    # 一个仓库
├── crates/
│   ├── erp-core/                      # L1: 基座 — 事件·错误·trait
│   ├── erp-auth/                      # L2: 基座 — 用户·角色·权限·JWT
│   ├── erp-config/                    # L2: 基座 — 字典·菜单·设置
│   ├── erp-message/                   # L2: 基座 — 消息·通知·推送
│   ├── erp-workflow/                  # L2: 基座 — 工作流(可选)
│   ├── erp-plugin/                    # L2: 基座 — 插件运行时
│   │
│   ├── erp-diary/                     # L2: 暖记业务 — 日记·班级·贴纸·心情
│   │   ├── src/entity/               # ~15 Entity日记·班级·贴纸等
│   │   ├── src/service/              # ~12 Service日记CRUD·同步·班级管理
│   │   ├── src/handler/              # ~10 HandlerREST API
│   │   └── src/event.rs              # diary.created / diary.shared 等
│   │
│   ├── erp-health/                   # L2: HMS 业务feature flag 控制)
│   ├── erp-ai/                       # L2: HMS 业务feature flag 控制)
│   ├── erp-dialysis/                 # L2: HMS 业务feature flag 控制)
│   │
│   └── erp-server/                   # L3: Axum 入口,按 feature 组装模块
│       └── migration/                # SeaORM 迁移(基座 + 业务)
├── apps/
│   ├── web/                          # HMS 管理后台React SPA
│   └── nuanji-api/                   # 暖记专用 API 网关(可选)
└── Cargo.toml                        # Workspace root

Feature Flag 控制

# Cargo.toml (workspace)
[workspace]
members = [
    "crates/erp-core",
    "crates/erp-auth",
    "crates/erp-config",
    "crates/erp-message",
    "crates/erp-workflow",
    "crates/erp-plugin",
    "crates/erp-diary",      # 暖记业务模块
    "crates/erp-server",
]

# erp-server/Cargo.toml
[features]
default = ["diary"]
diary = ["erp-diary"]
health = ["erp-health"]
ai = ["erp-ai"]
dialysis = ["erp-dialysis"]
full = ["diary", "health", "ai", "dialysis"]

启动时按 feature 组装模块

// erp-server/src/main.rs
fn register_modules() -> Vec<Box<dyn ErpModule>> {
    let mut modules: Vec<Box<dyn ErpModule>> = vec![
        Box::new(AuthModule),
        Box::new(ConfigModule),
        Box::new(MessageModule),
    ];

    #[cfg(feature = "diary")]
    modules.push(Box::new(DiaryModule));

    #[cfg(feature = "health")]
    modules.push(Box::new(HealthModule));

    modules
}

部署实例

  • cargo build --features diary → 暖记后端(不含医疗模块)
  • cargo build --features health,ai → HMS 后端(不含日记模块)
  • cargo build --features full → 全功能实例

9.2 技术栈(继承 HMS 基座)

层级 技术方案 来源
后端框架 Axum 0.8 (Rust) HMS 基座继承
ORM SeaORM 1.1 HMS 基座继承
数据库 PostgreSQL 16 HMS 基座继承
缓存 Redis 7 HMS 基座继承
认证 JWT + Argon2 + RBAC HMS 基座继承(扩展角色)
加密 AES-256-GCM + KEK/DEK HMS 基座继承
事件 EventBus + Outbox HMS 基座继承
文件存储 阿里云 OSS / 腾讯云 COS 新增(贴纸/照片)
推送 极光推送 / 个推 新增(老师点评通知)
短信 阿里云短信 HMS 基座继承
CDN 阿里云 CDN 新增(贴纸包分发)
API 文档 utoipa (OpenAPI) HMS 基座继承

数据本地化儿童个人信息必须存储在中国境内服务器。HMS 已支持多租户 + 租户独立加密密钥。

9.3 基座继承能力 vs 新增开发

能力 来源 工作量
用户/角色/权限 CRUD erp-auth 继承 零开发
JWT 认证 + Token 轮换 erp-auth 继承 零开发
RBAC 权限码守卫 erp-auth 继承 零开发
组织/部门/岗位 erp-auth 继承 零开发
事件总线 + Outbox erp-core 继承 零开发
字典/菜单/设置 erp-config 继承 零开发
消息/通知/模板 erp-message 继承 零开发
PII 加密 + 盲索引 erp-core 继承 零开发
审计日志 erp-core 继承 零开发
多租户隔离 erp-core 继承 零开发
SeaORM 迁移框架 erp-server 继承 零开发
OpenAPI 文档生成 utoipa 继承 零开发
测试框架 HMS 基座继承 零开发
student/teacher/parent 角色 erp-auth 扩展 🆕 ~200 行
班级码认证 erp-auth 扩展 🆕 ~500 行
家长扫码绑定 新增 service 🆕 ~400 行
日记 CRUD + 同步 erp-diary 新增 🆕 ~2000 行
班级管理 erp-diary 新增 🆕 ~800 行
贴纸/模板管理 erp-diary 新增 🆕 ~600 行
心情/统计 API erp-diary 新增 🆕 ~500 行
内容安全过滤 erp-diary 新增 🆕 ~300 行
文件上传(照片/贴纸) 参考健康模块 🆕 ~500 行
合计新增 ~5800 行 Rust

9.4 核心后端模块erp-diary

  1. 日记服务:日记 CRUD、元素管理、增量同步、版本号冲突检测、软删除
  2. 手写数据服务:笔画矢量存储、按需加载(大字段独立表)、导出为图片
  3. 班级服务:创建班级、生成班级码、成员管理、班级码安全(有效期+次数限制+锁定)
  4. 主题布置服务:老师发布/管理日记主题、学生提交关联、完成度统计
  5. 点评服务:老师评语、通知推送(继承 erp-message
  6. 家长绑定服务:扫码/短信验证、绑定关系管理、只读权限控制
  7. 素材服务贴纸包管理、下载统计、Phase 1 全免费
  8. 心情统计服务:心情趋势、统计卡片、洞察分析
  9. 内容安全服务:敏感词过滤(含谐音/拼音变体检测)、图片安全标注
  10. 成就服务:成就规则引擎、徽章解锁、通知

9.5 基座优化同步策略

由于所有项目共享一个仓库:

  • 基座层的 Bug 修复或优化只提交一次
  • 所有 feature 配置的构建自动受益
  • CI 按矩阵运行:--features diary + --features health 等组合
  • 迁移文件统一管理,按序号递增(暖记迁移从 m000166 开始)

10. 完整数据模型(评审补充)

10.1 用户与角色

User {
  id: String (UUID)
  role: Enum (teacher, student, parent, independent)
  nickname: String
  avatarUrl: String?
  phone: String?           // 独立用户/家长/老师必须有
  gradeLevel: Int?         // 学生年级 (1-6)
  ageGroup: String?        // 独立用户年龄段标签
  parentAuthorized: Boolean // 未满14岁需家长授权
  createdAt: DateTime
  settings: UserSettings
}

UserSettings {
  theme: Enum (light, dark, system)
  reminderEnabled: Boolean
  reminderTime: String      // "21:00"
  privacyLockEnabled: Boolean
  syncOnWifiOnly: Boolean
  language: String          // "zh-CN"
}

TeacherProfile {
  userId: String
  schoolName: String?
  verificationStatus: Enum (pending, verified, rejected)
  // 老师身份验证:教师证上传 或 学校邮箱验证
}

ParentChildBinding {
  id: String
  parentId: String
  childId: String
  verificationMethod: Enum (qrcode, sms)
  status: Enum (active, revoked)
  createdAt: DateTime
}

10.2 班级

Class {
  id: String
  name: String              // "三年级2班"
  schoolName: String?
  teacherId: String          // 创建者/班主任
  classCode: String          // 6位字母数字混合安全性优于纯数字
  codeExpiresAt: DateTime?   // 班级码有效期(学期结束自动失效)
  codeMaxUses: Int?          // 班级码最大使用次数
  memberCount: Int
  createdAt: DateTime
  isActive: Boolean          // 学期结束后可归档
}

ClassMember {
  classId: String
  userId: String
  role: Enum (teacher, student)
  joinedAt: DateTime
  isActive: Boolean
}

10.3 日记(完整模型)

JournalEntry {
  id: String (UUID)
  authorId: String           // 明确谁写的
  classId: String?           // 所属班级(可选)
  title: String
  date: DateTime
  mood: Enum (happy, calm, sad, angry, thinking)
  weather: Enum (sunny, cloudy, rainy, snowy, windy)
  elements: List<JournalElement>
  tags: List<String>
  // 分享状态
  isPrivate: Boolean         // true = 仅自己可见
  sharedToClass: Boolean     // 是否已分享到班级
  sharedAt: DateTime?        // 分享时间
  assignedTopicId: String?   // 关联老师布置的主题
  // 元数据
  version: Int               // 版本号(同步冲突检测)
  createdAt: DateTime
  updatedAt: DateTime
  deletedAt: DateTime?       // 软删除
}

10.4 主题布置与点评

TopicAssignment {
  id: String
  classId: String
  teacherId: String
  title: String              // "今天我观察了..."
  description: String?
  deadline: DateTime?
  createdAt: DateTime
  isActive: Boolean
}

Comment {
  id: String
  journalEntryId: String
  authorId: String           // 点评者(老师)
  content: String
  createdAt: DateTime
}

10.5 素材与成就

StickerPack {
  id: String
  name: String
  category: String
  stickerCount: Int
  price: Decimal             // 0 = 免费
  downloadUrl: String
  version: Int
}

Achievement {
  id: String
  name: String
  description: String
  iconEmoji: String
  condition: String          // "streak_days >= 7"
}

UserAchievement {
  userId: String
  achievementId: String
  earnedAt: DateTime
}

11. 安全与合规补充(评审补充)

11.1 老师注册流程

  1. 下载 app → 选择"我是老师"
  2. 注册:手机号 + 验证码
  3. 身份验证(二选一):
    • 方式 A:上传教师证照片 → 人工审核1-3工作日
    • 方式 B:学校教育邮箱验证(.edu.cn 后缀)
  4. 审核通过后可创建班级

11.2 PIPL 合规补充

  • 监护人可验证性:家长需提供手机号(运营商实名)+ 短信验证码确认身份
  • 儿童个人信息影响评估:上线前完成《个人信息保护影响评估报告》
  • 数据本地化:所有服务器部署在中国境内(阿里云/腾讯云)
  • 家长数据管理权:家长仪表板提供导出/更正/删除孩子数据功能
  • 儿童隐私政策:使用通俗易懂的语言编写,配有图示说明
  • 账号注销:注销后 30 天内删除所有关联数据

11.3 班级码安全机制

  • 6 位字母数字混合62^6 ≈ 568 亿种组合)
  • 班级码有效期(默认学期结束自动失效)
  • 老师可随时重置班级码
  • 连续 5 次输入错误后锁定 30 分钟
  • 可选开启"加入需老师审批"模式

11.4 Phase 1 贴纸付费策略

  • Phase 1 全部免费:避免儿童支付合规问题
  • 预装 3-5 个基础贴纸包
  • 限时活动赠送主题贴纸包
  • Phase 2 再引入付费机制(家长代付)

11.5 内容安全方案

  • 文字:本地敏感词库 + 服务端 AI 内容检测(含谐音/拼音变体)
  • 图片:服务端 AI 安全标注(检测不当图片)
  • 分享审核:可配置"老师审核后才能分享到班级"
  • 举报机制:学生/老师可举报不当内容

12. 字体与中文化补充(评审补充)

12.1 中文字体方案

用途 浅色字体 回退方案
显示字体 思源黑体 (Noto Sans SC) / 阿里巴巴普惠体 PingFang SC (iOS) / 系统默认
正文 Noto Sans SC / 系统默认 各平台系统字体
手写风格 漫漫字 / 手写体 Caveat (英文手写部分)

Flutter 可通过 Google Fonts 加载 Noto Sans SC确保中文排版美观一致。

12.2 perfect_freehand 技术确认

perfect_freehand 有 Dart/Flutter 原生移植版本(perfect_freehand pub.dev 包),可直接在 Flutter 中使用,无需 JS interop。


13. 性能目标(评审补充)

指标 目标值
App 冷启动 < 2 秒
日记列表滚动 60fps 稳定
手写延迟 < 16ms触控到渲染
照片压缩后质量 ≥ 85% SSIM
单篇日记本地存储 < 5MB含照片
本地数据库上限 500MB超限提示清理
云同步单次数据量 < 10MB
贴纸包大小 < 5MB/包

本文档为暖记 (Warm Notes) Phase 1 产品设计规格,基于原型稿分析与头脑风暴讨论整理。
评审版本v1.1 — 补充后端架构、完整数据模型、安全合规、性能目标
v1.2 — 后端架构从 NestJS 方案替换为 HMS ERP 基座 (Rust/Axum) + Feature Flag 工作区模式