A personal portfolio tracker application for managing stock holdings across multiple brokers.
/backend - Flask REST API
/api - API endpoints (blueprints)
/models - SQLAlchemy database models
/config - Configuration files
/migrations - Alembic database migrations
/venv - Python virtual environment
/frontend - Vue.js application
-
Navigate to the backend directory:
cd backend
-
Create and activate Python virtual environment:
python -m venv venv .\venv\Scripts\Activate.ps1 -
Install dependencies:
pip install -r requirements.txt -
Initialize database:
flask db init flask db migrate -m "Initial migration" flask db upgrade
-
Run the Flask development server:
flask run
-
Navigate to the frontend directory:
cd frontend
-
Install dependencies:
npm install
-
Run the Vue development server:
npm run dev
Run these after every code change:
# Build
docker build -t ramkumarrammohan/vault-backend:latest ./backend
docker build -t ramkumarrammohan/vault-frontend:latest ./frontend
# Push to Docker Hub
docker login
docker push ramkumarrammohan/vault-backend:latest
docker push ramkumarrammohan/vault-frontend:latest# Create MySQL data directory
mkdir -p /home/ramkumar/Data/VAULT_DATA
# Copy required files to server (no source code needed)
scp docker-compose.yml backend/.env.prod user@<server-ip>:~/vault/
# SSH into server
ssh user@<server-ip>
cd ~/vault
# Start all containers
docker compose up -d
# Verify all 3 containers are running
docker compose pscurl http://localhost/health # {"status": "ok"}
curl http://localhost/api/accounts/ # returns JSON# On the server — pull latest images and restart
docker compose pull && docker compose up -d# View live logs
docker compose logs -f
# View backend logs only
docker compose logs backend --tail 50
# View MySQL logs
docker compose logs vault_db --tail 20
# Run database seed
docker compose exec backend python seed.py
# Stop all containers
docker compose down
# Stop and wipe MySQL data volume (destructive)
docker compose down -vNote:
backend/.env.prodcontains secrets — never commit it to git. Add it to.gitignoreand copy it to the server separately.
- Track stock holdings across multiple brokers
- View portfolio summary (total value, gains/losses)
- Add/edit/delete stock holdings
- Fetch current stock prices
- Portfolio visualization
- Backend: Flask, Flask-SQLAlchemy, Flask-Migrate, Flask-CORS
- Frontend: Vue.js 3, Vue Router, Axios
- Database: SQLite (development)
- Stock Data: yfinance