Files
vault-dash/docs/ROADMAP.md
Bu5hm4nn 133908dd36 feat: prioritize lazy options loading and live overview wiring
- queue OPS-001 Caddy route for vd1.uncloud.vpn
- lazy-load options expirations/chains per expiry
- wire overview to live quote data and persisted portfolio config
- extend browser test to verify live quote metadata
2026-03-23 23:23:59 +01:00

285 lines
8.7 KiB
Markdown

# 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
## Implementation Priority Queue
1. **DATA-002A** - Fix options UX/performance regression
2. **DATA-001A** - Remove misleading mock overview price
3. **OPS-001** - Add Caddy route once app behavior is stable
4. **DATA-003** - Risk metrics
5. **PORT-002** - Risk management safety
6. **EXEC-001** - Core user workflow
7. **EXEC-002** - Execution capability
8. Remaining features