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.
You can contact @CobraInvoice_bot right away.
Translation pending
FinanceJavaScriptGitHub @5wt6fw45nt-designOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
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