Bu5hm4nn dc4ee1f261 feat(CONV-001): add GLD launch date validation, feat(DATA-DB-003): add cache CLI
CONV-001:
- Add GLD_LAUNCH_DATE constant (November 18, 2004)
- Validate reference_date in gld_ounces_per_share()
- Raise ValueError for dates before GLD launch
- Update docstring with valid date range
- Add comprehensive test coverage for edge cases

DATA-DB-003:
- Create scripts/cache_cli.py with three commands:
  - vault-dash cache stats: Show cache statistics
  - vault-dash cache list: List cached entries
  - vault-dash cache clear: Clear all cache files
- Add Makefile targets: cache-stats, cache-list, cache-clear
- Integrate with DatabentoHistoricalPriceSource methods
2026-03-29 12:00:30 +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%