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.
Loading the full README. The saved excerpt is shown below.
A daily training tool that helps beginner investors build real decision-making intuition through reps, AI feedback, and structured reflection. Not a course, not a simulator — a training + feedback system.
Train like an investor in 10 minutes.Read the full README ↗A daily training tool that helps beginner investors build real decision-making intuition through reps, AI feedback, and structured reflection. Not a course, not a simulator — a training + feedback system.
Train like an investor in 10 minutes.
Investing App/
├─ app/
│ ├─ layout.tsx # Global shell + nav
│ ├─ page.tsx # Landing
│ ├─ globals.css # Tailwind + transitions + progress bar
│ ├─ challenge/page.tsx # The full daily flow (state machine)
│ ├─ journal/page.tsx # Past reflections
│ ├─ progress/page.tsx # Skill score, accuracy, calibration, trend
│ ├─ history/page.tsx # [BONUS] Review past decisions, expandable
│ └─ api/evaluate/route.ts # AI evaluation endpoint (Anthropic or OpenAI)
├─ components/
│ ├─ Nav.tsx
│ ├─ ScenarioCard.tsx
│ ├─ DecisionInput.tsx # Buy/Hold/Pass + confidence slider + reasoning
│ ├─ FeedbackPanel.tsx # Scores + did-well / missed / tip / tags
│ ├─ OutcomePanel.tsx # Outcome %, verdict, insight line, ideal answer
│ └─ ReflectionPrompt.tsx # 3-field structured journal entry
├─ data/
│ └─ scenarios.ts # 8 hardcoded scenarios (growth vs value, good vs bad)
├─ lib/
│ ├─ types.ts # Shared TS types
│ ├─ storage.ts # localStorage wrapper (single-key array)
│ ├─ scoring.ts # Verdict + progression math
│ └─ evaluationPrompt.ts # THE CORE PROMPT (see below)
├─ .env.local.example
├─ package.json
├─ tsconfig.json
├─ tailwind.config.ts
├─ postcss.config.js
└─ next.config.js
cd "Investing App"
npm install
Copy .env.local.example to .env.local and fill in ONE provider:
cp .env.local.example .env.local
Anthropic (default):
ANTHROPIC_API_KEY=sk-ant-...
AI_PROVIDER=anthropic
AI_MODEL=claude-sonnet-4-5
OpenAI:
OPENAI_API_KEY=sk-...
AI_PROVIDER=openai
AI_MODEL=gpt-4o-mini
No API key? The app still works —
/api/evaluatefalls back to a deterministic local rubric so the full flow remains usable offline. Feedback quality is worse; that's the point of using a real model.
npm run dev
# http://localhost:3000
npm run build
npm start
| Variable | Required | Description |
|---|---|---|
AI_PROVIDER | No | anthropic (default) or openai. |
AI_MODEL | No | Model name. Defaults: claude-sonnet-4-5 / gpt-4o-mini. |
ANTHROPIC_API_KEY | If anthropic | Anthropic API key. |
OPENAI_API_KEY | If openai | OpenAI API key. |
Nothing is ever sent to any third party besides the chosen AI provider. API keys stay server-side in app/api/evaluate/route.ts; do not expose them as NEXT_PUBLIC_* variables. All decisions, reflections, and progress live in the browser's localStorage under the key ait.decisions.v1. localStorage is readable by any script running on this origin, so XSS prevention remains critical and this data should not be treated as secret storage.
The prompt (in lib/evaluationPrompt.ts) is the most load-bearing part of the product. It:
If you want to tune the product's feel, tune this file.
Keep it focused. Reps + feedback is the product.