外卖与预制菜解决了效率问题,却带来高油高盐、食材不透明、长期成本偏高等问题,越来越多家庭重新回到厨房。家庭用餐是高频场景,“今天吃什么、做几个菜、怎么搭配”几乎每天都要决策。但现有工具存在明显断层。下厨房、小红书等内容平台菜谱丰富,产品形态却偏向内容社区:篇幅长、步骤多、种草属性强,用户刷了很久仍难定下一桌菜;美团、饿了么解决的是外卖履约,不解决在家做菜。从“想做饭”到“定菜单”之间,缺少一个轻量、聚焦决策的工具。家庭餐桌还有明显的组合特征:不是单道菜,而是几荤几素、有没有汤、要不要甜品的搭配问题,同 时要兼顾人数、口味与烹饪总时长。按单菜组织的菜谱产品,天然不适合这种组合式决策。
使用环境也决定了产品形态。用户多在厨房、菜市场、通勤路上用手机操作,不愿下载App、注册账号,打开即用、免登录的移动端 Web 更贴合真实路径。技术侧,Vue3、NestJS、TypeScript 全栈同构,配合 SQLite零配置文件数据库,使完整闭环可以在低成本环境下快速落地。
据此,本项目定位为面向家庭场景的轻量级“点菜 +配餐”工具:不追求菜谱数量,而是帮助用户在一次会话内快速定下一桌菜。
产品围绕“选菜—配餐—定菜单—复用”主线,包含 6 个页面、9 项能力。
首页:家庭厨房氛围图与 4个快捷入口,今日推荐横滑展示,支持“换一批”随机刷新,卡片可直接进详情或加入菜单。
菜单浏览:左侧 6 大分类(热菜·荤、热菜·素、凉菜、汤羹、主食、甜品),右侧菜品卡片流,展示图片、难度、耗时、标签,一键加入菜单并实时同步状态,“管理”入口支持新增菜品。
智能点菜:提供简单吃(1 荤 1 素)、两人食(2 荤 1 素 1 汤)、丰盛点(3 荤 2 素 1 汤 1甜品)、自由选四种套餐。每个分类实时显示“已选/上限”,选满自动限制,把“配几个菜”变成可视化进度。
智能推荐:勾选分类并设置 1—5道菜,系统随机抽取组合成一桌,支持一键全部加入菜单与重新推荐。
菜谱详情:大图、分类、难度、耗时、标签、食材与用量、分步步骤、小贴士;支持收藏、加入菜单、全字段编辑与删除。
已选菜单:按分类分组,统计菜品总数、分类覆盖数与预计总用时,支持单个移除、一键清空、保存为历史菜单。
历史菜单:记录名称、时间与菜品快照,支持查看详情、一键还原、删除;原菜品被修改或删除后仍可完整展示。
菜品管理:新增/编辑名称、分类、难度、耗时、描述、标签、食材、用量、步骤、小贴士与图片;图片支持 URL 或本地上传(5MB 内、常见格式),删除时同步清理关联菜单与收藏。
游客身份:首次访问生成设备 ID 存入localStorage,菜单、收藏、历史菜单按设备隔离,无需注册,刷新与重启均不丢失。
整体采用前后端分离架构:浏览器端为 Vue 3 渲染函数组件 + Tailwind,经 axios 统一携带x-device-id 调用 /api;NestJS 接收请求,Controller 校验参数、Service 承载业务、DrizzleORM 访问 SQLite。开发态由 Vite 代理 /api 到 3000 端口,生产态同源部署。
技术栈:前端 Vue 3 + TypeScript + Tailwind v4 + Vite,React 仅作 ErrorBoundary 外壳;后端NestJS 10 + Drizzle ORM + better-sqlite3,开启 WAL 与外键约束。
关键实现有六点。
其一,接口契约先行:请求/响应类型集中在 shared/api.interface.ts,前后端共同引用,字段变更两端同时报错。
其二,数据模型:dish、cart_item、favorite、guest_user、saved_menu、saved_menu_item 六张表;菜单与收藏按 (device_id,dish_id) 建唯一索引,配合 onConflictDoNothing 实现幂等;历史菜单明细存菜品快照,原菜品删除后仍可读。
其三,游客隔离:设备 ID由前端生成并写入请求头,后端所有查询带 device_id条件,零注册实现多用户隔离。
其四,配餐算法:套餐规则声明为 { 分类: 上限},选菜时实时比对驱动进度与禁用态;智能推荐对候选菜品洗牌后按数量切片,保证随机不重复。
其五,图片上传:multer 落盘 data/uploads,UUID 重命名、扩展名白名单、5MB限制、读取时路径校验防穿越。
其六,统一错误处理:Controller 校验入参,Service try/catch记录日志后 rethrow,全局过滤器输出 { error
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!

下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论