dashboard

1 Year Manufacturers Warranty Included

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>BO Control Panel — Ticket Dashboard</title>
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}
:root{
--navy:#1B2A4A;--navy2:#243660;--red:#CC2229;--red2:#a81b21;
--gray:#9EA3A8;--white:#fff;--bg:#f0f2f5;--border:#e5e7eb;
--text:#1f2937;--text2:#6b7280;--text3:#9ca3af;
--green:#2e7d32;--green-bg:#dcfce7;--amber:#92400e;--amber-bg:#fef3c7;
}
body{font-family:'Arial Narrow',Arial,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;}
.topbar{background:var(--navy);padding:0 24px;height:58px;display:flex;align-items:center;justify-content:space-between;border-bottom:3px solid var(--red);}
.topbar img{height:36px;}
.topbar-right{display:flex;align-items:center;gap:16px;}
.topbar-user{font-size:12px;color:var(--gray);}
.topbar-user span{color:#fff;font-weight:700;}
.new-ticket-btn{padding:7px 16px;background:var(--red);color:#fff;border:none;border-radius:4px;font-size:12px;font-weight:700;cursor:pointer;font-family:inherit;letter-spacing:.04em;text-transform:uppercase;text-decoration:none;display:inline-block;}
.new-ticket-btn:hover{background:var(--red2);}
.page{padding:24px 28px 60px;}
.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:24px;}
.metric{background:#fff;border:1px solid var(--border);border-radius:8px;padding:16px 18px;}
.metric.dark{background:var(--navy);}
.metric-lbl{font-size:11px;font-weight:700;color:var(--text3);text-transform:uppercase;letter-spacing:.08em;margin-bottom:6px;}
.metric.dark .metric-lbl{color:var(--gray);}
.metric-val{font-size:30px;font-weight:700;color:var(--text);}
.metric.dark .metric-val{color:#fff;}
.metric-val.red{color:var(--red);}
.metric-val.green{color:var(--green);}
.panel{background:#fff;border:1px solid var(--border);border-radius:8px;overflow:hidden;}
.panel-hd{padding:14px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;}
.filters{display:flex;gap:8px;align-items:center;}
select.filter{padding:6px 10px;font-size:12px;font-family:inherit;border:1px solid var(--border);border-radius:4px;background:#fff;color:var(--text);outline:none;}
.tabs{display:flex;gap:0;}
.tab{padding:6px 14px;font-size:12px;font-weight:700;color:var(--text2);border-bottom:2px solid transparent;cursor:pointer;text-transform:uppercase;letter-spacing:.05em;background:none;border-top:none;border-left:none;border-right:none;font-family:inherit;}
.tab.active{color:var(--navy);border-bottom-color:var(--red);}
table{width:100%;border-collapse:collapse;table-layout:fixed;}
thead tr{background:#f9fafb;}
th{padding:10px 14px;font-size:11px;font-weight:700;color:var(--text2);text-align:left;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--border);}
td{padding:11px 14px;font-size:13px;color:var(--text);border-bottom:1px solid #f3f4f6;vertical-align:top;}
tr.ticket-row{cursor:pointer;transition:background .1s;}
tr.ticket-row:hover{background:#f9fafb;}
tr.ticket-row.open-detail{background:#f0f4fa;}
.tid-cell{font-weight:700;color:var(--navy);font-size:12px;}
.badge{display:inline-block;font-size:11px;font-weight:700;padding:2px 8px;border-radius:3px;}
.b-critical{background:#fee2e2;color:#991b1b;}
.b-high{background:#fef3c7;color:#92400e;}
.b-medium{background:#dbeafe;color:#1e40af;}
.b-low{background:#f3f4f6;color:#374151;}
.b-open{background:#dbeafe;color:#1e40af;}
.b-progress{background:#fef3c7;color:#92400e;}
.b-resolved{background:#dcfce7;color:#166534;}
.detail-row td{padding:0;}
.detail-panel{background:#f8faff;border-top:2px solid var(--navy);padding:20px 22px;}
.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px;}
.detail-section{margin-bottom:16px;}
.ds-title{font-size:11px;font-weight:700;color:var(--navy);text-transform:uppercase;letter-spacing:.08em;padding-bottom:6px;border-bottom:2px solid var(--red);margin-bottom:10px;display:inline-block;}
.ds-row{display:flex;justify-content:space-between;padding:4px 0;font-size:13px;border-bottom:1px solid #f0f0f0;}
.ds-row:last-child{border:none;}
.ds-lbl{color:var(--text2);font-weight:600;}
.ds-val{color:var(--text);text-align:right;max-width:60%;}
.desc-box{background:#fff;border:1px solid var(--border);border-radius:5px;padding:12px 14px;font-size:13px;line-height:1.6;color:var(--text);}
.notes-log{margin-bottom:12px;max-height:180px;overflow-y:auto;}
.note-entry{padding:8px 12px;background:#fff;border:1px solid var(--border);border-radius:5px;margin-bottom:6px;}
.note-ts{font-size:11px;color:var(--text3);margin-bottom:3px;}
.note-body{font-size:13px;color:var(--text);}
.notes-input-row{display:flex;gap:8px;}
.notes-input-row textarea{flex:1;padding:9px 12px;font-size:13px;font-family:inherit;border:1px solid var(--border);border-radius:5px;resize:none;height:60px;outline:none;}
.notes-input-row textarea:focus{border-color:var(--navy);}
.add-note-btn{padding:8px 14px;background:var(--navy);color:#fff;border:none;border-radius:5px;font-size:12px;font-weight:700;cursor:pointer;font-family:inherit;align-self:flex-end;}
.add-note-btn:hover{background:var(--navy2);}
.action-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:16px;padding-top:16px;border-top:1px solid var(--border);}
.action-row label{font-size:11px;font-weight:700;color:var(--text2);text-transform:uppercase;letter-spacing:.06em;margin-bottom:3px;display:block;}
input[type=date]{padding:8px 10px;font-size:13px;font-family:inherit;border:1px solid var(--border);border-radius:5px;outline:none;background:#fff;}
input[type=date]:focus{border-color:var(--navy);}
.status-select{padding:8px 12px;font-size:13px;font-family:inherit;border:1px solid var(--border);border-radius:5px;outline:none;background:#fff;}
.save-btn{padding:9px 18px;background:var(--navy);color:#fff;border:none;border-radius:5px;font-size:12px;font-weight:700;cursor:pointer;font-family:inherit;text-transform:uppercase;letter-spacing:.05em;align-self:flex-end;}
.save-btn:hover{background:var(--navy2);}
.resolve-btn{padding:9px 18px;background:var(--green);color:#fff;border:none;border-radius:5px;font-size:12px;font-weight:700;cursor:pointer;font-family:inherit;text-transform:uppercase;letter-spacing:.05em;align-self:flex-end;}
.resolve-btn:hover{background:#1b5e20;}
.ai-snippet{background:#f0f4fa;border-left:3px solid var(--navy);padding:10px 14px;border-radius:0 5px 5px 0;font-size:13px;color:var(--text);line-height:1.55;margin-top:6px;}
.ai-snippet-lbl{font-size:10px;font-weight:700;letter-spacing:.1em;color:var(--navy);margin-bottom:4px;}
.spinner{display:inline-block;width:12px;height:12px;border:2px solid var(--border);border-top-color:var(--text2);border-radius:50%;animation:spin .6s linear infinite;vertical-align:middle;}
@keyframes spin{to{transform:rotate(360deg)}}
.attach-link{color:var(--navy);font-size:12px;text-decoration:underline;cursor:pointer;}
.empty-state{text-align:center;padding:48px 20px;color:var(--text3);font-size:14px;}
.completion-col{font-size:12px;color:var(--text2);}
</style>
</head>
<body>

<div class="topbar">
<img src="data:image/png;base64,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" alt="BO Control Panel"/>
<div class="topbar-right">
<div class="topbar-user">Dashboard — <span>Admin</span></div>
<a href="ticketing-form.html" class="new-ticket-btn">+ New Ticket</a>
</div>
</div>

<div class="page">
<div class="metrics">
<div class="metric dark">
<div class="metric-lbl">Open</div>
<div class="metric-val" id="m-open">—</div>
</div>
<div class="metric">
<div class="metric-lbl">In progress</div>
<div class="metric-val" id="m-progress">—</div>
</div>
<div class="metric">
<div class="metric-lbl">Critical</div>
<div class="metric-val red" id="m-critical">—</div>
</div>
<div class="metric">
<div class="metric-lbl">Resolved today</div>
<div class="metric-val green" id="m-resolved">—</div>
</div>
</div>

<div class="panel">
<div class="panel-hd">
<div class="tabs">
<button class="tab active" onclick="setTab(this,'open')">Open</button>
<button class="tab" onclick="setTab(this,'progress')">In progress</button>
<button class="tab" onclick="setTab(this,'resolved')">Resolved</button>
<button class="tab" onclick="setTab(this,'all')">All tickets</button>
</div>
<div class="filters">
<select class="filter" id="f-channel" onchange="renderTable()">
<option value="">All channels</option>
<option>Control Panel</option>
<option>TheBatteryDude.com</option>
<option>Batteryoutfitters.com</option>
<option>Proguidebatteries.com</option>
</select>
<select class="filter" id="f-priority" onchange="renderTable()">
<option value="">All priority</option>
<option>Critical</option>
<option>High</option>
<option>Medium</option>
<option>Low</option>
</select>
<button onclick="loadTickets()" style="padding:6px 12px;font-size:11px;font-weight:700;font-family:inherit;border:1px solid var(--border);border-radius:4px;background:#fff;cursor:pointer;">Refresh</button>
</div>
</div>
<div style="overflow-x:auto;">
<table>
<thead>
<tr>
<th style="width:100px;">Ticket ID</th>
<th style="width:140px;">Channel</th>
<th>Issue summary</th>
<th style="width:85px;">Priority</th>
<th style="width:110px;">Reporter</th>
<th style="width:110px;">Expected by</th>
<th style="width:100px;">Status</th>
</tr>
</thead>
<tbody id="ticket-tbody">
<tr><td colspan="7" class="empty-state"><span class="spinner"></span> Loading tickets...</td></tr>
</tbody>
</table>
</div>
</div>
</div>

<script>
const WEBHOOK_URL = "https://script.google.com/macros/s/AKfycbwSVvgYBuSK3k4Kiif8Da9LibzeP0bB5qwbRreqAHrBV8MWTPE1QI1ePrc9VD0isDkoxw/exec
";

let allTickets = [];
let currentTab = "open";
let openDetailId = null;

const SAMPLE_TICKETS = [
{ticketId:"TBD-48821",channel:"TheBatteryDude.com",onBehalf:"self",reporterName:"Sarah K.",reporterEmail:"sarah.k@thebatterydude.com",priority:"High",pageArea:"/category/batteries",description:"Mobile images not loading on category page. Tested on iPhone 14 and Samsung Galaxy S22. Issue started around 9am CST.",followUps:"Browser: Safari | SKUs: All battery category images",aiSummary:"Mobile image loading failure on battery category page affecting all products.",aiCompleteness:"78",status:"Open",timestamp:"2026-04-07T09:15:00",expectedCompletion:"",notes:"",attachmentUrl:""},
{ticketId:"CP-48819",channel:"Control Panel",onBehalf:"customer",reporterName:"Mike T.",reporterEmail:"mike.t@thebatterydude.com",priority:"Critical",pageArea:"https://tbdcontrolpanel.com/orders/88234",description:"Shipping address not saving when I click update on order 88234. Page refreshes but old address stays.",followUps:"",aiSummary:"Order update failure — shipping address changes not persisting on save.",aiCompleteness:"85",status:"In Progress",timestamp:"2026-04-07T08:30:00",expectedCompletion:"2026-04-08",notes:"2026-04-07 10:00 — Investigating DB write issue on order update endpoint.",attachmentUrl:""},
{ticketId:"BAT-48815",channel:"Batteryoutfitters.com",onBehalf:"customer",reporterName:"Jen R.",reporterEmail:"jen.r@thebatterydude.com",priority:"Critical",pageArea:"/checkout",description:"Promo code field throwing 500 error on checkout. Multiple customers reporting this. Affects all promo codes tested.",followUps:"Browser: Chrome | Codes tested: SAVE10, SUMMER20",aiSummary:"Checkout promo code validation returning 500 server error, blocking purchases.",aiCompleteness:"92",status:"Open",timestamp:"2026-04-07T07:45:00",expectedCompletion:"2026-04-07",notes:"",attachmentUrl:""},
{ticketId:"PRO-48810",channel:"Proguidebatteries.com",onBehalf:"self",reporterName:"Sarah K.",reporterEmail:"sarah.k@thebatterydude.com",priority:"Medium",pageArea:"/batteries",description:"Filter by voltage not returning correct results. Selecting 12V shows 6V and 24V products mixed in.",followUps:"",aiSummary:"Product filter bug — voltage filter not correctly scoping results.",aiCompleteness:"70",status:"Open",timestamp:"2026-04-06T14:20:00",expectedCompletion:"",notes:"",attachmentUrl:""}
];

async function loadTickets(){
try{
const r = await fetch(WEBHOOK_URL+"?action=getTickets",{mode:"cors"});
if(!r.ok) throw new Error();
allTickets = await r.json();
}catch(e){
allTickets = SAMPLE_TICKETS;
}
updateMetrics();
renderTable();
}

function updateMetrics(){
const today = new Date().toDateString();
document.getElementById("m-open").textContent = allTickets.filter(t=>t.status==="Open").length;
document.getElementById("m-progress").textContent = allTickets.filter(t=>t.status==="In Progress").length;
document.getElementById("m-critical").textContent = allTickets.filter(t=>t.priority==="Critical"&&t.status!=="Resolved").length;
document.getElementById("m-resolved").textContent = allTickets.filter(t=>t.status==="Resolved"&&new Date(t.resolvedAt||t.timestamp).toDateString()===today).length;
}

function setTab(el,tab){
document.querySelectorAll(".tab").forEach(t=>t.classList.remove("active"));
el.classList.add("active");
currentTab = tab;
openDetailId = null;
renderTable();
}

function filterTickets(){
const ch = document.getElementById("f-channel").value;
const pr = document.getElementById("f-priority").value;
return allTickets.filter(t=>{
if(currentTab==="open" && t.status!=="Open") return false;
if(currentTab==="progress" && t.status!=="In Progress") return false;
if(currentTab==="resolved" && t.status!=="Resolved") return false;
if(ch && t.channel!==ch) return false;
if(pr && t.priority!==pr) return false;
return true;
});
}

function renderTable(){
const tickets = filterTickets();
const tbody = document.getElementById("ticket-tbody");
if(!tickets.length){
tbody.innerHTML = '<tr><td colspan="7" class="empty-state">No tickets found</td></tr>';
return;
}
tbody.innerHTML = "";
tickets.forEach(t=>{
const tr = document.createElement("tr");
tr.className = "ticket-row"+(openDetailId===t.ticketId?" open-detail":"");
tr.onclick = ()=>toggleDetail(t.ticketId);
tr.innerHTML = `
<td class="tid-cell">${t.ticketId}</td>
<td style="font-size:12px;">${t.channel}</td>
<td style="font-size:13px;">${truncate(t.aiSummary||t.description,70)}</td>
<td><span class="badge b-${t.priority.toLowerCase()}">${t.priority}</span></td>
<td style="font-size:12px;color:var(--text2);">${t.reporterName}</td>
<td class="completion-col">${t.expectedCompletion?fmtDate(t.expectedCompletion):"—"}</td>
<td><span class="badge b-${statusKey(t.status)}">${t.status}</span></td>`;
tbody.appendChild(tr);
if(openDetailId===t.ticketId){
const dr = document.createElement("tr");
dr.className = "detail-row";
dr.innerHTML = '<td colspan="7">'+buildDetail(t)+'</td>';
tbody.appendChild(dr);
}
});
}

function toggleDetail(id){
openDetailId = openDetailId===id?null:id;
renderTable();
if(openDetailId){
setTimeout(()=>{
const el = document.querySelector(".detail-panel");
if(el) el.scrollIntoView({behavior:"smooth",block:"nearest"});
},50);
}
}

function buildDetail(t){
const notes = parseNotes(t.notes);
const notesHtml = notes.length
? notes.map(n=>`<div class="note-entry"><div class="note-ts">${n.ts}</div><div class="note-body">${n.body}</div></div>`).join("")
: '<div style="font-size:13px;color:var(--text3);padding:6px 0;">No notes yet.</div>';

return `<div class="detail-panel">
<div class="detail-grid">
<div>
<div class="detail-section">
<div class="ds-title">Ticket info</div>
<div class="ds-row"><span class="ds-lbl">Ticket ID</span><span class="ds-val">${t.ticketId}</span></div>
<div class="ds-row"><span class="ds-lbl">Channel</span><span class="ds-val">${t.channel}</span></div>
<div class="ds-row"><span class="ds-lbl">On behalf of</span><span class="ds-val">${t.onBehalf==="customer"?"A customer":"Myself"}</span></div>
<div class="ds-row"><span class="ds-lbl">Reporter</span><span class="ds-val">${t.reporterName}</span></div>
<div class="ds-row"><span class="ds-lbl">Email</span><span class="ds-val" style="font-size:12px;">${t.reporterEmail}</span></div>
<div class="ds-row"><span class="ds-lbl">Submitted</span><span class="ds-val">${fmtDateTime(t.timestamp)}</span></div>
<div class="ds-row"><span class="ds-lbl">Priority</span><span class="ds-val"><span class="badge b-${t.priority.toLowerCase()}">${t.priority}</span></span></div>
${t.pageArea?`<div class="ds-row"><span class="ds-lbl">Page/Order</span><span class="ds-val" style="font-size:12px;word-break:break-all;">${t.pageArea}</span></div>`:""}
${t.attachmentUrl?`<div class="ds-row"><span class="ds-lbl">Attachment</span><span class="ds-val"><a href="${t.attachmentUrl}" target="_blank" class="attach-link">View file</a></span></div>`:""}
</div>
<div class="detail-section">
<div class="ds-title">Description</div>
<div class="desc-box">${t.description}${t.followUps?'<hr style="border:none;border-top:1px solid #e5e7eb;margin:8px 0;"><div style="font-size:12px;color:var(--text2);">'+t.followUps+'</div>':"" }</div>
${t.aiSummary?`<div class="ai-snippet" style="margin-top:8px;"><div class="ai-snippet-lbl">AI SUMMARY</div>${t.aiSummary}</div>`:""}
</div>
</div>
<div>
<div class="detail-section">
<div class="ds-title">Notes log</div>
<div class="notes-log" id="notes-log-${t.ticketId}">${notesHtml}</div>
<div class="notes-input-row">
<textarea id="note-input-${t.ticketId}" placeholder="Add a note..."></textarea>
<button class="add-note-btn" onclick="addNote('${t.ticketId}')">Add note</button>
</div>
</div>
</div>
</div>
<div class="action-row">
<div>
<label>Expected completion date</label>
<input type="date" id="ecd-${t.ticketId}" value="${t.expectedCompletion||""}" />
</div>
<div>
<label>Status</label>
<select class="status-select" id="status-${t.ticketId}">
<option ${t.status==="Open"?"selected":""}>Open</option>
<option ${t.status==="In Progress"?"selected":""}>In Progress</option>
<option ${t.status==="Resolved"?"selected":""}>Resolved</option>
</select>
</div>
<button class="save-btn" onclick="saveTicketUpdates('${t.ticketId}')">Save updates</button>
${t.status!=="Resolved"?`<button class="resolve-btn" onclick="resolveTicket('${t.ticketId}')">Mark resolved</button>`:""}
</div>
</div>`;
}

function addNote(id){
const inp = document.getElementById("note-input-"+id);
const body = inp.value.trim();
if(!body) return;
const t = allTickets.find(x=>x.ticketId===id);
if(!t) return;
const ts = new Date().toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit",hour12:true});
const newNote = ts+" — "+body;
t.notes = t.notes ? t.notes+"|"+newNote : newNote;
inp.value = "";
const log = document.getElementById("notes-log-"+id);
if(log){
const entry = document.createElement("div");
entry.className = "note-entry";
entry.innerHTML = `<div class="note-ts">${ts}</div><div class="note-body">${body}</div>`;
log.appendChild(entry);
log.scrollTop = log.scrollHeight;
}
}

async function saveTicketUpdates(id){
const t = allTickets.find(x=>x.ticketId===id);
if(!t) return;
const ecd = document.getElementById("ecd-"+id).value;
const status= document.getElementById("status-"+id).value;
const prevEcd = t.expectedCompletion;
t.expectedCompletion = ecd;
t.status = status;

// Check if we need to send completion date notification
let notifyEcd = false;
if(ecd && ecd !== prevEcd){
const submitted = new Date(t.timestamp);
const completion = new Date(ecd+"T23:59:00");
const diffHours = (completion - submitted)/(1000*60*60);
notifyEcd = diffHours > 24;
}

try{
await fetch(WEBHOOK_URL,{
method:"POST",
headers:{"Content-Type":"application/json"},
body:JSON.stringify({
action:"updateTicket",
ticketId:id,
notes:t.notes,
expectedCompletion:ecd,
status:status,
notifyExpectedCompletion:notifyEcd,
reporterEmail:t.reporterEmail
}),
mode:"no-cors"
});
}catch(e){}

updateMetrics();
renderTable();
alert("Ticket "+id+" updated."+(notifyEcd?" Reporter notified of expected completion date.":""));
}

async function resolveTicket(id){
const t = allTickets.find(x=>x.ticketId===id);
if(!t) return;
if(!confirm("Mark ticket "+id+" as Resolved? The reporter will be notified by email.")) return;
t.status = "Resolved";
t.resolvedAt = new Date().toISOString();
document.getElementById("status-"+id).value = "Resolved";
try{
await fetch(WEBHOOK_URL,{
method:"POST",
headers:{"Content-Type":"application/json"},
body:JSON.stringify({
action:"resolveTicket",
ticketId:id,
reporterEmail:t.reporterEmail,
reporterName:t.reporterName,
notes:t.notes
}),
mode:"no-cors"
});
}catch(e){}
openDetailId = null;
updateMetrics();
renderTable();
alert("Ticket "+id+" resolved. Reporter has been notified.");
}

function parseNotes(raw){
if(!raw) return [];
return raw.split("|").filter(Boolean).map(n=>{
const idx = n.indexOf(" — ");
if(idx>-1) return {ts:n.slice(0,idx),body:n.slice(idx+3)};
return {ts:"",body:n};
});
}

function truncate(s,n){ return s&&s.length>n?s.slice(0,n)+"...":s||""; }
function statusKey(s){ return s==="In Progress"?"progress":s.toLowerCase(); }
function fmtDate(d){ if(!d) return "—"; const [y,m,day]=d.split("-"); return m+"/"+day+"/"+y; }
function fmtDateTime(s){ if(!s) return "—"; return new Date(s).toLocaleString("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit",hour12:true}); }

loadTickets();
</script>
</body>
</html>