七夏 发表于 2026-7-7 13:25:35

可一键部署到 NAS 的家庭点菜系统,让一家人轮流做饭、点菜、互相打分

家里有两个经久不衰的难题:今天谁做饭,以及吃什么。

回答这两个问题的过程,常常比做饭本身还累。商量半天,要么没人接话,要么最后又是同一个人进了厨房。

GitHub 上有个叫「干饭厨子」(GanCook)的开源项目,把这套流程搬到了 NAS 上——让一家人轮流做饭、点菜、打分,全程自动流转,所有数据存储在本地 NAS 上,不依赖任何云服务。



干饭厨子的核心逻辑可以拆成三步:

第一步:自动开局。 你可以像设闹钟一样添加规则——比如「每天午餐 12:00,前一晚 20:00 自动开,提前两小时截止点菜」。到时间系统自动创建饭局,不用人盯着。

第二步:点菜和认领。 饭局开了以后,家人各自勾选想吃的菜。谁今天掌勺,点一下「我来做这顿」就算认领了,责任归属清楚。

第三步:吃完饭打分。 饭后互相评价,这个分数会汇入贡献墙。

贡献墙是一个 GitHub 风格的热力图,用绿格子记录每个人做饭和点菜的活跃度。月底扫一眼,谁在默默下厨一目了然。

作者在 README 里写道:「今天谁做饭?」「吃啥?」——干饭厨子把这两个每天都要吵一遍的问题,变成一件温馨小事。
部署就一条命令docker run -d --name gancook \
-p 3000:3000 \
-v ./data:/data \
--restart unless-stopped \
gloridust/gancook:latest
打开 http://<NAS-IP>:3000,第一个注册的人自动成为管理员。不用配环境变量,不用单独搭数据库,密钥和会话签名首启时自动生成并存到 data 目录里。

也支持 docker compose,飞牛、群晖等 NAS 可以直接在 Docker 管理界面搜 gloridust/gancook 创建容器。

备份:把映射出来的 data 目录复制一份就行,里面是 SQLite 数据库和上传的图片。恢复时放回原位置,重新启动容器即可。

几个用心的细节

选头像登录。 家里的平板通常多人共用,打字登录很麻烦。干饭厨子的做法是:注册时上传头像,之后登录只需在列表里点头像再输 6 位密码,对老人和小孩都友好。

图片自动压缩。 头像和菜品照片上传时用 sharp 压缩转 WebP 格式,限制在 2MB 以内,直接落盘而不是塞进数据库里。加载快,数据库体积也小。

网页端一键更新。 管理员在「家庭管理 → 关于与更新」可以看到当前版本,点击按钮自动拉新镜像并重建容器。前提是挂载了 Docker 套接字;没挂载或权限不够时会自动降级为显示手动更新命令。

PWA 支持。 可以从浏览器添加到手机主屏,体验接近原生应用,但不需要走应用商店分发。

技术栈

GanCook 基于 Next.js 16(App Router + Server Actions),React 19 + TypeScript。数据库用 SQLite 搭配 Drizzle ORM(better-sqlite3)。鉴权用 bcrypt 加 jose 签名的 JWT,存在 httpOnly Cookie 里。

定时调度由进程内的 node-cron 处理,通过 Next.js 的 instrumentation.ts 启动钩子拉起。样式是 TailwindCSS v4 加自建的「牛奶布艺」设计系统,动效用了 Framer Motion,移动端优先。

整个项目只有一个容器,没有外部数据库,没有云服务依赖。

项目地址:https://github.com/Gloridust/GanCook

SYS宇晖 发表于 2026-7-7 13:34:31

这个思路真不错,比在群里吵架强多了。不知道实际用起来,打分机制会不会引发新的家庭矛盾?有人试过能坚持多久吗?
[这只是一个小尾巴]

SanS三石 发表于 2026-7-7 13:54:43

这个系统思路挺有意思,把做饭轮值自动化了。不过家人之间打分,会不会演变成“差评大战”啊?我家要是分数太低的人下次直接罢工怎么办。想问问实际用过的,这种公开评分对家庭和谐是促进还是反效果?
[论坛助手]

拾叁兄弟 发表于 2026-7-7 14:35:31

这个看起来很实用

SanS三石 发表于 2026-7-8 06:35:00

这个可以 到时候抄走
页: [1]
查看完整版本: 可一键部署到 NAS 的家庭点菜系统,让一家人轮流做饭、点菜、互相打分