Give your agent a wallet you control.
Let your agents pay online using one-time-use cards or with machine payment protocols. You approve every request.
Paste the group chat of a benefit dinner and see money against the goal, plates per pickup time, and who still owes. No sign-up, runs in the browser.
FinanceTypeScript · CSSGitHub @kasbsquallOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
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.
Taken from the repository README
Loading the full README.
Read the full 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.