尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
A simple web app for a shared mess (about 10 members): daily meals, bazar (grocery) costs, deposits, bazar and washroom-cleaning duties, and bazar memo photos. It runs on Google Apps Script and keeps all data in your own Google Sheet — no server, no cost. • Two meals a day: ☀️ lunch and 🌙 dinner (guests count as extra meals) • Works well on phones; can also run on a nicer Vercel link A + balance means the member gets money back; − means they still have to pay. "Cash with manager" = total deposits − costs paid from the mess fund.查看完整 README ↗
A simple web app for a shared mess (about 10 members): daily meals, bazar (grocery) costs, deposits, bazar and washroom-cleaning duties, and bazar memo photos. It runs on Google Apps Script and keeps all data in your own Google Sheet — no server, no cost.
| What | Member | Manager | Admin |
|---|---|---|---|
| Ask for an account from the login page (anyone) | ✅ | ✅ | ✅ |
| Switch own meals on/off (one tap on Home) | ✅ | ✅ | ✅ |
| Upload a bazar memo photo | ✅ | ✅ | ✅ |
| Mark own duty as done | ✅ | ✅ | ✅ |
| See the monthly report, expenses and duties | ✅ | ✅ | ✅ |
| Enter / fix everyone's meals for any day | – | ✅ | ✅ |
| Add / edit expenses and deposits | – | ✅ | ✅ |
| Review memos (approve / reject) | – | ✅ | ✅ |
| Make bazar and cleaning rosters | – | ✅ | ✅ |
| Add members, approve account requests, set roles, reset passwords | – | – | ✅ |
| Settings (meal cut-off times etc.) | – | – | ✅ |
Meal rate = total bazar cost of the month ÷ total meals of the month
Meal cost = your meals × meal rate
Shared share = total shared costs (gas, maid, electricity...) ÷ number of members
Paid = cash deposits + bazar you paid from your own pocket
Balance = paid − (meal cost + shared share)
A + balance means the member gets money back; − means they still have to pay. "Cash with manager" = total deposits − costs paid from the mess fund.
Make a Google Sheet — open sheets.new and give it a name, e.g. Mess Accounts.
Paste the code — in the Sheet open Extensions → Apps Script. Delete everything in Code.gs, paste the whole of deploy/Code.gs (on GitHub: open it → Raw → Ctrl+A, Ctrl+C) and press Ctrl+S.
Deploy — Deploy → New deployment → ⚙️ Web app, set Execute as: Me and Who has access: Anyone, press Deploy and allow the permissions (if you see "Google hasn't verified this app": Advanced → Go to … (unsafe) → Allow — it is your own script).
Open the Web app URL and create the admin account. The sheets, the Drive folder for memo photos and the nightly auto-meal job are set up automatically.
Add members — either way works:
Give one person the Manager role. (To limit spam, at most 10 requests per hour and 20 waiting requests are accepted.)
⚠️ Create the admin account before sharing the link — until then, whoever opens it first can become admin. "Anyone" access is safe after that: nothing can be seen without logging in, and only you can open the Sheet.
Paste the new deploy/Code.gs, save, then Deploy → Manage deployments → ✏️ Edit → Version: New version → Deploy.
This keeps the same URL. Making a New deployment creates a new URL, and the old links (and the Vercel site) stop getting updates.
The page is served from Vercel, while all data still comes from your Google Sheet (through the Apps Script doPost API).
public/config.js — you can edit it directly on GitHub (✏️ icon). Only change the text between the quotes.vercel.json points Vercel to public/).If the Apps Script URL ever changes, just edit public/config.js again — Vercel redeploys by itself.
Members
Manager
Bazar (goes into the meal rate) or Shared (split equally).| Sheet | Contents |
|---|---|
Users | members, roles, password hashes (never plain passwords), default meals |
Meals | one row per member per day: lunch, dinner |
Expenses | bazar / shared, who paid (paidBy empty = mess fund) |
Deposits | money paid in |
Duties | bazar (bazar) and cleaning (clean) duties |
Memos | uploaded memos and their status (pending/approved/rejected) |
Settings | mess name, meal cut-off times, max meals per slot |
Do not change the header row or the column order. Memo photos are kept in the Drive folder
Mess Memo Images; they are not shared publicly — the app shows them itself.
deploy/Code.gs ⭐ the whole app in one file — paste this into Apps Script
public/index.html the same app for Vercel (generated), loads public/config.js
public/config.js the Apps Script Web App URL used by the Vercel site (edit by hand)
public/logo.png browser-tab / home-screen icon (also used by Apps Script via GitHub raw URL)
assets/ logo: original photo and square crops
vercel.json tells Vercel to serve public/
tools/build.js builds deploy/Code.gs and public/index.html from apps-script/
apps-script/ source files
Code.gs doGet/doPost, API router, optional setup()
Db.gs Google Sheet helpers, settings, dates
Auth.gs login, tokens, passwords, members
Meals.gs meals, cut-off times, nightly auto-meal job
Finance.gs expenses, deposits, memos and photos (Drive)
Duties.gs bazar and cleaning duties, rosters
Report.gs monthly report and home dashboard
Index.html page structure
Logo.html the logo as an embedded image (data URI, from assets/logo-192.jpg)
Styles.html design (mobile + dark mode)
JsCore.html API calls, login, navigation, sharing logins
JsPages.html Home, My meals, Memos, Duties, Report, Profile
JsManage.html Meal entry, Expenses, Deposits, Memo review, Members, Settings
appsscript.json manifest (only needed when using clasp)
After changing anything in apps-script/, run:
node tools/build.js
Using clasp instead of copy-paste: create .clasp.json with { "scriptId": "<SCRIPT_ID>", "rootDir": "apps-script" }, then clasp login and clasp push.