Sign inSign up

shri32msi/networth-tracker

By shri32msi

•Updated 5 months ago

Personal net worth tracker - FastAPI backend + React frontend with security hardening

Image
0

257

shri32msi/networth-tracker repository overview

⁠NetWorth Tracker

A personal finance web application for tracking net worth, built with FastAPI and React.

⁠Features

  • Dashboard with net worth summary, asset allocation charts, and historical tracking
  • Asset Management — cash, investments, real estate, vehicles, retirement, crypto
  • Liability Tracking — mortgages, loans, credit cards with interest rates
  • Bank Accounts — savings, current, salary, FD, RD with balance tracking
  • Insurance Policies — life, health, vehicle, term with expiry alerts
  • Mutual Funds — with live NAV fetching from mfapi.in
  • Equities — NSE, BSE, NASDAQ with live price refresh via Yahoo Finance
  • USD to INR conversion for international holdings
  • Export/Import — JSON backup and restore
  • Privacy Mode — hide financial values on screen
  • Dark Mode support

⁠Tags

TagDescription
backendFastAPI Python API server (port 8000)
frontendReact + Nginx static server (port 3000, proxies /api to backend)

⁠Quick Start with Docker Run

⁠1. Create a shared network
docker network create networth-network
⁠2. Create a data directory
mkdir -p ./data
⁠3. Start the backend
docker run -d   --name networth-backend   --network networth-network   -p 8000:8000   -v ./data:/app/data   -e CREATE_DEMO_DATA=true   -e DATA_FILE=/app/data/data.json   shri32msi/networth-tracker:backend
⁠4. Start the frontend
docker run -d   --name networth-frontend   --network networth-network   -p 3000:3000   shri32msi/networth-tracker:frontend
⁠5. Open the app

Open your browser and go to:

Login with demo credentials: demo / password123

⁠Stop and cleanup
docker stop networth-frontend networth-backend
docker rm networth-frontend networth-backend
docker network rm networth-network

⁠Quick Start with Docker Compose

Create a docker-compose.yml:

services:
  backend:
    image: shri32msi/networth-tracker:backend
    container_name: networth-backend
    ports:
      - "8000:8000"
    volumes:
      - ./data:/app/data
    environment:
      - CREATE_DEMO_DATA=true
      - DATA_FILE=/app/data/data.json
      # Optional: set for persistent JWT sessions across restarts
      # - SECRET_KEY=your-secret-key-here
    restart: unless-stopped

  frontend:
    image: shri32msi/networth-tracker:frontend
    container_name: networth-frontend
    ports:
      - "3000:3000"
    depends_on:
      - backend
    restart: unless-stopped

networks:
  default:
    name: networth-network

Then run:

docker compose up -d

Open http://localhost:3000⁠ and login with demo / password123.

⁠Environment Variables

VariableDefaultDescription
SECRET_KEY(auto-generated)JWT signing key. Set for persistent sessions across restarts
CREATE_DEMO_DATAfalseSet to true to create demo user with sample data on startup
DATA_FILE../data/data.jsonPath to the JSON database file

⁠Tech Stack

  • Backend: Python 3.12, FastAPI, JWT auth, JSON file database
  • Frontend: React 18, Vite, Tailwind CSS, Recharts, Axios
  • Serving: Nginx with security headers
  • Container: Non-root user, healthchecks

⁠Security

  • JWT secret via environment variable (auto-generated if not set)
  • Non-root container users
  • Nginx security headers (X-Frame-Options, X-Content-Type-Options, X-XSS-Protection, Referrer-Policy, Permissions-Policy)
  • CORS restricted to specific origins and methods
  • Import payload size limits (10MB)
  • Demo data opt-in via environment variable

Tag summary

Content type

Image

Digest

sha256:af938dc78…

Size

25.2 MB

Last updated

5 months ago

docker pull shri32msi/networth-tracker:frontend