Skip to content

moyunzero/Emotion-Diary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

215 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

心晴MO

心晴MO Logo

一款治愈系情绪记录与管理应用

License: MIT React Native Expo

中文文档 | English

📲 欢迎从 App Store 下载

欢迎你在 苹果 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

CI 行为摘要

  • Pull Request:运行 yarn lintyarn typecheckyarn test:ci
  • push 到 master:除上述步骤外,另运行 yarn verify:governancenode scripts/verify-governance-smoke.js(治理与冒烟)。

文档与社区

🌟 核心功能

🌤️ 情绪气象站

  • 创新的天气隐喻可视化关系健康状态
  • 用天气图标(雨滴、云朵、雷电等)表达情绪强度
  • 实时显示当前"关系天气"和情绪指数

✍️ 智能记录

  • 5级情绪强度:从"有点委屈"到"情绪爆发"
  • 天气主题图标:使用 Droplet、Cloud、CloudRain、CloudLightning、Zap 等图标
  • 多维度标签系统:支持人物标签和情绪触发器标签,可自定义标签
  • 灵活的期限设置:今天谈、本周内、本月内、以后说、自己消化
  • 自动草稿保存:编辑过程自动保存草稿,意外退出也不会丢失
  • 编辑历史记录:完整记录每次修改,可查看情绪变化轨迹
  • 温暖的文案引导:降低记录门槛,让用户更愿意表达

🌱 心灵花园(洞察页面)

全新设计的洞察页面,用植物生长隐喻展示情绪管理进度:

  • 本周情绪天气:7天情绪状态一目了然,每天显示天气图标和花朵状态
  • 治愈进度:环形进度条展示情绪解决率,从种子到开花的成长阶段
  • 关系花盆:每个人对应一个花盆,显示关系健康度(繁花盛开/正常生长/需要浇水)
  • 情绪触发洞察:分析 Top 3 情绪触发器,配合温暖的"园艺建议"
  • 底部鼓励语:动态生成的正向反馈,让用户感受到成长
  • 周/月回顾与导出:按所选范围查看统计并生成情绪回顾图,可保存到系统相册(路由:review-export

🔥 气话焚烧与情绪释放档案

  • 治愈系情绪释放功能,配合 情绪释放档案 回看释放记录与触发上下文
  • 炫酷的 Skia 燃烧动画效果
  • 让负面情绪随火焰消散

🤖 AI 智能助手

  • 情绪预测:基于历史数据预测未来7天情绪走势
  • 情绪播客:AI 生成个性化情绪疗愈播客内容
  • 情绪处方:针对触发器提供个性化建议和应对策略
  • 智能分析:深度分析情绪周期和触发因素
  • 回顾图一句总结:导出回顾图时可选 Groq 生成底部温柔一句;无 API Key 或网络/服务失败时使用本地兜底文案(调用 Groq 时需联网)

☁️ 数据同步

  • 离线优先:本地存储保护用户隐私
  • 云端备份:可选 Supabase 云端同步,数据安全无忧
  • 智能数据迁移:支持访客数据与登录用户数据无缝切换

🎨 设计亮点

  • 治愈系配色:粉绿渐变主题,温暖舒适
  • 天气主题图标:统一使用 Lucide 图标库,避免 emoji 兼容性问题
  • 心灵花园隐喻:将情绪管理转化为照料花园的过程
  • 正向激励:强调成长和治愈,而非问题和冲突
  • 流畅动画:React Native Reanimated 驱动的微交互
  • 响应式设计:适配各种屏幕尺寸

🚀 快速开始

克隆、yarn install、环境变量与提交前检查命令见上文 开发者快速上手

⚡ 一分钟体验

# 启动开发服务器(需先完成上文安装步骤)
yarn start

📱 四种体验方式

  1. 🍎 App Store(推荐用户) - 在 App Store 打开心晴MO(iPhone / iPad);也可在 App Store 内搜索 「心晴MO」
  2. 📲 Expo Go 预览 - 手机安装 Expo Go,扫描开发服务器二维码
  3. 📲 APK 下载 - 从 Releases 页面下载预编译 APK(需要先配置 EAS Build)
  4. 🌐 Web 版本 - 运行 yarn web 在浏览器中体验

🔒 安全性

本项目遵循严格的安全最佳实践:

  • ✅ 所有敏感信息使用 EAS Secrets 管理
  • .gitignore 配置完善,防止敏感文件泄露
  • ✅ 环境变量模板化(.env.example
  • ✅ 定期安全审计和依赖更新

详细信息请查看 SECURITY.md

配置与安全校验(脚本在 package.json 中注册)

yarn verify:env          # 环境变量与密钥泄露风险(见 scripts/verify-env-security.js)
yarn verify:all          # 聚合多项配置检查(图标、权限、EAS、隐私清单等)
yarn verify:governance   # 治理规则(与 CI push 到 master 一致)

具体检查项见各 scripts/verify-*.jsSECURITY.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

目录与 React Native / Expo 约定(摘要)

目录 说明
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(规范驱动开发工具)进行开发管理,确保代码质量和一致性。

什么是 OpenSpec?

OpenSpec 是一个规范驱动开发(Spec-driven Development,SDD)工具,通过在编写代码之前锁定意图,确保人类和 AI 在项目需求上达成一致,从而实现可预测和可审查的输出。

规范文档

所有规范文档位于 openspec/ 目录下:

开发工作流程

  1. 提案(Proposal) - 创建变更提案,描述所需的规范更新
  2. 审查(Review) - 与 AI 助手一起审查和完善提案
  3. 实施(Implementation) - 根据批准的规范实施任务
  4. 归档(Archive) - 将完成的变更归档,并更新规范文档

使用规范进行开发

  • 查看规范:在开始新功能开发前,先查看相关的规范文档
  • 修改规范:当需要添加新功能或修改现有功能时,先更新相应的规范文档
  • 代码审查:使用规范文档作为代码审查的标准
  • AI 协作:与 AI 工具协作时,引用规范文档确保理解和实现的一致性

详细说明请参考 OpenSpec 使用指南开发工作流文档

🔧 开发配置

开发环境设置

1. 安装依赖

yarn install

2. 配置 Supabase(可选,用于云端同步功能)

如果需要使用云端同步功能,需要配置 Supabase:

  1. 创建 Supabase 项目

    • 访问 Supabase 创建新项目
    • 获取项目 URL 和匿名密钥(anon key)
  2. 配置环境变量

    • 在项目根目录创建 .env 文件(如果不存在)
    • 添加以下配置:
    EXPO_PUBLIC_SUPABASE_URL=your_supabase_project_url
    EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
  3. 初始化数据库

    • 在 Supabase SQL Editor 中执行以下脚本(按顺序):
      • supabase/create_entries_table.sql - 创建 entries 表
      • supabase/rls_policies.sql - 配置行级安全策略
    • 可选:执行 supabase/diagnose_entries.sql 进行诊断

💡 提示:如果不配置 Supabase,应用仍可正常使用,但云端同步功能将不可用。所有数据将仅存储在本地。

3. 启动开发服务器

# 启动开发服务器
yarn start

# 运行在模拟器/真机
yarn ios        # iOS模拟器
yarn android    # Android模拟器
yarn web        # Web浏览器

# 代码检查
yarn lint

# 重置项目
yarn reset-project

📱 应用打包指南

🤖 Android应用打包

方法一:EAS云端构建(推荐)

优势: 无需本地Android开发环境,自动处理签名,支持多种设备配置

1. 安装EAS CLI

npm install -g eas-cli

2. 配置EAS项目

eas build:configure

3. 构建APK文件

# 构建测试版本(推荐首次使用)
eas build --platform android --profile preview

# 构建生产版本(用于发布)
eas build --platform android --profile production

4. 获取APK文件

构建完成后(约5-10分钟):

  • 📧 邮件通知 - 会收到构建完成的邮件,包含下载链接
  • 🌐 EAS控制台 - 访问 expo.dev 下载APK文件
  • 📱 二维码安装 - 构建结果中包含二维码,可直接扫码安装

🍎 iOS应用打包

EAS云端构建(推荐)

优势: 无需Mac电脑,无需Apple Developer账号(测试版)

# 构建测试版本
eas build --platform ios --profile preview

# 构建生产版本(需要Apple Developer账号)
eas build --platform ios --profile production

🐛 常见问题

开发相关问题

Q: 如何自定义主题色彩?

  • 修改 constants.ts 中的颜色配置
  • 修改 components/Insights.tsx 中的 COLORS 常量
  • 更新各组件中的样式定义

Q: 如何添加新的情绪类型?

  • types.tsMoodLevel 枚举中添加新类型
  • constants.tsMOOD_CONFIG 中添加新配置(包括 iconName 和 iconColor)
  • Record.tsxEntryCard.tsxgetMoodIcon 函数中添加新图标映射

Q: 如何修改园艺建议文案?

  • 修改 components/Insights.tsx 中的 TRIGGER_ADVICE 对象
  • 可以为新的触发器添加对应的建议文案

📋 版本历史

v1.1.0 (当前版本)

  • ✅ 天气主题图标系统(替代 emoji)
  • ✅ 心灵花园洞察页面(全新设计)
  • ✅ 优化的记录页面文案
  • ✅ 治愈进度环形图
  • ✅ 关系花盆可视化
  • ✅ 情绪触发洞察与园艺建议

v1.0.0

  • ✅ 基础情绪记录功能
  • ✅ 情绪气象站可视化
  • ✅ 数据洞察分析
  • ✅ 气话焚烧功能
  • ✅ Android/iOS应用打包

未来计划

  • 📊 更多数据分析维度
  • 🎨 主题定制系统
  • 🌍 多语言支持
  • 🔔 情绪提醒功能

🤝 贡献指南

我们欢迎所有形式的贡献!

如何贡献

  1. Fork项目 - 点击右上角Fork按钮
  2. 创建功能分支 - git checkout -b feature/amazing-feature
  3. 提交更改 - git commit -m 'Add amazing feature'
  4. 推送分支 - git push origin feature/amazing-feature
  5. 创建Pull Request - 提交PR并详细描述更改

开发规范

  • 使用TypeScript进行类型安全开发
  • 遵循ESLint代码规范
  • 添加必要的注释和文档
  • 确保所有功能正常工作后再提交
  • 保持代码风格一致

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件

📞 联系我们

  • 🐛 问题反馈:请在项目仓库中创建 Issue
  • 💬 讨论:欢迎在项目仓库中发起讨论
  • 支持:如果这个项目对你有帮助,请给个Star支持我们!

🌱 感谢使用心晴MO,愿你的心灵花园繁花似锦!

Made with ❤️ by Your Team

🔝 回到顶部

About

A healing-focused Mood Tracker & Mental Health App built with React Native & Expo.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors