尚未检测到更新。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 ↗