Open Net Worth
Open Net Worth는 직접 운영하는 오픈소스 개인 AI 자산 비서로, 전체 재무를 하나의 원장에 기록하고 사용자가 제어하는 AI가 관리
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A personal finance web app for Indian Rupees. Multiple users can register and independently track bank accounts, cash and cards; record income and expenses as they happen; move money between their own accounts; and see balances, savings, trends and reports. All times are shown in the user's time zone (default Asia/Kolkata).
Designed to run entirely on free tiers: Vercel Hobby + MongoDB Atlas Free.
| Area | Choice |
|---|---|
| Framework | Next.js 16 (App Router, Cache Components, Turbopack), React 19, TypeScript (strict) |
| UI | Tailwind CSS v4, shadcn/ui (Radix), Lucide icons, Recharts, Sonner toasts, next-themes |
| Forms & validation | React Hook Form + Zod 4 (the same schemas run on client and server) |
| Backend | Next.js Route Handlers on the Node.js runtime |
| Database | MongoDB Atlas Free tier via the official mongodb driver (v7) |
| Auth | Better Auth (email + password) with @better-auth/mongo-adapter. Free, open source, self-hosted, and passwords are hashed by the library |
| Tests | Vitest (unit tests + integration tests against a real MongoDB test database) |
src/
app/
(auth)/login, register sign-in / sign-up pages
(app)/dashboard … settings authenticated pages (Server Components)
api/… Route Handlers (all mutations, export, auth)
components/
app/ shell, navigation, user menu, quick add
finance/ forms, dialogs, tables, charts, cards
settings/ settings forms
ui/ shadcn/ui primitives
lib/ client-safe code
money.ts paise parsing/formatting (no floats)
dates.ts time-zone aware periods & buckets
finance/ledger.ts THE ledger rules (+ matching Mongo expressions)
validation/schemas.ts Zod schemas shared by client and server
server/ server-only code
db/ Mongo client singleton, collections, indexes
services/ business logic (accounts, transactions, reports, export…)
http.ts authenticated route wrapper, error mapping, CSRF check
session.ts verified-session helpers
proxy.ts optimistic redirect for signed-out visitors
tests/unit, tests/integration
<Suspense> boundary (required by Cache Components); no user data is cached on the server.authedRoute(), which checks the Origin on mutating requests, gets the user from the verified Better Auth session (never from the request body), and turns errors into safe JSON.userId. Referenced accounts and expense types are loaded with { _id, userId }, so another user's IDs read as 404 Not Found.Better Auth manages user, session, account, verification and rateLimit. The app adds:
| Collection | Key fields |
|---|---|
financialAccounts | userId, name, nameKey (unique per user), type, openingBalancePaise, currency, isArchived, version, timestamps |
transactions (unified ledger) | userId, accountId, type (income · expense · transfer_out · transfer_in · adjustment), amountPaise (positive int), name, categoryId, effectiveAt, createdAt, updatedAt, comment, reference, refundedPaise + refunds[], transferGroupId + counterpartyAccountId, adjustmentDirection + adjustmentReason, isCashWithdrawal, idempotencyKey, version |
expenseTypes | userId, name, nameKey (unique per user), isDefault, isArchived, timestamps |
userSettings | _id = userId, currency, timezone, cashWithdrawalMode |
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗