Fix dashboard WebSocket and API URLs for /cv prefix routing

The dashboard lives at ftdt.io/cv but WebSocket and API calls
used root-relative paths (/ws, /api/backtests) which Caddy
routed to the wrong backend. Fixed to /cv/ws and /cv/api/*
so Caddy's handle_path properly strips the prefix.
This commit is contained in:
ramseshk
2026-08-04 03:21:13 +00:00
parent 7dd9e78e0b
commit 83c640d361
+3 -3
View File
@@ -222,7 +222,7 @@ function switchTab(tab) {
// ═══════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════
let ws; let ws;
function connectWS() { function connectWS() {
ws = new WebSocket((location.protocol==='https:'?'wss:':'ws:')+'//'+location.host+'/ws'); ws = new WebSocket((location.protocol==='https:'?'wss:':'ws:')+'//'+location.host+'/cv/ws');
ws.onopen = function() { ws.onopen = function() {
document.getElementById('connection-status').innerHTML = '<span style="color:#22c55e">live</span>'; document.getElementById('connection-status').innerHTML = '<span style="color:#22c55e">live</span>';
document.getElementById('status-dot').className = 'status-dot live'; document.getElementById('status-dot').className = 'status-dot live';
@@ -313,7 +313,7 @@ function renderLive() {
// Backtests // Backtests
// ═══════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════
function loadBacktests() { function loadBacktests() {
fetch('/api/backtests').then(function(r){return r.json();}).then(function(data){ fetch('/cv/api/backtests').then(function(r){return r.json();}).then(function(data){
backtests = data; backtests = data;
var list = document.getElementById('bt-list'); var list = document.getElementById('bt-list');
var html = ''; var html = '';
@@ -334,7 +334,7 @@ function loadBacktests() {
} }
function viewBacktest(name) { function viewBacktest(name) {
fetch('/api/backtest/'+name).then(function(r){return r.json();}).then(function(bt){ fetch('/cv/api/backtest/'+name).then(function(r){return r.json();}).then(function(bt){
selectedBacktest = bt; selectedBacktest = bt;
document.getElementById('bt-detail-card').style.display = 'block'; document.getElementById('bt-detail-card').style.display = 'block';
document.getElementById('bt-title').textContent = bt.strategy + ' — ' + bt.description; document.getElementById('bt-title').textContent = bt.strategy + ' — ' + bt.description;