欢迎你在 苹果 App Store(应用商店) 下载心晴MO,亦可在商店内搜索 「心晴MO」,在 iPhone 与 iPad 上随时记录情绪、照料你的心灵花园。若你希望参与开发或体验调试构建,可继续阅读下文「开发者快速上手」与「快速开始」。
心晴MO 是一款专注于情绪管理的治愈系应用。通过独特的「情绪气象站」和「心灵花园」概念,帮助用户记录、理解和管理自己的情绪,让每一次情绪的记录和解决都成为照料心灵花园的过程。
git clone <repository-url>
cd Emotion-Diary(克隆后的文件夹名以远程仓库名为准;本仓库本地目录名为 Emotion-Diary。)
请使用 Yarn 与仓库根目录的 yarn.lock。本地开发执行 yarn install;对齐 CI 或提交 PR 前建议在干净环境中使用 yarn install --frozen-lockfile,与持续集成一致。
默认分支: master。
复制 .env.example 为 .env 并按需填写(勿提交含真实密钥的 .env)。
yarn typecheck
yarn lint
yarn test:ci- Pull Request:运行
yarn lint、yarn typecheck、yarn test:ci。 - push 到
master:除上述步骤外,另运行yarn verify:governance与node scripts/verify-governance-smoke.js(治理与冒烟)。
- 创新的天气隐喻可视化关系健康状态
- 用天气图标(雨滴、云朵、雷电等)表达情绪强度
- 实时显示当前"关系天气"和情绪指数
- 5级情绪强度:从"有点委屈"到"情绪爆发"
- 天气主题图标:使用 Droplet、Cloud、CloudRain、CloudLightning、Zap 等图标
- 多维度标签系统:支持人物标签和情绪触发器标签,可自定义标签
- 灵活的期限设置:今天谈、本周内、本月内、以后说、自己消化
- 自动草稿保存:编辑过程自动保存草稿,意外退出也不会丢失
- 编辑历史记录:完整记录每次修改,可查看情绪变化轨迹
- 温暖的文案引导:降低记录门槛,让用户更愿意表达
全新设计的洞察页面,用植物生长隐喻展示情绪管理进度:
- 本周情绪天气:7天情绪状态一目了然,每天显示天气图标和花朵状态
- 治愈进度:环形进度条展示情绪解决率,从种子到开花的成长阶段
- 关系花盆:每个人对应一个花盆,显示关系健康度(繁花盛开/正常生长/需要浇水)
- 情绪触发洞察:分析 Top 3 情绪触发器,配合温暖的"园艺建议"
- 底部鼓励语:动态生成的正向反馈,让用户感受到成长
- 周/月回顾与导出:按所选范围查看统计并生成情绪回顾图,可保存到系统相册(路由:
review-export)
- 治愈系情绪释放功能,配合 情绪释放档案 回看释放记录与触发上下文
- 炫酷的 Skia 燃烧动画效果
- 让负面情绪随火焰消散
- 情绪预测:基于历史数据预测未来7天情绪走势
- 情绪播客:AI 生成个性化情绪疗愈播客内容
- 情绪处方:针对触发器提供个性化建议和应对策略
- 智能分析:深度分析情绪周期和触发因素
- 回顾图一句总结:导出回顾图时可选 Groq 生成底部温柔一句;无 API Key 或网络/服务失败时使用本地兜底文案(调用 Groq 时需联网)
- 离线优先:本地存储保护用户隐私
- 云端备份:可选 Supabase 云端同步,数据安全无忧
- 智能数据迁移:支持访客数据与登录用户数据无缝切换
- 治愈系配色:粉绿渐变主题,温暖舒适
- 天气主题图标:统一使用 Lucide 图标库,避免 emoji 兼容性问题
- 心灵花园隐喻:将情绪管理转化为照料花园的过程
- 正向激励:强调成长和治愈,而非问题和冲突
- 流畅动画:React Native Reanimated 驱动的微交互
- 响应式设计:适配各种屏幕尺寸
克隆、yarn install、环境变量与提交前检查命令见上文 开发者快速上手。
# 启动开发服务器(需先完成上文安装步骤)
yarn start- 🍎 App Store(推荐用户) - 在 App Store 打开心晴MO(iPhone / iPad);也可在 App Store 内搜索 「心晴MO」
- 📲 Expo Go 预览 - 手机安装 Expo Go,扫描开发服务器二维码
- 📲 APK 下载 - 从 Releases 页面下载预编译 APK(需要先配置 EAS Build)
- 🌐 Web 版本 - 运行
yarn web在浏览器中体验
本项目遵循严格的安全最佳实践:
- ✅ 所有敏感信息使用 EAS Secrets 管理
- ✅
.gitignore配置完善,防止敏感文件泄露 - ✅ 环境变量模板化(
.env.example) - ✅ 定期安全审计和依赖更新
详细信息请查看 SECURITY.md
yarn verify:env # 环境变量与密钥泄露风险(见 scripts/verify-env-security.js)
yarn verify:all # 聚合多项配置检查(图标、权限、EAS、隐私清单等)
yarn verify:governance # 治理规则(与 CI push 到 master 一致)具体检查项见各 scripts/verify-*.js 与 SECURITY.md。
- 中文描述:app-description-zh.md
- 英文描述:app-description-en.md
- 截图指南:screenshot-guide.md
- 4.3(a) 回复模板:review-response-4.3a.md
- 2.3.8 / 2.1(a) 审核回复:review-response-2.3.8-2.1a.md
- Supabase 登录排查:supabase-login-checklist.md
- 提交前检查清单:preflight-checklist.md
- 隐私政策:PRIVACY.md
# 构建前建议先跑校验(与上文「配置与安全校验」一致)
yarn verify:all
# iOS 生产构建
eas build --platform ios --profile production| 类别 | 技术选型 | 版本 |
|---|---|---|
| 框架 | React Native + Expo | 0.81.5 + ~54.0.30 |
| UI 运行时 | React | 19.1.0 |
| 路由 | Expo Router | ~6.0.21 |
| 状态管理 | Zustand | ^5.0.9 |
| 数据持久化 | AsyncStorage + Supabase | - |
| AI服务 | Groq API(fetch) | - |
| UI组件 | 自定义组件 + Lucide React Native | ^0.554.0 |
| 图形渲染 | React Native Skia | 2.2.12 |
| 动画 | React Native Reanimated | ~4.1.1 |
| SVG支持 | React Native SVG | 15.12.1 |
| 类型支持 | TypeScript | ~5.9.2 |
| 构建工具 | EAS Build | - |
Emotion-Diary/
├── app/ # Expo Router:文件即路由(页面仅此目录)
│ ├── _layout.tsx # 根布局(字体、Store 初始化、Stack)
│ ├── profile.tsx # 个人中心
│ ├── review-export.tsx # 情绪回顾导出页
│ └── (tabs)/
│ ├── _layout.tsx # 底部标签导航
│ ├── index.tsx # 主页(Dashboard)
│ ├── record.tsx # 记录页
│ └── insights.tsx # 洞察页(心灵花园)
├── android/ ios/ # 原生工程(prebuild / EAS 生成,勿手改业务逻辑)
├── components/ # 跨页面可复用 UI(含子目录)
│ ├── Dashboard.tsx Record.tsx Insights.tsx …
│ ├── EditEntryModal/ ReviewExport/ Insights/ entries/ ai/ …
│ └── …
├── features/ # 按功能垂直拆分(例:profile/ 屏幕与逻辑)
├── store/
│ ├── useAppStore.ts # Zustand 根组合
│ └── modules/ # 分模块 slice(entries、user、ai …)
├── hooks/ # 可复用 Hooks
├── lib/ # 第三方客户端封装(如 Supabase)
├── services/ # 领域服务(如陪伴天数计算)
├── utils/ shared/ # 工具函数与跨层共享(如格式化)
├── styles/ # StyleSheet 工厂、主题相关样式
├── types/ # 补充类型(components、colors …)
├── types.ts constants.ts # 领域模型与根级常量(与 constants/ 并存)
├── constants/ # 拆分的常量(如 colors)
├── assets/ # 图片与静态资源
├── __tests__/ # Jest 单测 / 属性测试 / 集成测试
├── scripts/ # 校验与治理脚本(verify-*)
├── openspec/ docs/ # 规范与补充文档
├── .planning/ # 工程规划、阶段记录;codebase/ 下为栈与路由等说明文档
├── app-store-submission/ # 商店提审文案与清单
├── src/ # 预留/实验性子域目录(多数为空;少量如 core-state)
├── app.json eas.json metro.config.js babel.config.js eslint.config.js
└── package.json tsconfig.json README.md
| 目录 | 说明 |
|---|---|
app/ |
符合 Expo Router 要求:仅此处定义路由页面。 |
android/ ios/ |
标准 预构建原生目录;业务逻辑应放在 TS/TSX 共享层。 |
components/ features/ |
常见 RN 分层:展示组件与功能切片分离。 |
store/ hooks/ services/ |
状态、副作用与领域服务分离,便于测试与边界(见 ESLint boundaries)。 |
更完整的 SDK 与构建配置核对 见 .planning/codebase/EXPO-RN-AUDIT.md。
说明: src/ 下部分子文件夹为占位结构,与主业务并置;新功能优先落在 app/、components/、features/ 以免重复入口。
本项目使用 OpenSpec(规范驱动开发工具)进行开发管理,确保代码质量和一致性。
OpenSpec 是一个规范驱动开发(Spec-driven Development,SDD)工具,通过在编写代码之前锁定意图,确保人类和 AI 在项目需求上达成一致,从而实现可预测和可审查的输出。
所有规范文档位于 openspec/ 目录下:
- README.md - OpenSpec 使用指南
- 项目概览规范 - 项目目标、技术栈、架构概览
- 数据模型规范 - 数据结构定义和业务规则
- 状态管理规范 - Zustand Store 接口和方法
- UI组件规范 - 组件功能和交互逻辑
- 服务层规范 - AI 服务和 Supabase 服务
- 工具函数规范 - 工具函数 API 和使用说明
- 开发工作流文档 - 开发流程和最佳实践
- 提案(Proposal) - 创建变更提案,描述所需的规范更新
- 审查(Review) - 与 AI 助手一起审查和完善提案
- 实施(Implementation) - 根据批准的规范实施任务
- 归档(Archive) - 将完成的变更归档,并更新规范文档
- 查看规范:在开始新功能开发前,先查看相关的规范文档
- 修改规范:当需要添加新功能或修改现有功能时,先更新相应的规范文档
- 代码审查:使用规范文档作为代码审查的标准
- AI 协作:与 AI 工具协作时,引用规范文档确保理解和实现的一致性
详细说明请参考 OpenSpec 使用指南 和 开发工作流文档。
yarn install如果需要使用云端同步功能,需要配置 Supabase:
-
创建 Supabase 项目
- 访问 Supabase 创建新项目
- 获取项目 URL 和匿名密钥(anon key)
-
配置环境变量
- 在项目根目录创建
.env文件(如果不存在) - 添加以下配置:
EXPO_PUBLIC_SUPABASE_URL=your_supabase_project_url EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
- 在项目根目录创建
-
初始化数据库
- 在 Supabase SQL Editor 中执行以下脚本(按顺序):
supabase/create_entries_table.sql- 创建 entries 表supabase/rls_policies.sql- 配置行级安全策略
- 可选:执行
supabase/diagnose_entries.sql进行诊断
- 在 Supabase SQL Editor 中执行以下脚本(按顺序):
💡 提示:如果不配置 Supabase,应用仍可正常使用,但云端同步功能将不可用。所有数据将仅存储在本地。
# 启动开发服务器
yarn start
# 运行在模拟器/真机
yarn ios # iOS模拟器
yarn android # Android模拟器
yarn web # Web浏览器
# 代码检查
yarn lint
# 重置项目
yarn reset-project优势: 无需本地Android开发环境,自动处理签名,支持多种设备配置
1. 安装EAS CLI
npm install -g eas-cli2. 配置EAS项目
eas build:configure3. 构建APK文件
# 构建测试版本(推荐首次使用)
eas build --platform android --profile preview
# 构建生产版本(用于发布)
eas build --platform android --profile production4. 获取APK文件
构建完成后(约5-10分钟):
- 📧 邮件通知 - 会收到构建完成的邮件,包含下载链接
- 🌐 EAS控制台 - 访问 expo.dev 下载APK文件
- 📱 二维码安装 - 构建结果中包含二维码,可直接扫码安装
优势: 无需Mac电脑,无需Apple Developer账号(测试版)
# 构建测试版本
eas build --platform ios --profile preview
# 构建生产版本(需要Apple Developer账号)
eas build --platform ios --profile productionQ: 如何自定义主题色彩?
- 修改
constants.ts中的颜色配置 - 修改
components/Insights.tsx中的COLORS常量 - 更新各组件中的样式定义
Q: 如何添加新的情绪类型?
- 在
types.ts的MoodLevel枚举中添加新类型 - 在
constants.ts的MOOD_CONFIG中添加新配置(包括 iconName 和 iconColor) - 在
Record.tsx和EntryCard.tsx的getMoodIcon函数中添加新图标映射
Q: 如何修改园艺建议文案?
- 修改
components/Insights.tsx中的TRIGGER_ADVICE对象 - 可以为新的触发器添加对应的建议文案
- ✅ 天气主题图标系统(替代 emoji)
- ✅ 心灵花园洞察页面(全新设计)
- ✅ 优化的记录页面文案
- ✅ 治愈进度环形图
- ✅ 关系花盆可视化
- ✅ 情绪触发洞察与园艺建议
- ✅ 基础情绪记录功能
- ✅ 情绪气象站可视化
- ✅ 数据洞察分析
- ✅ 气话焚烧功能
- ✅ Android/iOS应用打包
- 📊 更多数据分析维度
- 🎨 主题定制系统
- 🌍 多语言支持
- 🔔 情绪提醒功能
我们欢迎所有形式的贡献!
- Fork项目 - 点击右上角Fork按钮
- 创建功能分支 -
git checkout -b feature/amazing-feature - 提交更改 -
git commit -m 'Add amazing feature' - 推送分支 -
git push origin feature/amazing-feature - 创建Pull Request - 提交PR并详细描述更改
- 使用TypeScript进行类型安全开发
- 遵循ESLint代码规范
- 添加必要的注释和文档
- 确保所有功能正常工作后再提交
- 保持代码风格一致
本项目采用 MIT 许可证 - 详见 LICENSE 文件
- 🐛 问题反馈:请在项目仓库中创建 Issue
- 💬 讨论:欢迎在项目仓库中发起讨论
- ⭐ 支持:如果这个项目对你有帮助,请给个Star支持我们!