Skip to content

marovole/HearthBulter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

377 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Health Butler Logo

🩺 Health Butler(健康管家)

基于健康数据与电商库存的动态饮食引擎

Live Demo

CI/CD Status Cloudflare Pages Next.js React TypeScript Neon MIT License

核心特性技术架构部署状态快速开始项目结构开发指南


💡 让个人与家庭的健康管理从「主观感性」走向「客观数据驱动」

Health Butler 是一个开源的家庭健康管理平台,通过 AI 营养规划、智能食谱生成和电商自动采购,帮助家庭建立可持续的健康管理习惯。项目采用 Cloudflare Pages + Neon PostgreSQL 的 Serverless 架构,实现完全免费部署。


📊 部署状态

环境 状态 URL 说明
生产环境 ✅ 运行中 hearthbulter.pages.dev 主站点,自动从 main 分支部署
预览环境 ✅ 可用 *.hearthbulter.pages.dev 每个 PR 自动生成预览链接
数据库 ✅ 在线 Neon Serverless PostgreSQL 72 张数据表,0.5GB 免费配额
CI/CD ✅ 激活 GitHub Actions 7 个 Job 自动化流水线

CI/CD 流水线

Push to main → 代码质量检查 → TypeScript 类型检查 → 单元测试 → 构建检查 → 安全审计 → 自动部署
Job 说明 超时
quality-check ESLint + Prettier 格式检查 10min
type-check TypeScript 类型检查 10min
test Jest 单元测试 + 覆盖率报告 15min
build Next.js 产物构建 20min
cloudflare-build Cloudflare Pages 构建测试 25min
security npm audit 安全审计 10min
final-check 最终状态汇总 -

✨ 核心特性

👨‍👩‍👧‍👦 家庭档案管理

  • 多成员档案: 支持家庭成员独立健康档案(性别、年龄、身高、体重、健康目标)
  • 健康目标设定: 减重/增肌/维持/疾病管理等个性化目标
  • 过敏与禁忌: 食材过敏记录,智能避开不适宜食材
  • 家庭邀请系统: 安全的邀请链接机制,家人协同管理健康

🧬 健康数据追踪

  • 全面健康指标: 体重、体脂、血压、血糖、心率、睡眠等数据记录
  • 体检报告 OCR: Tesseract.js 智能识别体检报告,自动提取关键指标
  • 可穿戴设备同步: Apple HealthKit、华为健康 SDK 数据自动同步
  • 健康评分系统: 基于多维度指标计算综合健康评分
  • 异常检测: AI 智能识别健康数据异常波动

🍎 营养数据库

  • USDA 数据对接: 5000+ 食物营养成分数据库
  • 宏量营养素: 精确计算碳水、蛋白质、脂肪及热量
  • 微量营养素: 维生素、矿物质摄入追踪
  • 食物搜索: 智能搜索与自定义食物添加

🍱 智能食谱规划

  • AI 食谱生成: 基于健康目标、库存食材、家庭偏好智能生成食谱
  • 周期食谱计划: 支持 7 天/30 天食谱自动规划
  • 食谱管理: 食谱收藏、评分、评论功能
  • 膳食追踪: 每日餐饮记录,营养摄入实时追踪
  • 智能替代: 根据库存自动推荐食材替代方案

🛒 智能购物系统

  • 一键生成清单: 根据食谱计划和库存自动生成购物清单
  • SKU 智能匹配: 自动匹配电商平台商品编码
  • 价格对比: 多平台价格比较,优选采购方案
  • 预算管理: 购物预算设定与支出追踪
  • 去重优化: 智能合并相同食材需求

📦 库存管理系统

  • 食材库存追踪: 实时记录家庭食材库存
  • 保质期提醒: 临期食材预警,减少浪费
  • 消耗记录: 食材使用历史追踪
  • 浪费日志: 记录食材浪费情况,优化采购决策

📊 数据分析与报告

  • 健康趋势分析: 可视化体重、体脂、营养摄入变化趋势
  • 营养分析报告: 详细营养摄入报告,识别营养缺口
  • 周报生成: 自动生成每周健康总结报告
  • 成本分析: 食品采购成本分析与优化建议

🤖 AI 智能服务

  • AI 健康顾问: 智能对话,解答健康与营养问题
  • 个性化推荐: 基于健康数据与偏好智能推荐食谱和食材
  • AI 食谱优化: 根据营养目标自动调整食谱配比
  • 健康洞察: AI 分析健康数据,提供个性化改善建议

🏆 社交与激励

  • 成就系统: 健康里程碑徽章,激励持续管理
  • 排行榜: 家庭成员健康数据对比与排名
  • 成果分享: 健康成就社交分享(可配置隐私)
  • 社区互动: 健康心得分享与交流

🔔 智能通知系统

  • 多渠道通知: 应用内推送、邮件通知
  • 个性化设置: 按类型、按时间精细化通知偏好
  • 重要提醒: 食材过期、服药提醒、健康目标提醒

📱 设备同步

  • Apple Health: iOS 设备健康数据无缝同步
  • 华为健康: Android 设备健康数据集成
  • 数据去重: 智能合并多源数据,避免重复记录

🏗️ 技术架构

系统架构图

┌─────────────────────────────────────────────────────────────────────┐
│                       用户浏览器 / 移动设备                            │
└─────────────────────────────────┬───────────────────────────────────┘
                                  │ HTTPS (TLS 1.3)
                                  ▼
┌─────────────────────────────────────────────────────────────────────┐
│                   Cloudflare 全球边缘网络 (300+ PoPs)                  │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │            Cloudflare Pages (静态托管 + Functions)            │   │
│  │  ┌─────────────────┐  ┌─────────────────────────────────┐   │   │
│  │  │  Static Assets  │  │  Edge Functions (API Routes)   │   │   │
│  │  │  HTML/CSS/JS    │  │  - 认证授权                      │   │   │
│  │  │  全球 CDN 缓存   │  │  - API 处理                      │   │   │
│  │  │  自动 Brotli    │  │  - 边缘计算                      │   │   │
│  │  └─────────────────┘  └─────────────────────────────────┘   │   │
│  └─────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────┬───────────────────────────────────┘
                                  │
          ┌───────────────────────┼───────────────────────┐
          ▼                       ▼                       ▼
┌──────────────────┐   ┌──────────────────┐   ┌──────────────────┐
│  Neon Database   │   │  Upstash Redis   │   │  第三方 API 服务  │
│                  │   │                  │   │                  │
│ ┌──────────────┐ │   │ ┌──────────────┐ │   │ • OpenRouter AI │
│ │ PostgreSQL   │ │   │ │ Session/Cache │ │   │ • USDA FoodData │
│ │ (72 张数据表) │ │   │ │ Rate Limit   │ │   │ • Tesseract OCR │
│ │ Serverless   │ │   │ └──────────────┘ │   │ • Clerk Auth    │
│ │ 自动扩展     │ │   └──────────────────┘   │ • Instacart API │
│ └──────────────┘ │                          └──────────────────┘
└──────────────────┘

技术栈详情

🎨 前端技术

技术 版本 用途
Next.js 14.2.32 React 框架 + 静态导出
React 18.3.1 UI 渲染库
TypeScript 5.6+ 类型安全
Tailwind CSS 3.4.18 原子化 CSS
shadcn/ui Latest Radix UI 组件库
Zustand 5.0.0 轻量状态管理
React Hook Form 7.53.0 表单处理
Zod 3.23.8 Schema 验证
Framer Motion 12.23.24 高级动画系统
Recharts 3.3.0 数据可视化
date-fns 4.1.0 日期处理
lucide-react 0.460.0 图标库
embla-carousel 8.6.0 轮播组件
react-day-picker 9.11.1 日历选择器
sonner 2.0.7 Toast 通知
next-themes 0.4.6 主题切换

⚙️ 后端技术

技术 版本 用途
Cloudflare Functions Latest Serverless API
Prisma 6.19.0 ORM + 类型生成
Clerk 6.36.8 认证授权
Neon 1.0.2 Serverless PG
PostgreSQL 16 关系型数据库
Upstash Redis 1.35.6 边缘缓存
OpenAI SDK 6.7.0 AI 服务 SDK
Tesseract.js 6.0.1 OCR 识别
Jose 6.1.3 JWT 处理
Nodemailer 7.0.11 邮件服务
sharp 0.34.4 图片处理
qrcode 1.5.3 二维码生成
html2canvas 1.4.1 截图生成

🔌 外部 API 服务

服务 用途 环境变量
OpenRouter AI 服务(主要) OPENROUTER_API_KEY
OpenAI AI 服务(备用) OPENAI_API_KEY
USDA FoodData Central 营养数据库 USDA_API_KEY
Instacart Connect 美国市场电商集成 INSTACART_CLIENT_ID/SECRET
Clerk 用户认证 CLERK_SECRET_KEY
Upstash Redis 边缘缓存 UPSTASH_REDIS_REST_URL/TOKEN
Sentry 错误监控 SENTRY_DSN
SMTP 邮件发送 SMTP_HOST/USER/PASS

📦 业务服务模块 (117+ 文件)

分类 文件数 核心服务
AI 服务 11 openai-client, health-analyzer, recipe-optimizer
分析服务 4 analytics-service, cache-stats-service
预算服务 7 budget-tracker, cost-analyzer, spending-report
电商服务 12 instacart-adapter, hema-adapter, ingredient-matcher
通知服务 9 email-service, notification-manager, template-engine
推荐服务 6 recipe-recommender, food-recommender
社交服务 10 achievement-service, leaderboard-service
追踪服务 8 health-tracker, meal-tracker, weight-tracker
调度服务 6 scheduler, smart-trigger, cron-jobs
其他服务 44 meal-planner, sku-matcher, report-generator

数据库架构

项目使用 72 张 PostgreSQL 数据表,按功能域组织:

功能域 表数量 核心表
用户和认证 5 users, families, family_members, family_invitations, user_consents
健康数据 15 health_data, health_goals, health_reports, health_scores, health_anomalies
营养和食谱 20 foods, meals, meal_plans, meal_logs, recipes, daily_nutrition_targets
购物和预算 11 shopping_lists, shopping_items, budgets, price_histories, instacart_carts
库存管理 4 inventory_items, inventory_usages, waste_logs, orders
协作和社区 12 tasks, activities, community_posts, achievements, leaderboard_entries
通知系统 4 notifications, notification_preferences, notification_logs
AI 和分析 4 ai_conversations, ai_advice, prompt_templates, smart_trigger_logs

🎯 项目状态

模块开发进度

模块 状态 完成度 说明
🔐 认证授权 🟢 已完成 100% NextAuth.js + JWT + OAuth (多提供商)
👨‍👩‍👧‍👦 家庭档案管理 🟢 已完成 100% 成员信息、健康目标、过敏史、邀请系统
📊 健康数据管理 🟢 已完成 100% 体重/血压/血糖等指标 + 趋势可视化
🤖 AI 健康顾问 🟢 已完成 100% 智能对话 + 营养建议 + 健康洞察
🍎 营养数据库 🟢 已完成 90% USDA 食物数据对接 + 自定义食物管理
🍱 食谱规划引擎 🟢 已完成 85% AI 生成 + 周期计划 + 收藏评分
🛒 购物清单生成 🟢 已完成 80% 智能提取 + SKU 匹配 + 价格对比
📦 库存管理 🟢 已完成 80% 库存追踪 + 保质期提醒 + 消耗记录
🔔 通知系统 🟢 已完成 90% 多渠道推送 + 个性化偏好
📱 可穿戴设备同步 🟢 已完成 75% Apple HealthKit + 华为健康 SDK
📊 数据分析与报告 🟢 已完成 70% 健康趋势 + 营养分析 + 周报生成
📄 体检报告 OCR 🟢 已完成 70% Tesseract.js 识别 + 指标提取
🛍️ 电商集成 🟡 进行中 60% SKU 匹配 + 价格估算 + 电商服务
🏆 社交与激励 🟢 已完成 75% 成就徽章 + 排行榜 + 成果分享
📈 推荐系统 🟢 已完成 70% 个性化食谱 + 购物推荐 + 智能替代
📊 预算管理 🟢 已完成 70% 预算设定 + 支出追踪 + 成本分析

图例: 🟢 已完成 (80-100%) | 🟡 进行中 (20-79%) | 🔴 未开始 (0-19%)

代码统计

指标 数量 说明
API 端点 198+ 完整的后端 API 覆盖
服务模块 117+ 核心业务逻辑服务
数据表 72 PostgreSQL 数据库表
Schema 代码 2522 行 Prisma 数据模型定义
React 组件 180+ UI 组件 + 业务组件
代码模块 260+ 工具函数与库模块

💰 成本分析

本项目采用完全免费的 Serverless 架构部署:

服务 免费额度 我们的用量 状态
Cloudflare Pages 无限请求 / 500 次构建/月 ~50 次构建/月 ✅ 免费
Cloudflare Functions 100,000 请求/天 ~1,000 请求/天 ✅ 免费
Neon PostgreSQL 0.5GB storage, 191h/月 ~50MB ✅ 免费
Clerk Auth 10,000 MAU ~100 用户 ✅ 免费
GitHub Actions 2,000 分钟/月 ~200 分钟/月 ✅ 免费
Upstash Redis 10,000 请求/天 ~500 请求/天 ✅ 免费

预计月成本: $0 (完全在免费额度内)


🚀 快速开始

前置要求

  • Node.js 20.0+ LTS
  • pnpm 8.0+ (推荐) 或 npm
  • PostgreSQL 16+ (或使用 Neon)

安装步骤

# 1. 克隆仓库
git clone https://github.com/marovole/HearthBulter.git
cd HearthBulter

# 2. 安装依赖
pnpm install

# 3. 配置环境变量
cp .env.example .env.local
# 编辑 .env.local,填入必要的配置

# 4. 生成 Prisma Client
pnpm db:generate

# 5. 启动开发服务器
pnpm dev

访问 http://localhost:3000 查看应用。

环境变量配置

📋 点击展开完整环境变量列表
# ========== 必需配置 ==========

# 数据库连接 (Neon Serverless PostgreSQL)
DATABASE_URL=postgresql://user:pass@ep-xxx.us-east-1.aws.neon.tech/neondb?sslmode=require

# Clerk 认证配置
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_xxx
CLERK_SECRET_KEY=sk_test_xxx

# ========== 可选配置 ==========

# USDA 营养数据 API
USDA_API_KEY=your-usda-api-key

# Redis 缓存 (Upstash, 可选)
UPSTASH_REDIS_REST_URL=https://[ref].upstash.io
UPSTASH_REDIS_REST_TOKEN=your-redis-token

# Redis (可选,本地或自建)
REDIS_URL=redis://localhost:6379

# Web Push (可选)
NEXT_PUBLIC_VAPID_PUBLIC_KEY=your-vapid-public-key

# OAuth 登录 (通过 Clerk 配置)
# GOOGLE_CLIENT_ID 和 GOOGLE_CLIENT_SECRET 在 Clerk Dashboard 配置

# AI 服务 (OpenAI / OpenRouter)
OPENAI_API_KEY=your-openai-api-key
OPENROUTER_API_KEY=your-openrouter-api-key

# 日志级别 (可选)
LOG_LEVEL=info

# 错误追踪 (Sentry)
SENTRY_DSN=your-sentry-dsn

Upstash Redis 未配置时,缓存会降级为内存或跳过;如需自建 Redis,请配置 REDIS_URL。


📂 项目结构

HearthBulter/
├── .github/
│   └── workflows/          # GitHub Actions CI/CD
│       ├── ci.yml          # 主 CI 流水线
│       └── code-review.yml # 代码审查
├── prisma/
│   ├── schema.prisma       # 数据库 Schema (72 张表, 2522 行)
│   ├── seed.ts             # 种子数据脚本
│   └── migrations/         # 数据库迁移
├── public/                 # 静态资源
├── scripts/                # 构建和部署脚本 (100+ 脚本)
├── src/
│   ├── app/                # Next.js App Router
│   │   ├── (auth)/         # 认证页面
│   │   ├── api/            # API Routes
│   │   ├── dashboard/      # 仪表盘
│   │   ├── health-data/    # 健康数据
│   │   ├── meal-planning/  # 餐饮规划
│   │   ├── onboarding/     # 用户引导
│   │   └── shopping-list/  # 购物清单
│   ├── components/         # React 组件 (180+ 组件)
│   │   ├── ui/             # shadcn/ui 基础组件
│   │   └── features/       # 业务功能组件
│   ├── hooks/              # 自定义 Hooks
│   ├── lib/                # 核心库 (260+ 模块)
│   │   ├── db/             # Prisma Client
│   │   ├── services/       # 业务逻辑服务 (117+ 文件)
│   │   └── utils/          # 工具函数
│   ├── schemas/            # Zod 验证 Schema
│   ├── services/           # 服务层
│   └── types/              # TypeScript 类型定义
├── supabase/               # Supabase 配置
├── tests/                  # 测试文件
│   ├── unit/               # 单元测试
│   └── e2e/                # E2E 测试
├── functions/              # Cloudflare Functions
├── middleware.ts           # Next.js 中间件
├── next.config.js          # Next.js 配置
├── tailwind.config.ts      # Tailwind 配置
├── wrangler.toml           # Cloudflare Wrangler 配置
└── package.json            # 项目依赖 (70+ 包)

🧪 开发指南

常用命令

# 开发
pnpm dev              # 启动开发服务器
pnpm build            # 构建生产版本
pnpm start            # 启动生产服务器

# 代码质量
pnpm lint             # ESLint 检查
pnpm lint:fix         # ESLint 自动修复
pnpm format           # Prettier 格式化
pnpm type-check       # TypeScript 类型检查

# 测试
pnpm test             # 运行单元测试
pnpm test:watch       # Watch 模式
pnpm test:coverage    # 生成覆盖率报告
pnpm test:e2e         # E2E 测试

# 数据库
pnpm db:generate      # 生成 Prisma Client
pnpm db:push          # 推送 Schema 变更
pnpm db:migrate       # 运行迁移
pnpm db:studio        # 打开 Prisma Studio

# 部署
pnpm build:cloudflare # Cloudflare Pages 构建
pnpm deploy:cloudflare # 部署到 Cloudflare

代码审查

项目集成了自动化代码审查系统:

审查维度:

  • 🔍 复杂度分析: 检测函数圈复杂度
  • 🛡️ 类型安全: 检查 TypeScript 类型覆盖
  • 🔒 安全扫描: SQL 注入、XSS 等漏洞检测
  • 🎨 代码风格: 统一命名规范
  • 性能优化: 识别潜在性能问题
pnpm review           # 运行代码审查
pnpm review:report    # 生成审查报告

提交规范

遵循 Conventional Commits 规范:

feat: 添加新功能
fix: 修复 bug
docs: 文档更新
style: 代码格式(不影响功能)
refactor: 重构(不是新功能也不是 bug 修复)
perf: 性能优化
test: 添加测试
chore: 构建过程或辅助工具变动

📋 变更管理 (OpenSpec)

本项目采用 规范驱动开发 (Spec-Driven Development) 流程,所有重大变更通过 OpenSpec 提案管理。

活跃提案

提案 优先级 状态 预计工作量
add-instacart-smart-ordering P0 🟡 待实施 4 周
cleanup-prisma-residue P2 🟡 待处理 2-3 天

🇺🇸 美国市场功能规划 (add-instacart-smart-ordering)

核心价值: AI 主动规划 → 一键购物

智能时机触发 → AI 生成周计划 → 邮件通知 → 用户对话调整 → 跳转 Instacart 下单

功能模块:

模块 描述 状态
Instacart API 集成 OAuth 授权、购物车 API、商品搜索 🔴 待开发
智能时机触发引擎 日历事件 + 消费周期 + 库存状态 + 行为习惯 🔴 待开发
周计划邮件通知 智能时机触发后发送周计划摘要 🔴 待开发
全局悬浮 AI 助手 任意页面可呼出的对话式计划调整 🔴 待开发
食材→商品匹配 菜谱食材映射到 Instacart 商品 🔴 待开发

技术决策:

  • 单一平台深度集成 (Instacart Connect API)
  • 跳转平台结算 (非应用内支付)
  • MVP 先用样品数据验证流程

详见 完整提案 | 技术设计 | 任务清单

最近完成的提案

提案 完成日期 核心变更
update-product-readiness 2026-01-27 补齐预算分析、食谱收藏、报告导出等功能
migrate-auth-data-to-clerk-convex 2026-01-27 认证系统迁移到 Clerk + Convex
refactor-database-layer-to-supabase 2026-01-18 数据库层从 Prisma 迁移到 Supabase
migrate-to-cloudflare-pages 2025-11-10 从 Vercel 迁移到 Cloudflare Pages

架构演进历史

查看完整的 42 个已归档提案 了解项目架构演进路径。

关键里程碑

  • 2025-10-30: MVP 核心功能开发(家庭档案、健康数据、食谱规划等 20 个提案)
  • 2025-11-02: 代码质量提升(自动化审查、测试覆盖率等 9 个提案)
  • 2025-11-10: 部署平台迁移(Vercel → Cloudflare Pages)
  • 2026-01-18: 数据库重构(Prisma → Supabase)
  • 2026-01-27: 认证系统现代化(NextAuth → Clerk + Convex)

如何创建提案

参考 OpenSpec 指南 了解如何创建和管理变更提案。


🛣️ Roadmap

MVP 阶段 ✅ (已完成)

  • 项目初始化 + 架构设计
  • Cloudflare Pages + Neon 部署
  • 用户认证 (邮箱 + Google + GitHub OAuth)
  • 家庭档案管理 + 邀请系统
  • 健康数据录入与可视化
  • 营养数据库对接 (USDA)
  • AI 食谱生成引擎
  • 购物清单生成 + SKU 匹配
  • 库存管理系统
  • AI 健康顾问对话
  • 体检报告 OCR 识别
  • 可穿戴设备数据同步 (Apple HealthKit + 华为健康)

阶段 2 (进行中)

  • 🇺🇸 美国市场智能购物 (Instacart 集成 + 智能时机触发)
  • 电商 API 深度集成(山姆/盒马/叮咚买菜)
  • 高级营养分析报告
  • 家庭健康趋势预测
  • 食谱分享社区
  • 多人协作食谱编辑

阶段 3 (规划中)

  • 医疗机构合作(体检中心 API)
  • 商业化(订阅制 + 电商返佣)
  • 智能家居设备集成
  • 微信小程序

阶段 4 (愿景)

  • 企业健康管理解决方案
  • 营养师在线咨询服务
  • 跨境电商食品采购

🤝 贡献指南

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

贡献流程

  1. Fork 本仓库
  2. 创建功能分支 (git checkout -b feature/amazing-feature)
  3. 提交变更 (git commit -m 'feat: add amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 创建 Pull Request

开发规范

  • 🔍 所有 PR 必须通过 CI 检查
  • 📝 核心功能需要编写单元测试(覆盖率 >80%)
  • 📖 重要功能需要更新文档
  • 💬 使用中文或英文提交 Issue

📄 许可证

本项目采用 MIT License 开源协议。


👨‍💻 作者

Ronn Huang - GitHub


🙏 致谢

感谢以下开源项目和服务:


⭐ 如果这个项目对你有帮助,请给我们一个 Star!

Made with ❤️ in China

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors