Dashboard
Audience: All teams (sales/management read KPIs; QA/support verify metrics; engineering owns the StatsV2 endpoints) · Where in app: Default landing screen of the admin web app (/dashboard) · Plan availability: All plans
Restructured (2026-07, Agent K beta-gated).
/dashboardrendersDashboardHome.vue, which switches oncompany.agent_k_beta_enabled:
- Beta companies get the new "Today on Knock Knock" command center (
frontend/src/views/Dashboard/Index.vue) — in-page tabs Today / Impact / Visitors plus Funnel (shown only when the Nox funnel is enabled;/funneldeep links redirect to/dashboard?tab=funnel) and Campaigns (tokenized links + ManyReach push for externally-sent campaigns,Dashboard/Campaigns.vue). Today = live scored visitors + today's pipeline rail; Impact = question-led weekly report; Visitors = every live visitor, scored.- Non-beta companies keep the six-tab analytics described below — which moved wholesale to
frontend/src/views/Reports/Index.vue(and for beta companies is served at/reports).The section below documents the six-tab analytics view; file paths are now under
src/views/Reports/.
The analytics view shows headline KPIs, a Nox-powered "what matters now" strip, and six analytics tabs (Overview, Hot Leads, Conversions, Traffic Sources, Auto Engage, Engagement). A global date-range picker drives every block, and every visible number is also answerable on demand by Nox via chat/voice.
What it does
- Surfaces the headline numbers (visitors, hot leads, conversions, traffic sources, engagement) for a chosen date range with period-over-period comparison.
- Lets admins drill into each metric area through dedicated tabs.
- Provides quick links from a metric row into the underlying chat, recorded session, or person detail.
- Runs a Nox proactive strip (
NoxStrip) above the metric cards that turns the dashboard from reactive to proactive by pushing the engine's top insights. The insight engine (ms-aiPOST /knox-agent/insights) is the single source for all Nox surfaces.
How it works
The analytics page (frontend/src/views/Reports/Index.vue, previously Dashboard/Index.vue) is a tabbed Vue 3 view. It:
- Reads
tab,start,endfrom the URL query (or defaults: tab =overview, range = today). - Renders
DashboardHeader(headline summary cards + date picker), thenNoxStrip, thenTabNav, then the active tab component. - Fetches headline stats once (
/stats/v2/headline) regardless of active tab; each tab fetches its own StatsV2 endpoint. - Keeps state ↔ URL in sync both directions (so browser back/forward and shareable links work).
All data comes from StatsV2 POST endpoints on the backend, called through the useStatsV2Query composable (TanStack Query, 5-minute staleTime). Each request body is { start_date, end_date, ...extra }.
The six tabs
| Tab | Component | Endpoint | Shows |
|---|---|---|---|
| Overview | OverviewTab | /stats/v2/headline, /stats/v2/activity-timeline, /stats/v2/page-performance | Summary cards + activity area chart + page performance table |
| Hot Leads | HotLeadsTab | /stats/v2/hot-leads | Top-scoring visitors, paginated |
| Conversions | ConversionsTab | /stats/v2/conversions | Conversion rows (chat / call / booking), paginated |
| Traffic Sources | TrafficSourcesTab | /stats/v2/traffic-sources, /stats/v2/traffic-source-sessions | Source funnel + expandable session lists |
| Auto Engage | HooksTab | /stats/v2/hook-performance | Auto-engage hook performance cards |
| Engagement | EngagementTab | /stats/v2/engagement | Per-channel cards, video unmutes, handoff timeline |
Headline summary cards (Overview tab)
SummaryCards.vue renders three cards from the headline payload:
| Card | Field | Tooltip / meaning |
|---|---|---|
| Engagement Rate | engagement_rate | % of total visitors who interacted with at least one channel (chat/video/voice) during their session |
| Response Rate | response_rate | % of AI auto-engage messages that received a reply or action |
| Conversions | total_conversions | Total conversions in the period |
The DashboardHeader itself surfaces additional headline fields: total_visitors (with day_over_day_change), hot_leads_count + top_leads, conversion split (chat_conversions / call_conversions / booking_conversions), top_sources, best_hook / hook_response_rate, engagement_summary (chat/video/voice), and visitor_buckets (hourly or daily granularity).
Activity Timeline (Overview)
Area chart of three series — Visitors, Engagements, Conversations — over the period. Granularity (hour vs day) comes from the endpoint and switches the x-axis labels automatically.
Page Performance (Overview)
Table of pages with Visitors and Avg Time columns. Client-side sortable by either column; shows 10 rows with Show All / Show Less.
Hot Leads tab
- Loads 20 leads at a time, sorted by score, with a Load More button that appends (preserves scroll position rather than paging).
- Each
LeadCardshows: name (or "Anonymous Visitor"), company, job title, email, location, traffic source, search keyword, and an intent score (0–100) rendered as a colored bar/badge — green ≥70, amber ≥40, slate below. - "View" opens the recorded session in a new tab; expanding the card shows
LeadDetailPanel.
Conversions tab
- Table of conversion rows, 20 at a time with Load More.
- Columns: Date, Contact (name + email/phone), Type (chat / call / booking — booking also shows date/time), Page, Actions.
- Action buttons open the originating chat (
?chat=) or recorded session (?session=).
Traffic Sources tab
- Four funnel summary cards: Total Sources, Total Visitors, Total Engaged, Total Conversions (summed client-side).
- A per-source list with funnel columns: visitors → identified → engaged → responded → conversions plus an engagement rate bar.
- Source rows show top referrer domains and top search keywords; AI-referrer domains are relabeled to friendly names (chatgpt.com → ChatGPT, perplexity.ai → Perplexity, claude.ai → Claude, gemini.google.com → Gemini, copilot.microsoft.com → Copilot, poe.com → Poe).
- Clicking a source expands an inline session list (separate
/stats/v2/traffic-source-sessionscall, 10 at a time, Load more). - Shows 10 sources by default with Show All.
Auto Engage tab
- Grid of
HookCards, 12 per page with prev/next pagination. - Each card: the hook message text, Shown / Responded / Rate stats, a response-rate bar, and the best source for that hook.
Engagement tab
- Three
ChannelCards — Chat, Video Calls, Voice Calls — each showing Sessions, Avg Duration (video/voice), Bookings, and Handoffs (handoffs_per_channel). - A Video Preview Unmutes card:
video_unmutes.total_sessions(visitors who unmuted) andtotal_unmutes. - A Handoff Timeline (AI→human handoffs over the period).
Configuration & options
The dashboard is read-only analytics; the only "settings" are view controls:
| Control | Location | Behavior |
|---|---|---|
| Date range picker | DashboardHeader (top) | Preset ranges (Today, Last 7/30/90 Days) or custom start/end; drives every block. Persisted to URL start/end as YYYY-MM-DD. |
| Comparison label | Header (auto) | "vs yesterday" when range ≤1 day, otherwise "vs previous N days". |
| Active tab | Tab nav | Persisted to URL tab; one of overview, hot-leads, conversions, traffic-sources, hooks, engagement. |
| Per-tab pagination | Each tab | Hot Leads / Conversions: 20 + Load More. Auto Engage: 12 + page nav. Traffic Sources / Page Performance: 10 + Show All. Traffic-source sessions: 10 + Load more. |
| Page Performance sort | Overview table | Click column header to sort by Visitors or Avg Time (client-side). |
Behaviors & edge cases
- StatsV2 replaced an older Stats endpoint. Older/cached dashboards may surface different numbers than StatsV2.
- Headline perf fix (2026-07): chat conversions are aggregated instead of
distinct— headline dropped from ~34s to ~200ms. - "Identified" narrowed: the identified-visitors metric now counts only sessions with
apollo_dataorsnitcher_dataset (real enrichment), so identification rates dropped vs older numbers by design. - Hot leads sort on score total. If you re-tune lead-score weights, historical leads are not re-scored.
- Conversions = bookings + contact captures (chat/call/booking types). If your business defines conversion differently, slice further with Nox.
- Date defaults to today (start of day → end of day in the browser's local time via moment).
- Each tab resets its pagination when the date range changes.
- Queries are disabled until both
startandendare set; results cache for 5 minutes (staleTime). - Empty states are explicit per tab ("No hot leads found for this period", etc.); errors render an
ErrorAlert. - Anonymous visitors appear as "Anonymous Visitor" / "Unknown" until identified.
Plan & limits
All plans include the dashboard. There is no documented row/quota cap on dashboard analytics beyond the underlying data retention — verify retention windows against current product/package config. Live-session viewing and lead-intelligence enrichment shown in some rows can be add-on gated (see Glossary → Add-on).
Technical implementation
- Owning UI (six-tab analytics):
frontend/src/views/Reports/—Index.vue(page + URL state),components/DashboardHeader.vue,components/TabNav.vue(hooks tab labeled "Auto Engage"), and the per-tab folders (overview/,hot-leads/,conversions/,traffic-sources/,hooks/,engagement/). - Command center:
frontend/src/views/Dashboard/Index.vue(+Campaigns.vue); route switchersDashboardHome.vue/ReportsHome.vue. - Data layer:
composables/useStatsV2Query.js(TanStack Query factory; POSTs to/stats/v2/*withstart_date/end_date). - Owning service for the data:
StatsV2Controllerin backend (MongoDB aggregation overuser_sessions,chats, bookings, lead scores). - Nox strip:
frontend/src/components/knox/NoxStrip.vue, fed by ms-aiPOST /knox-agent/insights— see ms-ai and Nox Assistant. - Charts: ApexCharts (
apexchartcomponent), theme-aware via the app store dark-mode flag.
Related
- Platform Overview
- Quick Start
- Glossary — definitions for Hot Lead, Conversion, Auto-Trigger, etc.
- Help & Troubleshooting
- Identity Graph · Nox Assistant