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.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗cd into itbunx vercel link, then bunx vercel env pullbun installbun run devThen: make changes, preview locally. Commit to a branch for Github PR review (or main, if you're confident). The site autodeploys from main.
Note that this runs against the prod db, so be reasonably careful. We should have supabase backups but it's not well tested. Our dev db is currently out of date.
TODO: Update all this for agentic coding instructions
(note as of Jul 2026: everything below is left as (questionably useful) history)
curl -fsSL https://bun.sh/install | bashbun install(Easier to get started, but you'll be working against real data, so be careful)
# Get environment variables
bunx vercel link
bunx vercel env pull
# Run against remote
bun run dev # Production database
bun run dev:dev # Development database
(Somewhat trickier to set up)
bun run supabase:localbun run setup-local-envbun run sync-data-from-prod. This requires additional keys.bun run dev:localnpx supabase db diff --schema public --file your_migration_namenpx supabase migration new your_migration_name then edit the file npx supabase migration up
bun run gen-types:local
# Link to target environment
npx supabase link --project-ref PROJECT_ID # fkousziwzbnkdkldjper for prod, oucjhqqretizqonyfyqu for dev
# Check what migrations will be applied
npx supabase migration list --linked
# Dry run to see what would happen and confirm its safety
npx supabase migration up --linked --dry-run
# Apply migrations
npx supabase migration up --linked
If you want Google Oauth to work locally, you should provide these values to your .env.development.local
SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID=your-client-id
SUPABASE_AUTH_EXTERNAL_GOOGLE_SECRET=your-secret
Setup for this requires:
http://127.0.0.1:54321/auth/v1/callback as an authorized reidrect URIbunx supabase login
bun run gen-types # From prod
bun run gen-types:dev # From dev
Admin status (access to /admin, adjusting user balances, approving grants,
transferring money between users, editing/restoring projects, etc.) is granted
by a hardcoded allowlist of email addresses — there is no database role or UI
toggle. The single source of truth is the ADMINS array in isAdmin() in
db/profile.ts. To make someone an admin, add their account's email there:
// db/profile.ts
const ADMINS = ['[email protected]', '[email protected]'] // ← add new admins here
The email must match the address on their Manifund/Google account exactly
(it's compared against user.email from Supabase Auth).
After editing, commit and deploy — the change takes effect on the next deploy
(no migration or env change needed). Verify with bun run build.
stripe listen --forward-to localhost:3000/api/stripe-endpoints