Dashboard
The dashboard (/) is the nerve center of Brand Protect. It renders the live scan progress, the findings tables, infrastructure campaigns, the audit log, and links to generated reports.
Live scan view
Section titled “Live scan view”- A 7-phase SVG timeline (Domain enumeration → Auditing) highlights the current stage.
- A progress bar plus per-stage progress (processed/total).
- The current stage’s telemetry as Python reports it.
- Start / Stop / Resume controls.
- A “Re-run from phase” bar appears for terminal scans, letting you resume from any of the 7 phases.
Findings tables
Section titled “Findings tables”The dashboard has two tabs:
- Domains — the primary findings table (~45 columns), with sortable headers, a filter box, 15 rows per page, a column-visibility dropdown, and resizable columns. Rows are expandable (
[ + ]) to reveal the full signal trace: strengths, weights, contributions, phishing verdict, AI summary, and notes. - Social — social findings, 10 per page, with a notes toggle.
Unknown or AI-pending columns render as —.
Campaigns
Section titled “Campaigns”Domains sharing a host IP or DNS A-record are clustered into infrastructure campaigns (minimum cluster size 2). After a scan, the dashboard can request LLM-written narratives for each campaign (via POST /v1/campaign/narratives); a Stimulus controller swaps the deterministic narrative for the AI text when it arrives.
Alerts & audit log
Section titled “Alerts & audit log”- Alerts surface operational issues: incomplete brand profile (scan gating), stale AI configuration, missing webhook URL.
- The audit log shows the last 20 events (
scan_started,scan_completed,scan_failed,scan_cancelled,scan_resumed,settings_changed,webhook_sent,report_generated,takedown_generated).
Scanner telemetry
Section titled “Scanner telemetry”When no scan is running, the dashboard shows the scanner status panel: last scan state, next scheduled rescan, and pending work.
Reports
Section titled “Reports”Completed scans produce PDF reports; the dashboard links to GET /reports/:scan_id (and ?variant=summary for the executive summary).