Files
vault-dash/docs/ROADMAP.md

9.7 KiB

Vault Dashboard Roadmap

Overview

A prioritized roadmap for the Vault Dashboard Lombard loan hedging platform.

Legend

  • Priority: P0 (Critical), P1 (High), P2 (Medium), P3 (Low)
  • Dependencies: Features tagged with [depends: ID] require the named feature to be completed first
  • Effort: S (Small), M (Medium), L (Large)

Phase 1: Data Foundation (Foundation Layer)

DATA-001: Live Price Feed Integration [P0, M] [foundation]

As a portfolio manager, I want real-time gold price updates so that my LTV calculations reflect current market conditions.

Acceptance Criteria:

  • Integrate yfinance/live data for GLD spot price
  • Update prices every 30 seconds via WebSocket
  • Display last update timestamp
  • Fallback to cached data if feed fails

Technical Notes:

  • Create app/services/price_feed.py with async price fetching
  • Extend existing WebSocket manager in app/services/websocket.py
  • Store prices in Redis with 60s TTL

Dependencies: None


DATA-002: Options Chain Data [P0, L] [depends: DATA-001]

As a trader, I want live options chain data for GLD so that I can evaluate protective put strikes and premiums.

Acceptance Criteria:

  • Fetch options chains from yfinance or IBKR API
  • Display strikes, expiration dates, bid/ask, implied volatility
  • Cache chain data for 5 minutes
  • Support filtering by expiration (30/60/90 days)

Technical Notes:

  • Create app/services/options_chain.py
  • Add /api/options/chain endpoint
  • Update Options Chain page (app/pages/options.py)

Dependencies: DATA-001


DATA-003: Greeks Calculation [P1, M] [depends: DATA-002]

As a risk manager, I want real-time Greeks calculations so that I understand my hedge sensitivity.

Acceptance Criteria:

  • Calculate Delta, Gamma, Theta, Vega for selected options
  • Display Greeks in options chain view
  • Show portfolio-level Greeks if positions held
  • Use Black-Scholes model with live IV

Technical Notes:

  • Create app/services/pricing.py with B-S model
  • Add QuantLib integration (optional dependency)
  • Cache calculations for performance

Dependencies: DATA-002


Phase 2: Portfolio & Risk (Core Features)

PORT-001: Portfolio State Management [P0, M] [depends: DATA-001]

As a user, I want to configure my actual portfolio (gold value, loan amount) so that LTV calculations match my real position.

Acceptance Criteria:

  • Settings page with editable portfolio parameters
  • Store config in Redis/database
  • Validate LTV < 100%
  • Show current vs recommended collateral

Technical Notes:

  • Extend app/pages/settings.py
  • Create app/models/portfolio.py with Pydantic models
  • Add persistence layer (Redis JSON or SQLite)

Dependencies: DATA-001


PORT-002: Alert Notifications [P1, M] [depends: PORT-001]

As a risk manager, I want alerts when LTV approaches margin call thresholds so that I can take action before liquidation.

Acceptance Criteria:

  • Configurable alert thresholds (default: 70%, 75%)
  • Browser push notifications
  • Email notifications (optional)
  • Alert history log

Technical Notes:

  • Create app/services/alerts.py
  • Integrate browser notifications API
  • Add /api/alerts/configure endpoint
  • Background task to check thresholds

Dependencies: PORT-001


PORT-003: Historical LTV Chart [P2, M] [depends: PORT-001]

As a user, I want to see my LTV history over time so that I can identify trends and stress periods.

Acceptance Criteria:

  • Store LTV snapshots every hour
  • Display 7/30/90 day charts
  • Show margin call threshold line
  • Export data as CSV

Technical Notes:

  • Create app/services/history.py
  • Use TimescaleDB or Redis TimeSeries (optional)
  • Integrate with existing chart components

Dependencies: PORT-001


Phase 3: Strategy Execution (Advanced Features)

EXEC-001: Strategy Builder [P1, L] [depends: DATA-003]

As a trader, I want to build and compare hedging strategies so that I can choose optimal protection.

Acceptance Criteria:

  • Select strategy type (protective put, collar, laddered)
  • Choose strikes and expirations
  • See P&L payoff diagrams
  • Compare cost vs protection level

Technical Notes:

  • Extend app/pages/hedge.py
  • Create app/services/strategy_builder.py
  • Add payoff chart visualization
  • Store strategy templates

Dependencies: DATA-003


EXEC-002: IBKR Order Integration [P2, L] [depends: EXEC-001]

As a authorized user, I want to execute hedge trades directly from the dashboard so that I can act quickly on recommendations.

Acceptance Criteria:

  • IBKR API connection (paper trading first)
  • Preview order with estimated fill
  • One-click execution
  • Order tracking and status updates

Technical Notes:

  • Create app/services/broker.py with IBKR API
  • Add paper/live mode toggle
  • Store credentials securely
  • Order audit log

Dependencies: EXEC-001


EXEC-003: Position Monitoring [P2, M] [depends: EXEC-002]

As a portfolio manager, I want to see my open hedge positions so that I know my current protection status.

Acceptance Criteria:

  • Display open options positions
  • Show expiration countdown
  • Calculate net Greeks exposure
  • Alert on approaching expiration

Technical Notes:

  • Create positions table/view
  • Sync with IBKR positions
  • Update portfolio Greeks calculation

Dependencies: EXEC-002


Phase 4: Reporting & Analytics (Polish)

RPT-001: Strategy Report Generation [P3, M] [depends: EXEC-001]

As a compliance officer, I want PDF reports of hedging decisions so that I can document risk management.

Acceptance Criteria:

  • Generate PDF with strategy rationale
  • Include P&L scenarios
  • Date range selection
  • Export to email/share

Technical Notes:

  • Use reportlab or weasyprint
  • Create app/services/reporting.py
  • Add download endpoint

Dependencies: EXEC-001


RPT-002: What-If Analysis [P3, L] [depends: DATA-003]

As a risk manager, I want to simulate gold price drops so that I can stress test my protection.

Acceptance Criteria:

  • Slider to adjust gold price scenarios (-10%, -20%, etc.)
  • Show portfolio P&L impact
  • Display hedge payoff under scenarios
  • Compare protected vs unprotected

Technical Notes:

  • Extend strategy builder with scenario mode
  • Add sensitivity analysis
  • Interactive chart updates

Dependencies: DATA-003


Dependency Graph

DATA-001 (Price Feed)
├── DATA-002 (Options Chain)
│   ├── DATA-003 (Greeks)
│   │   ├── EXEC-001 (Strategy Builder)
│   │   │   ├── EXEC-002 (IBKR Orders)
│   │   │   │   └── EXEC-003 (Position Monitoring)
│   │   │   └── RPT-001 (Reports)
│   │   └── RPT-002 (What-If)
│   └── PORT-001 (Portfolio Config)
│       ├── PORT-002 (Alerts)
│       └── PORT-003 (History)

Fast Follow-up Backlog

DATA-002A: Lazy Options Loading [P0, S] [depends: DATA-002]

As a trader, I want the options page to render immediately so that it feels responsive and usable.

Acceptance Criteria:

  • Initial page load fetches only expirations plus one default expiry chain
  • Changing expiry fetches that expiry on demand
  • Browser test verifies /options becomes visible quickly
  • No visible 500/runtime error during page load

Dependencies: DATA-002

DATA-001A: Live Overview Price Wiring [P0, S] [depends: DATA-001, PORT-001]

As a portfolio manager, I want the overview cards to use live quote data so that the displayed spot/LTV values are trustworthy.

Acceptance Criteria:

  • Overview page uses live quote from service instead of hardcoded 215.0
  • Display source and last updated timestamp
  • Margin call / LTV calculations use configured portfolio values
  • Browser test verifies overview renders with live data metadata

Dependencies: DATA-001, PORT-001

OPS-001: Caddy Route for Production Dashboard [P1, S] [depends: deploy-stable]

As a VPN user, I want to reach the deployed dashboard at vd1.uncloud.vpn so that I can access it without SSH port forwarding.

Acceptance Criteria:

  • Caddy route proxies vd1.uncloud.vpn to local deployment container
  • Route works over the VPN only
  • Health check succeeds through Caddy
  • Deployment docs include the route and where it lives

Dependencies: stable deployed app on VPS

PORT-001A: Collateral Entry Basis in Settings [P1, M] [depends: PORT-001]

As a portfolio manager, I want to store my collateral entry basis so that the dashboard can derive position size consistently from either cost basis or weight.

Acceptance Criteria:

  • Settings supports entering either:
    • total collateral start value and entry price, or
    • gold weight directly
  • Updating one mode calculates the other representation automatically
  • Persist both the chosen input mode and the derived values needed by the app
  • Validation prevents impossible or contradictory values (zero/negative price, value, or weight)
  • UI makes the relationship explicit: weight = start_value / entry_price
  • Browser-visible test covers switching modes and saving derived values

Technical Notes:

  • Extend PortfolioConfig / settings persistence with entry-basis fields
  • Keep overview and other consumers compatible with existing portfolio settings
  • Prefer a single canonical stored representation plus derived display fields to avoid drift

Dependencies: PORT-001

Implementation Priority Queue

  1. PORT-001A - Add collateral entry basis and derived weight/value handling in settings
  2. PORT-002 - Risk management safety
  3. EXEC-001 - Core user workflow
  4. EXEC-002 - Execution capability
  5. Remaining features