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.
Manage Your Finances
Translation pending
FinanceTypeScript · RustGitHub @HarshGmailOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Loading the full README. The saved excerpt is shown below.
Personal finance tracker built for Indian investors. Track stocks, mutual funds, gold, crypto, EPF, FD, RD, and expenses — all in one place.Read the full README ↗Personal finance tracker built for Indian investors. Track stocks, mutual funds, gold, crypto, EPF, FD, RD, and expenses — all in one place.
Live: https://www.my-finances.site
| Layer | Tech |
|---|---|
| Frontend | Next.js 16, React 19, TypeScript, Tailwind, shadcn/ui |
| Charts | Highcharts |
| Data fetching | TanStack Query v5 |
| Backend | Express.js, TypeScript |
| Database | MongoDB |
| Auth | JWT (httpOnly cookies) |
| External APIs | Yahoo Finance, SafeGold, CoinDCX, MFAPI |
MyFinance/
├── frontend/ Next.js app (port 3000)
├── backend/ Express API (port 5000)
└── scripts/ Utility scripts
cd backend
npm install
cp .env.example .env # fill in values
npm run dev
Required .env variables:
PORT=5000
MONGODB_URI=
JWT_SECRET=
ENCRYPTION_KEY= # 64-char hex — generate with: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
GOOGLE_CLIENT_ID= # Gmail OAuth — from Google Cloud Console
GOOGLE_CLIENT_SECRET=
GOOGLE_REDIRECT_URI=http://localhost:5000/api/email-integration/oauth/callback
cd frontend
npm install
cp .env.example .env.local # fill in values
npm run dev
Required .env.local variables:
NEXT_PUBLIC_API_BASE_URL=http://localhost:5000
https://your-backend/api/email-integration/oauth/callbackGOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REDIRECT_URI in backend .envWhat gets imported:
[email protected]) → Mutual Fund transactions (password = PAN uppercase)[email protected]) → Gold transactions (password = first 4 letters of name + last 4 digits of phone)www.my-finances.site)api.my-finances.site)The frontend is an installable PWA. On the iPhone, open https://www.my-finances.site in Safari →
Share → Add to Home Screen. It then runs fullscreen with its own icon, keeps working offline for
pages you have already opened, and can send push notifications.
Two things only work from the installed app, not a Safari tab: push notifications (an iOS rule) and Face ID unlock for the vault.
Push notifications need VAPID keys in the backend .env:
VAPID_PUBLIC_KEY= # generate both with: npx web-push generate-vapid-keys
VAPID_PRIVATE_KEY=
VAPID_SUBJECT=mailto:[email protected]
Then enable them in the installed app under Integrations → Notifications. Without these keys the tab explains that push is not configured and everything else keeps working.
Local testing must use HTTPS — the vault needs a secure context and http://192.168.x.x:3000
does not qualify. Run npx next dev --experimental-https and open that from the phone.
Regenerate the app icons after changing frontend/public/logo.png:
cd frontend && node scripts/generate-pwa-icons.js
The frontend and API share the registrable domain my-finances.site, so the auth cookie
(SameSite=Lax, Domain=.my-finances.site) is first-party and a Home Screen PWA keeps working
unchanged. A Capacitor shell runs on capacitor://localhost, which is cross-site — it would need
the origin added to corsOptions.origin, a token-in-body login instead of the cookie, and a
reworked Gmail OAuth flow, since Google blocks OAuth in embedded webviews. apiRequest() already
attaches an optional bearer token via api/configs/authToken.ts if that day comes; the backend has
read bearer tokens all along.
Live Activities / Dynamic Island are ActivityKit and remain native-only — no PWA can reach them.
| Prefix | Domain |
|---|---|
/api/auth | Auth (login, signup, profile) |
/api/stocks | Stock transactions + live quotes |
/api/gold | Gold transactions + SafeGold rates |
/api/crypto | Crypto transactions + CoinDCX prices |
/api/mutual-funds | MF transactions |
/api/funds | MF scheme info + batch NAV history |
/api/epf | EPF accounts |
/api/fixed-deposit | Fixed deposits |
/api/recurring-deposit | Recurring deposits |
/api/expenses | Recurring expense categories |
/api/expense-transactions | Daily expense log |
/api/goals | Investment goals |
/api/targets | Asset allocation targets |
/api/email-integration | Gmail OAuth + email import |
/api/ingest | SMS-based UPI ingestion |
/api/chatgpt | Claude MCP server |
/api/capital-gains | Capital gains calculations |
/api/inflation | Inflation rate data |