Give your agent a wallet you control.
에이전트가 일회용 카드나 기계 결제 프로토콜로 온라인 결제하고, 모든 요청을 직접 승인
자선 만찬 단톡을 붙이면 목표 대비 금액, 수령 시간별 접시, 아직 낼 사람을 보여 준다
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.
금융TypeScript · CSSGitHub @kasbsquall온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.