尚未偵測到更新。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.