尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证The night-of ledger for a benefit dinner: paste the group chat, see money against the goal, plates per pickup slot and who still owes.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗When a family sells plates to cover a hospital bill, the orders arrive as group-chat messages, and on the night one relative scrolls back and adds it all up by hand. Supper Ledger reads the pasted chat and shows money collected against the goal, plates to cook for each pickup time, and who still owes.
Live app: https://kasbsquall.github.io/supper-ledger/ Demo video (1:38): https://youtu.be/NBPla7nmcQ8
No sign-up and no account. Everything stays in the browser on the organizer's phone, and AI is there only when the organizer asks for it.
The relative who ends up running the dinner: one person, often not technical, keeping track of a few hundred plates sold by many relatives at once, with payments spread across Venmo, Zelle, Cash App and cash. It fits any dinner sold by the plate with pickup times: spaghetti dinners, church fish fries, bake sales for a medical bill, and the Peruvian pollada pro-fondos that inspired it.
Grandpa Joe 2 plates @ 7, zelled $30, and add it. He lands in the 7:00 pm slot, paid in full.Grandma Rose wants a couple of plates, she'll venmo you $30 tonight, then press Ask AI about this line. No key needed. The AI suggests Grandma Rose 2 plates: she has not paid yet, so she lands as owing $30, and it only counts when you press Add.The reader is rule-based (src/ledger/parse.ts), so it works offline and gives the same answer every time. It reads lines like these:
Aunt Linda 5 tickets, sent 2 on Venmo
Marcus 3 plates, pickup 6pm, will cash at the door
Deb & Gary Shaw paid $60 on Zelle
Grandpa Joe 2 plates @ 7, zelled $30
Tía Rosa 4 platos, yapeó 2
Don Lucho 3 polladas, paga al recoger a la 1
A number after "sent" or "paid" counts plates; an amount with $ or S/ counts money. Pickup times snap to the nearest slot, and a line already added is skipped, so pasting overlapping chat is safe.
A line it can't read is shown back to the organizer, word for word, and the ledger is left alone:
This part is optional. For the lines left in "Not read", the organizer can ask AI. Only those lines go to Anthropic, through a small relay that holds the API key, so nobody has to bring their own. The relay keeps none of the lines. The model rewrites each line into a form the rule-based reader already knows; the reader still decides what it means, and nothing counts until the organizer presses Add. It keeps a promise apart from a payment: "she'll venmo you $30 tonight" reads as 2 plates still owed, while "she just venmoed you $30" reads as paid. A line like "who's bringing napkins?" comes back as "Not an order or a payment".
The code is in src/ledger/ai.ts (model claude-opus-5-5 at low effort with structured JSON output) and the relay in relay/worker.ts, a Cloudflare Worker. The relay builds the prompt itself, so a caller can only ask about chat lines. It answers only the live site, takes 1 to 10 lines of up to 300 characters, allows 6 calls a minute and 30 a day per address and 100 a day in total, and stops for the month once the answers add up to US$15, measured from the token usage the API reports with each answer (one reading costs about a third of a cent). It logs nothing; it keeps only a daily count under a hashed address, which expires after two days, and the month's running cost.
The names and debts never leave the device. With the network switched off after the page loads, pasted lines still land, and the only network activity is the app asking for its own sound files. The one exception is the optional AI reading above, which sends only the not-read lines, and only when the organizer asks.
Requires Node 20.19 or newer.
npm install
npm run dev
Open the address it prints and add /supper-ledger/ if it isn't there. Other commands:
npm test
npm run build
npm test runs 39 numbered tests that map to the acceptance criteria in devpost/prd.md.
This project was built with the Devpost Build With AI: Basics learning pack. The planning documents are kept in devpost/:
scope.md: the kernel and what was cutprd.md: the journey, behaviors and acceptance criteriaspec.md: stack, data model and file structurechecklist.md: build slices, final review and the revisions the build forcedapp-map.html: a short guide to where things live in the codeVite, React and TypeScript, tested with Vitest. Optional AI reading with the Anthropic Messages API, through a Cloudflare Worker built with Rolldown. Icons: Phosphor (MIT). Animated figures: Number Flow (MIT). Font: Commissioner (SIL Open Font License). Sounds: Kenney Interface Sounds (CC0, see public/sfx/LICENSE-kenney.txt).
MIT, see LICENSE.