Skip to content

Reporting Dashboard - TODO

Everything discussed and noted during the June 2026 reporting sessions. Items marked [done] are implemented but uncommitted on the current branch.

Done (uncommitted)

  • [done] KPI cards with secondary percentage display (e.g. "41.8% of plays")
  • [done] Remove ALL CAPS from widget labels
  • [done] Deduplicate metric pills in Daily Metrics (standard wins over bunny)
  • [done] Categorized pill selector (Core, Engagement, Clicks, Video)
  • [done] Data-aware UI: hide categories/metrics/stages with zero data
  • [done] Chart z-ordering: higher-value series drawn behind lower-value ones
  • [done] Increase chart series slots from 4 to 8
  • [done] BaseSelect custom dropdown (replace all native selects)
  • [done] Searchable BaseSelect for enterprise/workspace dropdown
  • [done] Workspace switch confirm dialog when viewing a report
  • [done] Shared design system: unified buttons, inputs, selects, overlays
  • [done] Engagement funnel: hide zero stages, hide entirely when only impressions
  • [done] Video Completion widget (horizontal bars, not donut)
  • [done] Per-resource breakdown: dynamic metrics from report selection, hide zero-value
  • [done] User avatar menu with My Reports link and Log out
  • [done] Preview mode: shows exactly what non-authenticated customer sees
  • [done] Merged "Edit layout" + "Edit report" into single Edit flow
  • [done] Toolbar: normal [Edit] [Preview], edit mode [Report settings] [Preview] [Done]
  • [done] Section widgets (Engagement, Video, Daily Metrics, Per-resource) removable in edit mode
  • [done] Engagement funnel: add/remove stages in edit mode from available metrics
  • [done] Report cards: "Opened 2h ago" relative time, hover-to-reveal delete
  • [done] Inline title editing in edit mode (click to rename, enter/blur saves, escape cancels)
  • [done] Saved report URL sync (edits to layout/metrics update the stored report URL)
  • [done] CSV export (Export CSV button in toolbar, downloads visible metrics)
  • [done] Active range zoom: relative 1% threshold across all series (replaces absolute 300)
  • [done] Bar chart strong colors (80% opacity vs 15% for line fill)

Edit mode polish

Remove all empty KPI cards [done]

  • "Remove empty" button in edit mode next to "+ Add metric"
  • Removes all KPI cards where the value is 0
  • Batch removal via removeByKeys() to avoid index-shifting bugs

Drag-and-drop section reordering [done]

  • All sections (Engagement, Video Completion, Daily Metrics, Per-resource) reorderable via DnD in edit mode
  • Dynamic rendering via visibleSections computed from sectionOrder ref
  • Drag handle + remove button per section

user-select: none in edit mode [done]

  • Disable text selection on all widgets during edit mode (prevents accidental selection during drag)
  • Only allow text selection on editable fields (e.g. report name)

Drag-and-drop stage reordering [done]

  • Engagement funnel: reorder stages via DnD in edit mode (impressions pinned to top)
  • Any widget with ordered items (funnel stages, chart series) should support reordering where it makes sense

Smart caching on stage removal [done]

  • Removed redundant metrics from useCounts and useBuckets query keys (API always fetches 'base')
  • Engagement funnel uses single useReportTotals call for all candidates instead of separate stage-only fetch
  • Removing/reordering stages is now instant (no refetch)

Resize section widgets [done]

  • Height presets (compact/normal/tall) cycling button in edit mode for Daily Metrics chart
  • CSS variable --section-height flows from section-wrap to chart-wrap
  • Click button to cycle: compact (200px) -> normal (320px) -> tall (480px)

Charts

Per-creative comparison chart [done]

  • Bar chart comparing a selected metric across all creatives
  • Dropdown to switch metric (only shows metrics with data)
  • Auto-switches to horizontal bars when 6+ creatives
  • Section only visible when 2+ creatives in scope
  • Respects --section-height for resizing

Heatmap [done]

  • Weekday x hour grid showing activity distribution
  • Uses Bunny hourly-summary data (already cached)
  • Dropdown to switch metric, hover tooltips with values
  • Color intensity scales from transparent to primary color

Chart type selector [done]

  • Line/Bar toggle in Daily Metrics chart header
  • Switches between <Line> and <Bar> Chart.js components with same data
  • Future: stacked bar (multi-creative), heatmap (temporal distribution)

Humology needs (relayed by McSneaky, 29 Jun 2026)

  • [done] Custom metrics — supported via Bunny custom metric columns
  • [done] Different view % — Watched 25/50/75/100% available as KPI cards, funnel stages, and chart series
  • [done] Impressions — standard metric
  • [done] Interacted — standard metric
  • [done] View-through rate — computed metric (watched_100 / impressions), added to COMPUTED_METRICS
  • Device type breakdown — Bunny CSV Device column is already parsed, needs UI (filter or breakdown widget)
  • Country breakdown — not in current data sources, needs backend support

Flow-based metrics

Flow step reporting

  • Show metrics per flow step (operator): how many users reached each step
  • Drop-off funnel through the flow
  • Which answers/paths are most popular
  • Needs flow structure from creative JSON + per-step tracking data

Flow comparison

  • Compare flow performance across creatives
  • "Which flow variation converts best?"

Conversation metrics

  • Average conversation depth (how many steps)
  • Most common exit points
  • Answer distribution per question

My Reports improvements

Rename reports [done]

  • Double-click report name on card to inline edit
  • Enter to confirm, Escape to cancel, blur to save
  • Uses existing reportsStore.rename()

Report card customization

  • Color picker for card accent color (persist in saved report)
  • Optional image/thumbnail on cards

My Reports access

  • Already accessible from user avatar menu [done]
  • Consider also showing in sidebar or dashboard

Per-resource breakdown improvements

Dynamic chart per resource [done]

  • SVG sparkline per resource card showing daily trend of first selected metric
  • Pure SVG path, no Chart.js dependency
  • Reuses cached buckets data (no extra API calls)

Sort/filter resources [done]

  • Search input to filter resources by name
  • Sort pills for each visible metric (click to sort, click again to toggle asc/desc)
  • Active sort pill shows arrow indicator

Report templates

Template presets

  • Pre-built report configurations for common use cases: "VAST Video", "Interactive", "Standard Display"
  • Each template pre-selects relevant KPI cards, widgets, and chart metrics
  • Template selector in report builder when creating a new report

Save as template

  • Save current report layout/metrics as a reusable template
  • Available from Edit mode or toolbar

Data-aware metric filtering

Hide irrelevant metrics

  • VTR and video metrics should not appear when creative(s) have no video data (plays = 0)
  • Extend existing zero-data hiding to computed metrics and KPI card picker
  • Applies across all widgets: KPI picker, chart pills, funnel stage picker

Engagement section with no data

  • Engagement funnel shows "No data for this date range" even when there's genuinely no engagement data
  • If only impressions are selected with no engagement metrics, consider: show impressions instead, or warn that there are no engagement metrics to compare against
  • Alternatively: auto-remove empty sections when exiting edit mode
  • User can already remove it manually in edit mode, but default state should be smarter

Per-resource breakdown improvements (cont.)

Chart pills don't affect per-resource breakdown

  • Selecting different metrics in Daily Metrics pills doesn't update per-resource breakdown metrics
  • Per-resource should either sync with chart selection or have its own independent metric picker

Filter resources label

  • "Filter resources..." placeholder is unclear — should say "Filter creatives..." or "Search creatives..." since resources are creatives in this context

Chart tooltip improvements

Richer tooltip for computed metrics

  • VTR tooltip currently only shows "View-through Rate: 93.8%"
  • Should also show the underlying values: e.g. "1,142 of 1,217 plays" or "watched_100 / impressions"
  • Similarly for CTR: show "clicks / impressions" breakdown
  • Gives context to the percentage without needing a second chart

Other

Seconds in View multi-unit display [done]

  • formatDuration() already auto-scales: seconds -> minutes -> hours
  • Metric uses format: 'duration' which routes through formatDuration

Export

  • [done] CSV download of visible metrics (Export CSV button in toolbar)
  • PDF export of the report view

Sharing

  • Share report URL (already works since URL is source of truth)
  • Consider short URL generation for cleaner sharing

Date range comparison

  • Compare current period vs previous period
  • Should be opt-in via a "Compare" toggle, not always-on
  • Delta arrows on KPI cards (up/down percentage change)
  • Could also compare across campaigns/creatives

Internal documentation