What's under the hood
A small, boring stack on purpose — every piece earns its place.
Core stack
Next.js 15
App Router and Server Actions — pages call server-side functions directly, so there's no separate REST API to keep in sync with the UI.
Supabase
Hosted Postgres, authentication, and file storage in one project — email/password login, with optional two-factor authentication.
Tailwind CSS
Utility-first styling, with a class-based dark mode that follows your system theme or a manual override.
TypeScript
Strict mode throughout, no any — a mistyped field gets caught before it ever reaches your data.
PostgreSQL + Row Level Security
Every table is scoped to your household by database policy, not application code — the database itself refuses to return another household's rows.
i18next
Full English and Nepali translations, switchable from Settings at any time.
Recharts
Powers the net worth trend, cash flow, and 10-year projection charts.
Live market data
Yahoo Finance
Live quotes for your global stock holdings.
Nepal Rastra Bank
The official USD/NPR exchange rate, pulled from NRB's public rate API.
NEPSE
Nepal doesn't publish an official market-data API, so NEPSE prices come from a page scrape — the one part of this stack that isn't rock-solid, and we'd rather say so than hide it.
Brokerage sync
Webull brokerage sync
Link your Webull account to pull in real positions automatically. The connection is read-only — it can list accounts and positions, never place a trade — and your App Key/Secret are encrypted at rest (AES-256-GCM) before they touch the database.
Security & data
Two-factor authentication
Optional TOTP-based 2FA, compatible with any standard authenticator app, turned on from Settings.
Private document vault
Files live in a private Supabase Storage bucket and are only ever served through short-lived signed URLs, never a public link.
Small conveniences
CSV import
Bulk-import stock holdings from a broker export instead of typing each one in by hand.
Dark mode
Every page, including this one, ships a real dark theme — not just an inverted filter.