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.
Personal options & equity portfolio cockpit
Translation pending
FinanceTypeScript · ShellGitHub @justintimefordinner-langOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Self-hosted Next.js dashboard for a stock & options portfolio — CSPs, covered calls, LEAPs, spreads, closed-trade P&L, VIX regime, and a pre-market brief. Reads local JSON from the companion Schwab bridge. Private via Tailscale
Loading the full README. The saved excerpt is shown below.
A self-hosted Next.js dashboard for tracking a stock & options portfolio — holdings,
open option positions (cash-secured puts, covered calls, LEAPs, spreads), closed-trade
history, P&L, research signals, and market context (VIX, breadth). Read-only: it
displays data, it never places trades.
The app reads its data from local JSON files in data/, which are written by a companion
data bridge. Out of the box — with no data and no bridge — it runs in example mode on a
built-in demo dataset, so you can explore the whole UI immediately.Read the full README ↗A self-hosted Next.js dashboard for tracking a stock & options portfolio — holdings, open option positions (cash-secured puts, covered calls, LEAPs, spreads), closed-trade history, P&L, research signals, and market context (VIX, breadth). Read-only: it displays data, it never places trades.
The app reads its data from local JSON files in data/, which are written by a companion
data bridge. Out of the box — with no data and no bridge — it runs in example mode on a
built-in demo dataset, so you can explore the whole UI immediately.
/api/chart route. Hold any
ticker anywhere in the app for 1.8 seconds to open it theredata/sectors.json (Yahoo Finance — Schwab's API has none);
correct any by hand under its overrides mapnpm install
npm run dev # dev server at http://localhost:3000
The dev server binds 0.0.0.0, so you can also reach it from other devices on your
network at http://<your-machine-ip>:3000.
For a production build:
npm run build
npm run start # serves the optimized build on port 3000
With no data/ files present, every view renders the example dataset — nothing to
configure to look around.
The app loads a portfolio snapshot in this order:
lib/example.tsdata/snapshot.json (and the other data/*.json files)Everything in data/*.json is gitignored — real portfolio data never gets committed.
To feed the dashboard live data, run the companion bridge, which writes those JSON files:
Data bridge:
Schwab_Bridge_Public— a small read-only Python bridge that pulls from a Charles Schwab account and writes thedata/*.jsonthis app reads. Point itsAPP_DATA_DIRat this project'sdata/folder.
Connect your Schwab account right from the app: open Settings → Schwab connection to enter your App Key/Secret (first run) and do the weekly re-login — no CLI needed. The app is write-only toward the bridge: it deposits credentials and the pasted login URL and never reads the bridge's secrets back.
It runs anywhere Node runs, including a Raspberry Pi. A simple pattern is to run
npm run start under a process manager (e.g. a systemd service) so it auto-starts on
boot, with the bridge running alongside it writing fresh data on an interval.
data/*.json snapshot is the single source of truth.githooks/pre-commit (plus a gitleaks
.pre-commit-config.yaml) blocks accidental commits of credential files or secret-looking
values. After cloning, enable it with git config core.hooksPath .githooks.