婴儿追踪应用

Finnberry是一款开源的婴儿追踪应用,支持睡眠、喂养、尿布更换等多种活动记录,并集成了AI聊天界面和MCP协议。

  • by bckenstler
  • TypeScript
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 bckenstler/finnberry

使用说明

芬伯里

一个集成了MCP(模型上下文协议)的开源婴儿跟踪应用程序。

特性

  • 睡眠跟踪:基于定时器的午睡和夜间睡眠跟踪,并提供质量评级
  • 喂食追踪:母乳喂养,每侧持续时间跟踪和侧切换,奶瓶(含量)和固体
  • 尿布追踪:湿的、脏的或两者都有,颜色/稠度/数量可选
  • 泵送跟踪:基于定时器的泵送会话,具有左/右量
  • 增长跟踪:重量、身高和头围,采用英制/公制支撑
  • 温度跟踪:体温记录,包括C/F转换和发烧状态
  • 活动跟踪:沐浴、腹部时间、户外游戏、屏幕时间等,支持计时器
  • 药物追踪:使用定制药物记录药物剂量并跟踪剂量
  • 多护理人员支持:与家人和护理人员共享访问权限
  • 实时同步:更改在所有设备上立即同步
  • 多个报表视图:活动历史记录的日视图、周视图和列表视图
  • 视觉时间轴:每日活动时间表,直观地表示所有活动类型
  • 活动编辑:使用持续时间滑块和详细控件编辑记录的活动
  • AI聊天界面:用于记录和查询婴儿数据的自然语言交互
  • MCP集成:用于记录和分析婴儿数据的AI代理集成

技术栈

  • 框架:Next.js 15(应用路由器)
  • 语言:TypeScript
  • API:tRPC v11
  • 数据库:Supabase(PostgreSQL)
  • 对象关系映射:Prisma
  • 实时:Supabase实时
  • 认证:NextAuth.js v5
  • 样式:顺风CSS 4+shadcn/ui
  • 主控程序:@modelcontextprotocol/sdk
  • 状态状态:
  • 单体仓库:Turborepo

项目结构

finnberry/
├── apps/
│   ├── web/                 # Next.js webapp
│   └── mcp-server/          # MCP Server
├── packages/
│   ├── db/                  # Prisma schema + client
│   ├── api/                 # tRPC routers
│   ├── schemas/             # Shared Zod schemas
│   └── utils/               # Shared utilities
└── turbo.json

部署到 Vercel

部署Finnberry最简单的方法是使用Vercel:

手动Vercel设置

  1. 将您的存储库导入 Vercel仪表板
  2. 集 根目录 到 apps/web
  3. 配置所需的环境变量(请参阅 环境变量)
  4. 部署

API超时(Vercel计划)

AI聊天功能使用流式响应。默认超时为60秒(专业版)。对于Hobby(免费)计划,编辑 apps/web/src/app/api/chat/route.ts 和改变 maxDuration 到 10.

计划 最长持续时间
爱好(免费) 10秒
Pro 60秒
企业版 900秒

入门指南

对于当地发展:

先决条件

  • Node.js 20+
  • pnpm 9+
  • Supabase项目(或本地PostgreSQL)

安装

  1. 克隆存储库:

    git clone https://github.com/yourusername/finnberry.git
    cd finnberry
    
  2. 安装依赖项:

    pnpm install
    
  3. 设置环境变量:

    cp apps/web/.env.example apps/web/.env
    
  4. 配置您的 apps/web/.env 文件(参见 环境变量 在......下面

  5. 生成Prisma客户端并推送架构:

    pnpm db:generate
    pnpm db:push
    
  6. 启动开发服务器:

    pnpm dev
    

该应用程序将在 http://localhost:3000.

环境变量

必需

变量 描述
DATABASE_URL Supabase PostgreSQL池器连接字符串
DIRECT_URL PostgreSQL直接连接(用于迁移)
AUTH_SECRET NextAuth secret-使用生成 openssl rand -base64 32

可选的

变量 描述
NEXTAUTH_URL 应用程序URL-生产所需,在开发中自动检测
GOOGLE_CLIENT_ID 谷歌OAuth客户端ID
GOOGLE_CLIENT_SECRET Google OAuth客户端密钥
NEXT_PUBLIC_SUPABASE_URL Supabase项目URL(实时)
NEXT_PUBLIC_SUPABASE_ANON_KEY Supabase匿名密钥(实时)
SUPABASE_SERVICE_ROLE_KEY Supabase服务角色密钥(服务器端访问)
EMAIL_SERVER 魔术链接电子邮件的SMTP连接字符串
EMAIL_FROM 魔术链接的发件人电子邮件地址
ANTHROPIC_API_KEY 人工智能聊天功能的Anthropic API密钥

邮件配置

对于魔术链接身份验证,请配置 EMAIL_SERVER 使用您的SMTP提供商:

# Resend
EMAIL_SERVER="smtps://resend:re_YOUR_API_KEY@smtp.resend.com:465"

# Gmail (requires app password)
EMAIL_SERVER="smtps://you@gmail.com:app-password@smtp.gmail.com:465"

Supabase设置

  1. 在以下位置创建新项目 网站 supabase.com

  2. 从项目设置中获取连接字符串→ 数据库:

    • 连接字符串(池器) → DATABASE_URL
    • 连接字符串(直接) → DIRECT_URL
  3. 从项目设置获取API密钥→ API:

    • 项目网址 → NEXT_PUBLIC_SUPABASE_URL
    • 匿名公开 → NEXT_PUBLIC_SUPABASE_ANON_KEY
    • service_role → SUPABASE_SERVICE_ROLE_KEY
  4. 为表启用实时(可选,用于实时同步):

    • 转到数据库→ 复制
    • 为以下对象启用复制: sleep_records, feeding_records, diaper_records, pumping_records, growth_records, activity_records, temperature_records, medicine_records

数据库命令

命令 用例
pnpm db:push 开发-快速模式同步,无需迁移文件
pnpm db:migrate 生产-创建迁移历史
pnpm db:generate 架构更改后重新生成Prisma客户端
pnpm db:studio 打开Prisma Studio浏览数据

从其他设备访问

发展模式

发展中(NODE_ENV=development),为了方便起见,该应用程序会自动从请求标头中检测主机:

  • 本地主机:工作地点 http://localhost:3000
  • 局域网接入:工作地点 http://<your-local-ip>:3000 (例如,通过手机)
  • 测试服务器:工作地点 http://<server-ip>:3000

Magic links将自动使用您访问应用程序的正确URL。

生产/自托管部署

重要:在制作或接触互联网时,你 必须 集 NEXTAUTH_URL 明确地在你的 .env 安全文件:

# For a home server on your LAN
NEXTAUTH_URL="http://192.168.1.100:3000"

# For a cloud server (EC2, DigitalOcean, etc.)
NEXTAUTH_URL="http://your-server-ip:3000"

# For production with a domain
NEXTAUTH_URL="https://finnberry.yourdomain.com"

这可以防止主机头注入攻击。

网络接入

对于远程服务器(例如EC2):

  • 打开安全组/防火墙中的端口3000
  • 集 NEXTAUTH_URL 到服务器的公共IP或域
  • 考虑使用带有SSL的反向代理(nginx/caddy)进行面向互联网的部署

安全最佳实践:

  • 在生产环境中使用HTTPS(通过Let's Encrypt的反向代理)
  • 没有适当的安全措施,不要将应用程序直接暴露在互联网上
  • 为数据库和 NEXTAUTH_SECRET
  • 保持依赖关系更新

AI聊天界面

仪表板包括一个聊天选项卡,允许与您的婴儿跟踪数据进行自然语言交互。

特性

  • 自然语言日志:说“给婴儿换一块湿尿布”或“给婴儿打个盹”
  • 查询数据:问“宝宝今天做了什么?”或“宝宝本周睡了多久?”
  • 流媒体响应:通过工具执行可视化实时流式传输AI响应
  • 模型选择:在俳句(快速)、十四行诗(平衡)或Opus(最有能力)之间进行选择

设置

  1. 从获取Anthropic API密钥 console.anthropic.com
  2. 添加到您的 .env 文件:
    ANTHROPIC_API_KEY=sk-ant-...
    
  3. 聊天选项卡将出现在仪表板上的主页和报告旁边

交互示例

  • “把尿布弄湿”
  • “开始跟踪睡眠”
  • “记录一瓶4盎司的配方奶粉”
  • “上次喂食是什么时候?”
  • “给我总结一下今天的活动”

MCP 服务器

MCP服务器允许AI代理(如克劳德)与您的婴儿跟踪数据进行交互。

可用工具

工具 说明
start-sleep 启动睡眠定时器
end-sleep 结束主动睡眠会话
log-sleep 记录已完成的睡眠
get-sleep-summary 获取睡眠统计数据
log-breastfeeding 记录母乳喂养会话
log-bottle 原木奶瓶喂养
log-solids 原木固体食物
get-feeding-summary 获取喂养统计数据
log-diaper 记录尿布更换
get-diaper-summary 获取尿布统计数据
list-children 列出所有孩子
get-daily-summary 获取一天的所有活动

可用资源

URI 描述
finnberry://children 列出所有孩子
finnberry://children/{id} 儿童档案
finnberry://children/{id}/today 今天的活动
finnberry://children/{id}/sleep?period=week 睡眠记录
finnberry://children/{id}/feeding?period=week 喂食记录

可用提示

提示 描述
analyze-sleep-patterns 获取有关睡眠模式的人工智能见解
daily-summary 生成适合家长的每日摘要

与Claude Desktop一起使用

添加到您的Claude桌面配置(claude_desktop_config.json):

{
  "mcpServers": {
    "finnberry": {
      "command": "node",
      "args": ["/path/to/finnberry/apps/mcp-server/dist/index.js"],
      "env": {
        "DATABASE_URL": "your-database-url"
      }
    }
  }
}

首先构建MCP服务器:

cd apps/mcp-server
pnpm build

脚本

脚本 描述
pnpm dev 启动开发服务器
pnpm build 构建所有包
pnpm lint 跑linting
pnpm type-check 运行TypeScript检查
pnpm db:generate 生成Prisma客户端
pnpm db:push 将架构推送到数据库
pnpm db:migrate 运行数据库迁移

测试

pnpm test           # Run all tests (Vitest)
pnpm test:e2e       # Run Playwright E2E tests (requires dev server)
pnpm test:coverage  # Run tests with coverage report

看 CLAUDE.md 获取详细的测试文档。

许可证

麻省理工学院