Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Talk to Telegram, get paid with PayPal: voice-to-invoice assistant for freelancers on Cloudflare Workers, Workers AI and PayPal Invoicing.
翻訳待ち
Loading the full README.
Read the full README ↗Cobra is a Telegram assistant that bills your clients and chases payments for you, with PayPal. Send it a voice note like:
“Bill Marta Garcia, [email protected], 350 dollars for the logo design, due in 15 days.”
Cobra transcribes it, understands who, how much, what for and when, and shows you the invoice. Tap ✅ Send with PayPal and your client gets a real PayPal invoice by email, payable with PayPal or card. From there Cobra works on its own:
Nothing is ever sent to a client without your tap.
Freelancers lose unpaid hours writing invoices and chasing late payments, and most of them run their business from a phone and a chat app, not from accounting software. Cobra puts PayPal invoicing where they already are, and turns the boring part into a 10-second voice note.
example.com address, or your own, as the client's email.Telegram ──webhook──▶ Cloudflare Worker (src/worker.js)
├─ Workers AI · Whisper large v3 turbo: voice → text
├─ Workers AI · Llama 3.3 70B: text → intent + invoice JSON, corrections, reminder notes
├─ D1 (SQLite): users, client book, drafts, invoices, processed events
├─ PayPal REST (src/paypal.js)
│ OAuth2 client credentials
│ Invoicing v2: create (idempotent), send, show, remind, generate QR code
│ Webhooks: register + verify-webhook-signature
├─ /paypal/webhook ◀── INVOICING.INVOICE.PAID / CANCELLED / REFUNDED
├─ /tick ◀── clock Worker: overdue alerts, missed-webhook check
└─ /app ── Telegram Mini App with AG Grid Community
Safety and reliability details:
PayPal-Request-Id per draft, and a draft that was created but not sent is reused on retry.verify-webhook-signature against our webhook id, and deduplicated by event id.initData signature, so you only ever see your own invoices.Requirements: Node 22+, a Cloudflare account (free plan works), a PayPal developer account (free sandbox), a Telegram bot from @BotFather.
npm test # unit + conversation tests, no network
npx wrangler d1 create cobra-bot # put the id in wrangler.toml
npx wrangler d1 migrations apply cobra-bot --remote
npx wrangler secret put BOT_TOKEN # from @BotFather
npx wrangler secret put WEBHOOK_SECRET # any long random string
npx wrangler secret put PAYPAL_CLIENT_ID # developer.paypal.com → Apps & Credentials (Sandbox)
npx wrangler secret put PAYPAL_CLIENT_SECRET
npx wrangler deploy
Then open https://<your-worker>/setup?secret=<WEBHOOK_SECRET> once. It registers the Telegram webhook, the command menu and the PayPal webhook, and prints the PayPal webhook id. Save it:
npx wrangler secret put PAYPAL_WEBHOOK_ID
PAYPAL_ENV in wrangler.toml switches between sandbox and live.
| File | What |
|---|---|
src/worker.js | HTTP routes: Telegram webhook, PayPal webhook, setup |
src/bot.js | Conversation: drafts, sending, alerts, reminders, QR, totals, settings |
src/paypal.js | PayPal REST client (OAuth2, Invoicing v2, webhooks) |
src/miniapp.js, src/webapp.js | Mini App page, Telegram signature check, CSV |
src/ai.js | Whisper + Llama prompts and output validation |
src/db.js | D1 queries |
src/render.js | All texts (EN/ES) and formatting |
migrations/ | D1 schema |
test/ | node --test suite with a SQLite D1 shim and fake PayPal/Telegram |
MIT