Skip to content

做了一个 AI 菜谱推荐应用——Meal Planner

每天最让人头疼的问题不是做饭,而是「今天吃什么」。打开外卖 App 翻了十分钟,最后还是点了那家黄焖鸡。这个场景太熟悉了,所以我做了 Meal Planner——一个基于 AI 的智能菜谱推荐应用,帮你用 3 秒钟搞定今天吃什么。

在线体验:meal-planner.top 源码地址:github.com/boby4/Meal-Planner

三种推荐方式,覆盖不同场景

做这个应用的初衷很简单:不同时候,你需要的推荐方式不一样。

🎲 随机推荐——治好选择困难症

没有任何条件,点一下直接给你一道菜。就像掷骰子,但每次都能掷出一道能做的菜。不满意?点「换一道」,自动去重,不会反复推荐同一道。

🤖 AI 推荐——按你的条件来

这是核心功能。你可以告诉它:几个人吃、喜欢什么口味、有多少时间做、预算多少、是不是在减脂。AI 会根据这些条件综合推荐,而不是简单匹配关键词。比如你说「2 个人、30 分钟、清淡、预算 30 元」,它会推荐真正符合这些约束的菜谱,而不是把所有清淡的菜都丢给你。

🧊 冰箱食材——有什么做什么

打开冰箱看看还剩什么,输进去,它告诉你这些食材能做什么菜。这个功能特别适合周末清理冰箱的时候用,不用再对着食材发呆了。

技术选型:为什么选 Next.js 16 + React 19

这个项目我用了比较新的技术栈:

分类技术选型理由
框架Next.js 16 (App Router)SSR/SSG 支持好,对 SEO 友好
UIReact 19配合 Next.js 16,体验最新的 Server Components
样式TailwindCSS 4 + shadcn/ui开发速度快,组件质量高
动画Framer Motion声明式动画,写起来舒服
状态Zustand轻量,够用
请求TanStack Query缓存、重试、状态管理一步到位
表单React Hook Form + Zod类型安全的表单验证
AIDeepSeek API性价比高,中文能力强
数据HuggingFace 菜谱数据集开源的中国菜谱语料库

几个值得说的点:

Next.js 16 的 App Router 用起来确实和 Pages Router 不一样。Server Components 让我可以在服务端直接调用 AI 和数据源,不用暴露 API 密钥给前端。Layout 嵌套也让页面结构更清晰。

shadcn/ui 是真的好用。它不是一个 npm 包,而是把组件代码直接复制到你的项目里,你可以随意魔改。对于个人项目来说,省去了大量 UI 组件的搭建时间。

DeepSeek API 作为 AI 后端,性价比很高。中文理解能力不错,返回结构化 JSON 也比较稳定。菜谱推荐这种场景不需要太强的推理能力,DeepSeek 完全够用。

数据架构:菜谱从哪来

这个项目的数据流比较有意思:

  1. 菜谱列表:从 HuggingFace 的 XiaChuFang Recipe Corpus 数据集随机采样 1000 条菜谱(10 批 × 100 条),内存缓存 5 分钟。这样既保证了随机性,又不会频繁请求。
  2. 菜谱详情:优先从缓存里匹配,匹配不到的话由 DeepSeek 自动生成食材清单、步骤和小贴士。
  3. AI 推荐:用户输入条件后,DeepSeek 返回结构化 JSON,包含推荐的菜名和推荐理由。
用户请求 → 条件解析 → DeepSeek 推荐 → 匹配缓存详情
                                        ↓ 未匹配
                              DeepSeek 生成详情 → 返回

这种「在线数据 + AI 兜底」的模式,让应用既快又不会缺内容。

移动端优先

虽然是个 Web 应用,但我从一开始就按移动端优先来设计。毕竟「今天吃什么」这个问题,绝大多数时候是在手机上想起来的。

  • 响应式布局,手机端体验完整
  • 触控友好的大按钮
  • Framer Motion 做的转场动画,让页面切换更流畅
  • 预留了微信小程序的迁移方案(Next.js 的 API 路由可以直接复用)

后续计划

目前预留了一些功能的架构,但还没实现:

  • 收藏和浏览历史:记录你喜欢的菜谱
  • 一周菜单:规划一周的三餐
  • 买菜清单:根据菜单自动生成购物清单
  • AI 识图:拍一张冰箱照片,自动识别食材

这些功能不急着做,先把核心的推荐体验打磨好再说。

写在最后

做这个项目的驱动力很简单——自己用。每天晚上纠结吃什么的时候,打开自己做的应用摇一道,体验确实不错。而且用到了 Next.js 16 和 React 19 这些新技术,也算是一次技术实践。

如果你也在为「今天吃什么」发愁,欢迎试试。如果对项目代码感兴趣,也欢迎 Star 和提 Issue。