Bu5hm4nn 2e2a832b31 fix(tests): use GLD launch date in decay test
Use date(2004, 11, 18) instead of date(2004, 1, 1) since GLD didn't
exist before November 18, 2004. The validation now correctly raises
ValueError for pre-launch dates.
2026-03-29 14:47:36 +02:00
2026-03-25 10:29:50 +01:00

Vault Dashboard

A real-time options hedging dashboard for Lombard loan protection strategies.

Features

  • Live Options Data: Integration with Interactive Brokers and free data sources
  • Hedge Calculations: Black-Scholes pricing, Greeks, strategy comparisons
  • Interactive Charts: TradingView-quality visualizations with Lightweight Charts
  • Strategy Analysis: Protective puts, collars, laddered positions
  • Real-time Updates: WebSocket-based live data streaming

Quick Start

Local Development

# Create virtual environment
python3 -m venv .venv
source .venv/bin/activate

# Install dependencies
pip install -r requirements.txt

# Run development server
python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

Docker

# Build
docker build -t vault-dash .

# Run
docker run -p 8000:8000 vault-dash

Docker Compose

docker-compose up -d

Turnstile configuration

Workspace creation on the public welcome page is protected by Cloudflare Turnstile.

Local and test environments may use Cloudflare's published test keys:

TURNSTILE_SITE_KEY=1x00000000000000000000AA
TURNSTILE_SECRET_KEY=1x0000000000000000000000000000000AA

Negative-path testing can use the always-fail/blocked test keys:

TURNSTILE_SITE_KEY=2x00000000000000000000AB
TURNSTILE_SECRET_KEY=2x0000000000000000000000000000000AA

Production must provide real keys via environment variables:

TURNSTILE_SITE_KEY=...
TURNSTILE_SECRET_KEY=...

In Forgejo deployment:

  • vars.TURNSTILE_SITE_KEY provides the public site key
  • secrets.TURNSTILE_SECRET_KEY provides the server-side secret key

Browser tests run with APP_ENV=test and the Turnstile test keys.

Architecture

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   IBKR      │────▶│   FastAPI   │────▶│   Redis     │
│   Gateway   │     │   Backend   │     │   (cache)   │
└─────────────┘     └─────────────┘     └─────────────┘
                          │
                          ▼
                    ┌─────────────────────────────┐
                    │     NiceGUI Dashboard       │
                    │   (WebSocket client)        │
                    └─────────────────────────────┘

Configuration

Copy config/settings.example.yaml to config/settings.yaml and configure:

# Broker settings
broker:
  type: ibkr  # or alpaca, yfinance
  
# IBKR settings
ibkr:
  host: 127.0.0.1
  port: 7497  # TWS: 7497, Gateway: 4001
  client_id: 1
  
# Portfolio defaults
portfolio:
  gold_value: 1000000
  loan_amount: 600000
  ltv_ratio: 0.60
  margin_call_threshold: 0.75
  
# Data sources
data:
  primary: yfinance  # or ibkr, alpaca
  cache_ttl: 300

Deployment

See DEPLOYMENT.md for GitLab CI/CD and VPS deployment instructions.

License

MIT

Description
No description provided
Readme MIT 782 KiB
Languages
Python 98.9%
Shell 0.9%
Dockerfile 0.1%