[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-93025":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":11,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":9,"pushedAt":9,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":14,"starSnapshotCount":14,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},93025,"GanCook","Gloridust\u002FGanCook","Gloridust","干饭厨子｜飞牛Nas 上可部署的家庭点菜系统",null,"TypeScript",51,4,3,0,42.1,"MIT License",false,"main",true,[],"2026-07-22 04:02:07","\u003Cdiv align=\"center\">\n\n\u003Cimg src=\"public\u002Flogo.webp\" width=\"96\" height=\"96\" alt=\"干饭厨子\" \u002F>\n\n# 🍳 干饭厨子 · GanCook\n\n**可一键部署到 NAS 的家庭点菜系统 —— 让一家人轮流做饭、点菜、互相打分。**\n\n[![Docker](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker-一键部署-2496ED?logo=docker&logoColor=white)](#-快速开始)\n[![Next.js](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNext.js-16-black?logo=next.js)](https:\u002F\u002Fnextjs.org\u002F)\n[![SQLite](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSQLite-单文件-003B57?logo=sqlite&logoColor=white)](https:\u002F\u002Fwww.sqlite.org\u002F)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-green)](LICENSE)\n[![Telegram](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTelegram-讨论组-26A5E4?logo=telegram&logoColor=white)](https:\u002F\u002Ft.me\u002FGanCookProj)\n\n中文 · [English](README.en.md)\n\n💬 交流 \u002F 反馈 \u002F 许愿 → Telegram 讨论组 [@GanCookProj](https:\u002F\u002Ft.me\u002FGanCookProj)\n\n\u003C\u002Fdiv>\n\n---\n\n> 「今天谁做饭？」「吃啥？」——干饭厨子把这两个每天都要吵一遍的问题，变成一件温馨小事。\n>\n> 前一天晚上自动开好明天的饭局，家人各自点菜，谁掌勺谁认领，吃完打个分；\n> 月底还能在**贡献墙**上看看这个月是谁在默默下厨。专为家庭设计，**不依赖任何云服务**，数据全在你自己的 NAS 上。\n\n## ✨ 特性\n\n- 🚀 **真·开箱即用** —— 一条 `docker run` 跑起来，**无需配置任何环境变量**，密钥首启自动生成并持久化。\n- 🗄️ **单容器 + SQLite** —— 没有外部数据库、没有云依赖，备份只需复制一个 `data` 目录。\n- 👨‍👩‍👧 **一账号多角色** —— 注册不分身份，人人都能做饭、点菜；做饭人按「每一餐」认领（「我来做这顿」）。\n- 👆 **选头像登录** —— 共享设备上无需打字，点自己的头像再输 6 位密码即可（像选用户头像）。\n- ⏰ **自动饭局（像设闹钟）** —— 在后台**自由增删多条规则**：餐次、时间、提前多久开、提前多久截止、生效星期都可自定义。到点自动开局、截止自动进入做饭、用餐后自动完成。\n- 🌱 **贡献墙** —— GitHub 风格热力图，谁做饭最勤、谁最会点菜，绿格子一目了然。\n- 🖼️ **图片不拖后腿** —— 头像\u002F菜品上传自动裁剪压缩（≤2MB）转 WebP 落盘（告别 base64 进库），加载飞快。\n- 🥛 **牛奶布艺 UI** —— 柔和拟物 + 青菜绿，移动端优先，可作为 PWA 添加到主屏。\n- 🌍 **中英双语** —— 登录页与「我的 · 设置」一键切换。\n- 🔄 **升级无痛** —— 拉新镜像即可，数据库自动迁移，登录态不丢；管理员还能在网页端**一键更新**（需挂载 Docker 套接字，否则降级为手动指引）。\n\n## 📸 预览\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd align=\"center\" width=\"33%\">\n      \u003Cimg src=\"doc\u002Fimg\u002Flogin.webp\" alt=\"选头像登录\" \u002F>\u003Cbr\u002F>\n      \u003Cb>👆 选头像登录\u003C\u002Fb>\u003Cbr\u002F>\u003Csub>共享设备免打字，点头像 + 6 位密码\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"33%\">\n      \u003Cimg src=\"doc\u002Fimg\u002Fhome.webp\" alt=\"临近的饭局\" \u002F>\u003Cbr\u002F>\n      \u003Cb>🏠 临近的饭局\u003C\u002Fb>\u003Cbr\u002F>\u003Csub>这几天吃什么、谁掌勺，一目了然\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"33%\">\n      \u003Cimg src=\"doc\u002Fimg\u002Fmeal.webp\" alt=\"点菜 + 认领做饭\" \u002F>\u003Cbr\u002F>\n      \u003Cb>🍽️ 点菜 · 认领做饭\u003C\u002Fb>\u003Cbr\u002F>\u003Csub>勾选想吃的，「我来做这顿」\u003C\u002Fsub>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd align=\"center\" width=\"33%\">\n      \u003Cimg src=\"doc\u002Fimg\u002Freview.webp\" alt=\"谁点了什么 + 餐后打分\" \u002F>\u003Cbr\u002F>\n      \u003Cb>⭐ 大家点了什么 · 打分\u003C\u002Fb>\u003Cbr\u002F>\u003Csub>谁点了什么，吃完互相评价\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"33%\">\n      \u003Cimg src=\"doc\u002Fimg\u002Fwall.webp\" alt=\"贡献墙\" \u002F>\u003Cbr\u002F>\n      \u003Cb>🌱 贡献墙\u003C\u002Fb>\u003Cbr\u002F>\u003Csub>谁在为这个家默默下厨，绿格子见证\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"33%\">\n      \u003Cimg src=\"doc\u002Fimg\u002Fadmin.webp\" alt=\"自动饭局规则\" \u002F>\u003Cbr\u002F>\n      \u003Cb>⏰ 自动饭局（像设闹钟）\u003C\u002Fb>\u003Cbr\u002F>\u003Csub>到点自动开局、截止、流转\u003C\u002Fsub>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n> 一条线把这些串起来：**前一晚自动开好明天的饭局 → 家人各自点菜 → 谁做饭点一下「我来做这顿」 → 吃完打个分 → 月底贡献墙上看看谁最辛苦**。\n\n## 🚀 快速开始\n\n镜像地址（任选其一）：\n\n- 🐳 **Docker Hub（国内飞牛等 NAS 有加速，推荐）**：`gloridust\u002Fgancook:latest`\n- 📦 GHCR（海外）：`ghcr.io\u002Fgloridust\u002Fgancook:latest`\n\n### 方式一：docker run（最简单）\n\n```bash\ndocker run -d --name gancook \\\n  -p 3000:3000 \\\n  -v .\u002Fdata:\u002Fdata \\\n  --restart unless-stopped \\\n  gloridust\u002Fgancook:latest\n```\n\n打开 `http:\u002F\u002F\u003C你的NAS地址>:3000`，第一个注册的人即成为管理员。完事。\n\n### 方式二：docker compose（推荐，便于升级）\n\n```bash\ncurl -O https:\u002F\u002Fraw.githubusercontent.com\u002FGloridust\u002FGanCook\u002Fmain\u002Fdocker-compose.yml\ndocker compose up -d\n```\n\n> 飞牛 \u002F 群晖等 NAS 也可以直接在「Docker \u002F Container Manager」里搜索镜像 `gloridust\u002Fgancook` 创建容器：\n> 端口映射 `3000`，把容器内 `\u002Fdata` 映射到一个你方便备份的目录即可。\n\n无需设置任何环境变量。如需自定义，可选：\n\n| 变量 | 默认 | 说明 |\n|------|------|------|\n| `TZ` | `Asia\u002FShanghai` | 时区，影响自动饭局时间 |\n| `AUTH_SECRET` | 自动生成 | 会话签名密钥（留空自动生成并存到 `data\u002Fauth.secret`） |\n| `CRON_SECRET` | 自动生成 | 定时触发端点密钥 |\n| `COOKIE_SECURE` | 自动 | 会话 Cookie 是否强制 Secure；默认按请求协议判断，HTTPS 反代识别异常时可设为 `1` |\n\n## 📖 入门指南（5 分钟上手）\n\n1. **部署并打开** —— 用上面任一方式启动，浏览器访问 `http:\u002F\u002F\u003CNAS>:3000`。\n2. **建立家庭** —— 首次进入是引导页：填家庭名 + 你的昵称 + 6 位密码，你成为**管理员**。\n3. **家人加入** —— 家人各自打开同一地址 →「注册」，填昵称 + 6 位密码即可。之后登录只需在列表里**点自己的头像**再输密码。\n   （管理员可在「我的 → 家庭管理」里设置**注册口令**或关闭注册。）\n4. **添加菜品** —— 进「菜品」把全家拿手菜加进来（可拍照，自动压缩）。\n5. **开一顿饭局** —— 首页或「饭局」点「开饭局」，选餐次\u002F时间\u002F截止；家人进去勾选想吃的，谁做饭点「我来做这顿」。\n6. **设置自动饭局** —— 「我的 → 家庭管理 → 自动饭局」像设闹钟一样添加规则：\n   例如「每日午餐 12:00、前一天 20:00 自动开、提前 2 小时截止」。以后每天自动开局、自动流转。\n7. **看贡献墙** —— 「贡献」页用绿格子记录每个人做饭\u002F点菜的活跃度。\n8. **切换语言** —— 登录页或「我的 → 语言」可在中文 \u002F English 间切换。\n\n> 想换语言或备份？语言在「我的」里随时切；备份只要复制 `data` 目录。\n\n## 🔄 升级到新版本\n\n```bash\ndocker compose pull && docker compose up -d\n# docker run 方式：docker pull gloridust\u002Fgancook:latest 后重新创建容器\n```\n\n数据与密钥都在 `data` 卷里，升级时数据库会**自动迁移**，登录态保持不变。\n想全自动更新可搭配 [Watchtower](https:\u002F\u002Fcontainrrr.dev\u002Fwatchtower\u002F)。\n\n**网页端一键更新（可选）**：在「家庭管理 → 关于与更新」可查看版本、点按钮自动拉新镜像并重建容器。\n需要让容器能访问 Docker：在 `docker-compose.yml` 里挂载 `\u002Fvar\u002Frun\u002Fdocker.sock` 并以可访问该套接字的用户运行（见 compose 注释）。\n未挂载或权限不足时会自动降级为显示手动更新命令，不影响使用。\n\n## 💾 备份\n\n整个应用的状态只在一个地方：你映射出来的 **`data` 目录**（包含 `app.db` 与 `uploads\u002F`）。\n定时复制这个目录即是完整备份；恢复时放回去再启动即可。\n\n## 🛠️ 本地开发\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FGloridust\u002FGanCook.git\ncd GanCook\nnpm install\ncp .env.example .env.local   # 本地可按需修改\nnpm run db:migrate           # 初始化 SQLite\nnpm run dev                  # http:\u002F\u002Flocalhost:3000\n```\n\n## 🧱 技术栈\n\n- **Next.js 16**（App Router · Server Actions）+ React 19 + TypeScript\n- **SQLite** + **Drizzle ORM**（`better-sqlite3`）\n- **鉴权**：bcrypt + `jose` 签名 JWT + httpOnly Cookie\n- **图片**：`sharp` 压缩转 WebP 落盘\n- **调度**：进程内 `node-cron`（启动钩子 `instrumentation.ts` 拉起）\n- **样式**：TailwindCSS v4 + 自建「牛奶布艺」设计系统 + Framer Motion\n\n## 🗺️ 路线图\n\n- [x] 中英双语（已上线）\n- [ ] 多人协作做饭 \u002F 帮买菜清单\n- [ ] 菜品标签筛选与搜索\n- [ ] 消息提醒（开局 \u002F 截止前推送）\n- [ ] 数据导出与一键备份\n\n欢迎在 Issues 里许愿 🙌\n\n## 🤝 贡献\n\n欢迎 Issue \u002F PR！开发约定见 [CONTRIBUTING.md](CONTRIBUTING.md)。\n\n## 📄 License\n\n[MIT](LICENSE) · Made with ❤️ for family dinners\n","干饭厨子（GanCook）是一款专为家庭设计的本地化点菜协作系统，可一键部署在飞牛等NAS设备上，实现家人轮流做饭、点菜、餐后评分与贡献统计。核心功能包括基于Docker+SQLite的免配置部署、头像式快捷登录、多规则自动饭局调度（如每日晚餐自动开启）、可视化贡献热力图及轻量级PWA支持。所有数据完全本地存储，不依赖云服务，适合多成员家庭日常饮食协作与家务分担场景。",2,"2026-07-11 02:30:42","CREATED_QUERY"]