live page: show recording length as m:ss badge + preload=metadata so player shows duration
Files touched
M routes/live.js
Diff
commit c41574664a05fa3c25e6b6b3b6a9ef1d6c65e8bf
Author: SteveStudio2 <steve@designerwallcoverings.com>
Date: Tue May 26 15:04:57 2026 -0700
live page: show recording length as m:ss badge + preload=metadata so player shows duration
---
routes/live.js | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/routes/live.js b/routes/live.js
index 23eca01..96324e6 100644
--- a/routes/live.js
+++ b/routes/live.js
@@ -465,17 +465,18 @@ function renderLive(calls) {
var goal = doneEsc((c.goal || '').slice(0, 140));
var ago = doneAgo(c.updated_at || c.created_at);
var id = doneEsc(c.id);
- var dur = c.recording_duration_sec ? Math.round(c.recording_duration_sec) + 's' : '';
+ var ds = Math.round(c.recording_duration_sec || 0);
+ var dur = ds > 0 ? Math.floor(ds / 60) + ':' + String(ds % 60).padStart(2, '0') : '';
return '<div class="card status-done" style="border-left:4px solid var(--muted);">' +
'<div class="biz">' + biz + '</div>' +
'<div class="meta">' +
'<span class="pill" style="background:#475569;color:#e2e8f0;">DONE</span>' +
(phone ? '<span>' + phone + '</span>' : '') +
- (dur ? '<span style="color:var(--green);">' + dur + '</span>' : '') +
+ (dur ? '<span style="color:var(--green);font-weight:600;">▶ ' + dur + '</span>' : '') +
'<span style="margin-left:auto;">' + ago + '</span>' +
'</div>' +
(goal ? '<div class="goal">' + goal + (c.goal && c.goal.length > 140 ? '\\u2026' : '') + '</div>' : '') +
- '<audio controls preload="none" src="/api/calls/' + id + '/recording" ' +
+ '<audio controls preload="metadata" src="/api/calls/' + id + '/recording" ' +
'style="width:100%;height:34px;margin-top:6px;" ' +
'onerror="this.style.display=\\'none\\';this.insertAdjacentHTML(\\'afterend\\',\\'<span style="color:#64748b;font-size:11px">no recording archived</span>\\')"></audio>' +
'<div style="margin-top:6px;">' +