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.
Loading the full README. The saved excerpt is shown below.
Personal finance that answers the question people actually ask: Cât pot cheltui astăzi? — How much can I spend today? Most money apps are very good at telling you where your money went. MONEYFLOW is built around telling you what you can do with the money you still have. The daily allowance on the dashboard is the product; transactions, budgets and goals are the inputs that make it true. [README 설치·사용 부분 발췌] Setup supabase.com/dashboard → New project. Note the project URL and the anon/publishable key from Project Settings → API.Read the full README ↗
Personal finance that answers the question people actually ask:
Cât pot cheltui astăzi? — How much can I spend today?
Most money apps are very good at telling you where your money went. MONEYFLOW is built around telling you what you can do with the money you still have. The daily allowance on the dashboard is the product; transactions, budgets and goals are the inputs that make it true.
| Poți cheltui azi | One number, recomputed from the live balance: what today's spending can be without breaking the month or the savings plan. Shows its working. |
| Îmi permit? | Price in, verdict out — yes / careful / not recommended — with the reason, the daily budget that survives the purchase, and which goal it delays. |
| Money Score | 0–100 from savings rate, budget adherence, emergency fund, debt, spending consistency, goal progress and recurring load, plus the one change that would raise it most. |
| Asistent AI | Ask about your own money. Answers come from your real transactions, budgets and goals — never invented. Works with or without an API key. |
| Transactions | Income, expense, transfer. Filters and pagination in the URL. |
| Accounts | Cash, bank, card, savings. Balances maintained by database triggers. |
| Budgets | Monthly, per category, with safe / near-limit / over status. |
| Goals | Targets, deadlines, contributions, and an honest forecast. |
| Recurring | Rent, subscriptions, bills — posted automatically when they fall due, and subtracted from today's allowance before they do. |
| Debts | Both directions, with due dates and a net position. |
| Analytics | Income vs expenses, category breakdown, balance trend, savings, budget vs actual, over 7d → 1y. |
| Monthly reports | Income, expenses, savings rate, top category, and how the month compared to the last one. |
| Notifications | Bills due, budgets breached, savings hit, payday approaching — derived from the data, deduplicated. |
| PWA | Installable, offline fallback, home-screen shortcuts. |
| i18n | Română (default), Русский, English. |
Next.js 16 (App Router, Server Components, Server Actions) · React 19 · TypeScript · Tailwind CSS v4 · shadcn/ui-style components on Radix · Supabase (Auth + PostgreSQL + RLS) · Recharts · Lucide · deployed on Vercel.
supabase.com/dashboard → New project. Note the project URL and the anon/publishable key from Project Settings → API.
Either paste each file from supabase/migrations/ into the Supabase SQL
Editor in filename order, or use the CLI:
supabase link --project-ref <your-project-ref>
supabase db push
The migrations are re-runnable, so applying them twice is harmless.
cp .env.example .env.local
NEXT_PUBLIC_SUPABASE_URL=https://<project-ref>.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=<anon key>
NEXT_PUBLIC_SITE_URL=http://localhost:3000
npm install
npm run dev
Register an account at /register, answer the four onboarding questions, and
the dashboard is live. Settings → Date demo → Încarcă date demo fills the
account with three months of realistic history if you want to see it full.
http://localhost:3000/auth/callback to
Authentication → URL Configuration → Redirect URLs either way.ANTHROPIC_API_KEY to have Claude write the answers.
Without it the assistant still answers from your real data using the built-in
deterministic engine.EXCHANGE_RATES_PROVIDER=frankfurter (default, free, no
key) or static. New providers implement one interface in
src/lib/currency/index.ts.Import the repository, add the three NEXT_PUBLIC_* variables (and
ANTHROPIC_API_KEY if you want it), deploy. Set NEXT_PUBLIC_SITE_URL to the
production URL so password-reset links point at the right place — that is what
password-reset and email-confirmation links are built from.
Phone notifications (optional). Generate a VAPID pair once with
npx web-push generate-vapid-keys, then set NEXT_PUBLIC_VAPID_PUBLIC_KEY,
VAPID_PRIVATE_KEY and VAPID_SUBJECT (a mailto: for you). Without them the
settings screen says notifications are not configured rather than offering a
switch that does nothing. On iPhone they only work once the app is on the Home
Screen — Safari in a tab cannot subscribe at all.
Recurring charges on a clock. vercel.json schedules /api/cron/recurring
once a day. Set CRON_SECRET to anything long and random — Vercel presents it
as a bearer token and the route refuses everything else — and
SUPABASE_SERVICE_ROLE_KEY to the project's service role key, which is used
there and nowhere else in the app.
Without those two the job answers 503 and nothing else changes: the dashboard
still posts the current user's due charges when it opens, the way it always
did. With them, a charge posts on its due date whether or not anyone opens the
app, and the phone is told — which is the only way a notification about a bill
can ever reach you, since nothing runs while the app is closed.
The service role key bypasses Row Level Security entirely. It belongs in a
server-side variable and must never be given a NEXT_PUBLIC_ name, which would
ship it to every browser.
This is the beginning of the README. Read the rest at the original. Read the full README ↗