Open Net Worth
Open Net Worth는 직접 운영하는 오픈소스 개인 AI 자산 비서로, 전체 재무를 하나의 원장에 기록하고 사용자가 제어하는 AI가 관리
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Done & Due turns a job photo and a voice note into an editable, evidence-backed invoice for an independent tradesperson. After the contractor confirms the bill, the PayPal Sandbox workspace can create a hosted PayPal invoice, send it or share a payment link, and refresh payment status. The public demo does the same journey with simulated delivery and payment.
The product name is Done & Due.
The repository started as a single README.md heading. There was no package manager, app code, or reference image in the tree. The two design references arrived as chat attachments and are stored at:
design/reference/fieldnote-overview-dashboard.jpgdesign/reference/fieldnote-invoice-review.jpgThe redistributable sample job photo is public/demo/kitchen-tap.jpg.
Stack: Next.js 15 App Router, React 19, TypeScript, Tailwind CSS 4, Radix dialogs, Lucide, Zod, Supabase (@supabase/ssr), @google/genai, PayPal Invoicing v2 over HTTPS. Package manager is npm 10. Node 22 (engines and .nvmrc).
| Priority | Item | Status |
|---|---|---|
| P0a | Public demo: capture, draft, evidence, approval, simulated buyer and payment | Implemented. Browser verification is recorded in Verification. |
| P0b | PayPal Sandbox workspace, real invoice creation, link-only delivery, refresh, webhook | Implemented. Live Sandbox smoke is pending until the operator adds credentials. Contract fixtures cover create, uncertain outcome, delivery vs settlement, and webhook signatures. |
| P0c | Gemini transcription, grounded lines, evidence markers | Implemented behind GEMINI_API_KEY. Manual lines and typed notes work when Gemini is absent. A real photo-and-voice smoke test is pending a key. |
| P1 | Webhook reconciliation, invoice history, price list, overview | Implemented. Race and retry behavior is covered by the PayPal service tests. Email delivery against a real Sandbox buyer is an operator step. |
| P2 | Extra dashboards and deployment polish | Overview, jobs, invoices, price list, CSV export, health check, Dockerfile, and Vercel notes are in place. Notification bell is hidden. Production PayPal is deferred. |
| Path | Who | After approval |
|---|---|---|
/ then Try the demo → /demo | Anyone | Done & Due simulates sending and payment in the browser. No Gemini, Supabase, or PayPal calls. |
/ then Open PayPal workspace → /app | Allowlisted contractor | Done & Due creates a PayPal Sandbox invoice. Missing credentials show setup names and never fall back to simulation. |
The workspace badge reads Demo · Simulated or PayPal Sandbox. Route and server workspace binding choose the adapter. A URL parameter or a demo id cannot promote an invoice. Provider routes reject ids that start with demo_.
npm ci
npm run dev
Open http://localhost:3000. The demo works with every secret unset.
npm run lint
npm run typecheck
npm test
npm run eval
npm run build
npm run eval:live is opt-in. It does not call Gemini unless staged voice files are added; the current manifest has text fixtures and one published photo.
The public demo opens on Cashflow Pulse for the week of 11 November 2026. Opening cash is $310 as of that Wednesday. Reece Plumbing’s $500 bill is due Friday 13 November. Alex Morgan’s kitchen tap invoice INV-024 is $240 ($120 labor, $110 mixer tap, $10 consumables). Jamie Reed’s overdue service call INV-023 is $80.
/demo. The first screen shows $190 short on Friday and Ask Alex to pay by Thursday.Load missing-duration example leaves labor unresolved so approval stays blocked. Renaming a line to "tap" abstains between the catalog mixer taps. An empty recipient email also blocks approval.
Business dates are YYYY-MM-DD in the workspace timezone. The demo timezone is Australia/Perth and the labeled reference date is 2026-11-11. The opening balance is end of day on the as-of date. The forecast starts the next day.
cash_in(d) = eligible receipts available on d
cash_out(d) = committed outflows scheduled on d
closing(d) = opening + sum(cash_in(t) - cash_out(t)) through d
shortfall(d) = max(0, -closing(d))
buffer(d) = max(0, closing(d))
A scenario adds selected collectible amounts on their assumed dates and does not write those amounts into the ledger. Confirmed payment and funds available to spend stay separate. A paid invoice with no availability date stays out of the baseline and reads Paid · availability unknown.
Apply supabase/migrations/001_init.sql, then 002_cash_ledger.sql. Cash figures are stored in workspaces.state.cash. The second migration adds a read-only workspace_cash view.
Demo audio is local playback. Typed notes are the transcription path. Photos and recordings stay in IndexedDB when the browser supports it.
Copy .env.example to .env.local. Names used by the code:
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗