diff --git a/frontend/index.html b/frontend/index.html
index 62664d0..e7dd161 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -70,18 +70,37 @@ function setBtn(id, loading, label) {
function barChart(rows, labelKey, valueKey) {
if (!rows?.length) return '
No data
'
- const max = Math.max(...rows.map(r => r[valueKey] || 0), 1)
- const W = 680, H = 140, padL = 10, padB = 24
- const bw = Math.max(4, Math.floor((W - padL) / rows.length) - 3)
- const bars = rows.map((r, i) => {
- const bh = Math.floor(((r[valueKey] || 0) / max) * (H - padB - 4))
- const x = padL + i * (bw + 3)
- const y = H - padB - bh
- const lbl = esc(String(r[labelKey] || '').slice(0, 10))
- return `
- ${lbl}`
+ const vals = rows.map(r => r[valueKey] || 0)
+ const max = Math.max(...vals, 1)
+ const W = 680, H = 160, padL = 52, padR = 10, padT = 24, padB = 28
+ const chartW = W - padL - padR
+ const chartH = H - padT - padB
+ const bw = Math.max(8, Math.floor(chartW / rows.length) - 4)
+
+ // Y-axis ticks (4 lines)
+ const ticks = [0, 0.25, 0.5, 0.75, 1].map(t => {
+ const val = Math.round(max * t)
+ const y = padT + chartH - Math.floor(t * chartH)
+ const label = val >= 1000 ? (val/1000).toFixed(1)+'k' : val
+ return `
+ ${label}`
}).join('')
- return ``
+
+ const bars = rows.map((r, i) => {
+ const val = r[valueKey] || 0
+ const bh = Math.max(2, Math.floor((val / max) * chartH))
+ const x = padL + i * (chartW / rows.length) + (chartW / rows.length - bw) / 2
+ const y = padT + chartH - bh
+ // date label: show MM/DD
+ const lbl = esc(String(r[labelKey] || '').slice(5, 10))
+ // value label on top of bar
+ const valLbl = val >= 1000 ? (val/1000).toFixed(1)+'k' : val
+ return `
+ ${valLbl}
+ ${lbl}`
+ }).join('')
+
+ return ``
}
// ── Home ──────────────────────────────────────────────────────────────────
@@ -265,7 +284,10 @@ function renderIngest() {
-
Daily Event Volume
+
+
Daily Event Volume
+ events ingested per day
+