FinBuddy is a full-stack personal finance assistant with three agents: Transaction Watchdog, Income Manager, and Investment Strategist. It includes a FastAPI backend and a React + Vite frontend.
- Dashboard with real weekly activity, trends, and snapshot
- Transactions upload and random/demo seeding
- Agent insights: transaction watchdog, income manager, investment strategist
- Investment calculators (FD, RD, SIP) and product comparisons
- Goals and wallet with XP/levels
- Python 3.10+ (your environment uses
3.14) - Node.js 18+
- Install deps:
Set-Location "D:\Finbuddy\finbuddy\backend"; C:/Python314/python.exe -m pip install -r requirements.txt
- Environment: create
backend/.env(ignored by git):SECRET_KEY=change_me ALGORITHM=HS256 DATABASE_URL=sqlite:///./finbuddy.db OPENAI_API_KEY= - Run dev server:
C:/Python314/python.exe -m uvicorn --app-dir "D:\Finbuddy\finbuddy\backend" main:app --reload
- Install deps:
Set-Location "D:\Finbuddy\finbuddy\frontend"; npm install
- Start dev:
The frontend uses a dev proxy to backend at
npm run dev
http://127.0.0.1:8000/api.
- Register:
POST /api/register→ returns JWT - Login:
POST /api/login→ returns JWT - Attach token as
Authorization: Bearer <token>
- Seed random transactions for the logged-in user:
$base = "http://127.0.0.1:8000"; $headers = @{ Authorization = "Bearer <token>" } Invoke-RestMethod -Method POST -Uri "$base/api/transactions/seed-random?days=30&per_day=4&income_ratio=0.35&min_amount=100&max_amount=4000" -Headers $headers
- Seed from CSV at repo root:
POST /api/transactions/seed-sample
- Dashboard:
/api/dashboard/snapshot,/api/dashboard/weekly-activity,/api/dashboard/trends - Transactions:
/api/transactions,/api/transactions/upload,/api/transactions/seed-random,/api/transactions/seed-sample - Agents:
/api/agents/full-analysis,/api/agents/transaction-watchdog,/api/agents/income-manager,/api/agents/investment-strategist - Investments:
/api/investments/*(rates, projections, calculators, recommendations) - Goals & Wallet:
/api/goals,/api/wallet
- Run uvicorn from backend dir or use
--app-dirto avoid import errors. - Without
DATABASE_URL, backend falls back to SQLitebackend/finbuddy.db. - If OpenAI key is absent, agents use robust fallbacks for investment data.
.env,.env.*,.env.exampleare ignored via root.gitignore.- History was purged to remove secrets; rotate any keys if previously exposed.
- If
main:appimport fails, start with--app-dir "D:\Finbuddy\finbuddy\backend". - Frontend dev port conflicts: Vite may choose
5174; check console output. - 401 Unauthorized: ensure the frontend stores and attaches the JWT.
Internal project. Do not distribute.