一个基于 AI 的个性化饮食推荐应用,帮助用户快速解决"吃什么"的日常困扰。
- 🤖 智能推荐:基于用户偏好和历史行为的个性化推荐
- 🎯 情境感知:根据用餐时间、心情、预算等因素调整推荐
- 📱 响应式设计:完美适配手机、平板和桌面设备
- 🔐 安全登录:支持 Google 和 GitHub OAuth 登录
- 📊 学习优化:根据用户反馈持续优化推荐算法
- Node.js 18.0 或更高版本
- PostgreSQL 数据库(推荐使用 Supabase)
- npm 或 yarn 包管理器
- 克隆项目
git clone <your-repo-url>
cd what-to-eat-mvp- 安装依赖
npm install- 配置环境变量
cp .env.example .env.local编辑 .env.local 文件,填入以下配置:
# 数据库配置
DATABASE_URL="your-postgresql-database-url"
# NextAuth.js 配置
NEXTAUTH_SECRET="your-secret-key"
NEXTAUTH_URL="http://localhost:3000"
# OAuth 配置(至少配置一个)
GOOGLE_CLIENT_ID="your-google-client-id"
GOOGLE_CLIENT_SECRET="your-google-client-secret"
GITHUB_ID="your-github-client-id"
GITHUB_SECRET="your-github-client-secret"- 初始化数据库
# 生成 Prisma 客户端
npm run db:generate
# 推送数据库结构
npm run db:push
# 导入示例数据
npm run db:seed- 启动开发服务器
npm run dev访问 http://localhost:3000 查看应用。
- 访问 Supabase 创建免费账户
- 创建新项目
- 在项目设置中找到数据库连接字符串
- 将连接字符串添加到
.env.local的DATABASE_URL
确保你的 PostgreSQL 数据库可访问,并将连接字符串配置到 DATABASE_URL。
- 访问 Google Cloud Console
- 创建新项目或选择现有项目
- 启用 Google+ API
- 创建 OAuth 2.0 客户端 ID
- 添加授权重定向 URI:
http://localhost:3000/api/auth/callback/google - 将客户端 ID 和密钥添加到环境变量
- 访问 GitHub Settings > Developer settings > OAuth Apps
- 创建新的 OAuth App
- 设置 Authorization callback URL:
http://localhost:3000/api/auth/callback/github - 将 Client ID 和 Client Secret 添加到环境变量
# 生成随机密钥
openssl rand -base64 32将生成的密钥设置为 NEXTAUTH_SECRET。
- 准备部署
# 确保代码已提交到 Git 仓库
git add .
git commit -m "Ready for deployment"
git push- 连接 Vercel
- 访问 Vercel
- 导入你的 Git 仓库
- Vercel 会自动检测 Next.js 项目
- 配置环境变量 在 Vercel 项目设置中添加以下环境变量:
DATABASE_URLNEXTAUTH_SECRETNEXTAUTH_URL(设置为你的域名)GOOGLE_CLIENT_ID和GOOGLE_CLIENT_SECRETGITHUB_ID和GITHUB_SECRET
- 更新 OAuth 回调 URL 将生产环境的回调 URL 添加到 OAuth 应用配置中:
- Google:
https://your-domain.vercel.app/api/auth/callback/google - GitHub:
https://your-domain.vercel.app/api/auth/callback/github
- 部署 Vercel 会自动构建和部署你的应用。
- 连接 Git 仓库
- 设置构建命令:
npm run build - 设置发布目录:
.next - 配置环境变量
- 连接 Git 仓库
- Railway 会自动检测并部署
- 配置环境变量
- 可选:添加 PostgreSQL 数据库服务
what-to-eat-mvp/
├── app/ # Next.js App Router
│ ├── api/ # API 路由
│ ├── globals.css # 全局样式
│ ├── layout.tsx # 根布局
│ ├── page.tsx # 首页
│ └── providers.tsx # 全局提供者
├── components/ # React 组件
│ └── ui/ # UI 组件库
├── hooks/ # 自定义 Hooks
├── lib/ # 工具库
│ ├── auth.ts # 认证配置
│ ├── prisma.ts # 数据库客户端
│ ├── recommendation.ts # 推荐算法
│ └── utils.ts # 工具函数
├── prisma/ # 数据库配置
│ ├── schema.prisma # 数据库模式
│ └── seed.ts # 种子数据
├── PRD/ # 产品需求文档
└── public/ # 静态资源
# 开发
npm run dev # 启动开发服务器
npm run build # 构建生产版本
npm run start # 启动生产服务器
# 数据库
npm run db:generate # 生成 Prisma 客户端
npm run db:push # 推送数据库结构
npm run db:seed # 导入种子数据
npm run db:studio # 打开 Prisma Studio
# 代码质量
npm run lint # 代码检查
npm run type-check # 类型检查编辑 prisma/seed.ts 文件,添加新的菜品数据:
{
name: '菜品名称',
cuisineType: 'chinese', // 菜系类型
description: '菜品描述',
avgPrice: 30, // 平均价格
preparationTime: 15, // 准备时间(分钟)
spiceLevel: 3, // 辣度等级 1-5
healthScore: 4, // 健康分数 1-5
tags: ['标签1', '标签2'] // 菜品标签
}然后运行:
npm run db:seed编辑 lib/recommendation.ts 文件中的 calculateScore 方法来调整推荐权重。
- 全局样式:编辑
app/globals.css - 组件样式:使用 Tailwind CSS 类名
- 主题色彩:修改
tailwind.config.js中的颜色配置
推荐集成 Sentry 进行错误监控:
npm install @sentry/nextjs可以集成 Google Analytics 或其他分析工具来跟踪用户行为。
- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
A: 检查 DATABASE_URL 是否正确,确保数据库服务正在运行。
A: 确认 OAuth 应用的回调 URL 配置正确,客户端 ID 和密钥无误。
A: 运行 npm run db:seed 确保数据库中有示例数据。
A: 运行 npm run type-check 检查 TypeScript 错误,确保所有依赖已正确安装。
如果你遇到问题或有建议,请:
- 查看 Issues 中是否有类似问题
- 创建新的 Issue 描述你的问题
- 提供详细的错误信息和复现步骤
享受美食,享受生活! 🍽️