The aircraft, earthquake and FX-event requests were written as
single-quoted strings ('${API}/api/...'), so the browser fetched the
literal path "/${API}/api/..." and got a 404; the empty catch blocks
hid the error and every layer rendered empty. Use template literals
so the requests reach the backend (or VITE_API_URL in production).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Full UI/UX overhaul across login, landing, app shell and all 28 desks,
built with the Impeccable design workflow (PRODUCT.md, DESIGN.md).
- Design system: intaglio green-black ground, bone ink, one UV ink for
selection and live state, foil gold reserved for the trader's book,
green/red only for P&L sign. Self-hosted Geist, Geist Mono, Bodoni
Moda and GFS Didot (Greek glyphs); lucide icons replace emoji.
- Shell: top bar with live spot and Connecting/Live/Offline status,
merged rates + events tape, grouped desk rail, Ctrl K desk index,
hash routing per desk, lazy-loaded desks, book panel with a live
guilloche Book Seal drawn from the book's Greeks.
- Desks: shared engraved KPI strip, rebuilt Greeks desk with per-leg
contribution bars, recoloured charts, larger minimum type, contrast
fixes, significant-figure formatting for small books.
- Login and landing rebuilt; landing proof uses real terminal captures
and only verified product facts.
- Fixes: Live Map basemap (Carto now needs a key), clock labelled UTC
showing local time, ordinal suffixes, 60fps canvas favicon removed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add volumeprofile and newscenter API routers, wire them into the app,
and add matching dashboard tabs with API client helpers and screenshots.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Static auth (no DB) — users must DM on LinkedIn to get access.
Animated NEXUS login card with scanline effect, shake on wrong creds,
LinkedIn button linking to mihir-kansara-043275187 profile.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
gs-quant not compatible with Python 3.14 on Render.
try/except in quant_analysis.py already handles missing import
with pure numpy/pandas fallback implementations.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Added gs-quant to backend/requirements.txt
- All gs_quant calls now conditional on GS_QUANT_AVAILABLE flag
- Pure numpy/pandas fallbacks for volatility, RSI, MACD, Bollinger, z-score
- Fixes ModuleNotFoundError crash on Render deployment
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Pings backend every 10 minutes so Render free tier never sleeps.
Reads BACKEND_URL from GitHub Actions secret.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- API base URL now reads from VITE_API_URL env var (frontend)
- WorldMap localhost URLs replaced with env-aware API constant
- Added httpx to backend requirements (live data proxy)
- Added Procfile for Koyeb backend deployment
- Added vercel.json for frontend SPA routing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>