dev3 ·
Plan Pro puts personal money, company books and work planning in one Next.js app, with workspaces as the unit of everything.
Stack: Next.js 15 (App Router), React 19 and MongoDB.
Decisions that mattered
- Every transaction stores three amounts: the original, the account amount and the base amount, with the day's exchange rate frozen. Reports therefore do not change when rates move later.
- Loans produce amortisation schedules (reducing balance or flat rate) and post principal and interest to the ledger. The forecast projects 90 days of cash with a Monte Carlo range.
- Trip expenses split equally, by shares, by percentage or exactly, and each person's share posts to their own books.
- Invoices, payroll, expense claims and company debt post to the same ledger, so the statements come from one source.
- Sign-in is checked by the app's own routes, which issue a single-use two-minute ticket to the session layer so unverified accounts cannot skip two-step sign-in. Rate limits live in MongoDB.
- A service worker and an IndexedDB queue keep it usable offline.
Limits: six currencies are supported (INR, USD, EUR, AED, JPY, KRW), and the public demo is read-only with fictional data.
Trade-off we chose: freezing rates favours stable reports over restating history.
How do you store multi-currency amounts? We would like your view.
#nextjs#mongodb#finance#case-study
0