figma guide

Designing threat hunting queries and investigation workspace UI in Figma: pivots, timelines, and handoff

Design threat hunting query and investigation workspace UI in Figma with query builder, pivot tables, entity timelines, case notes, and Dev Mode specs for enterprise SOC admin.

Published
Updated
Jul 24, 2026
Read time
8 min
Level
Intermediate

Quick answer

Threat hunting UI lets analysts search across logs, pivot on entities (user, IP, hash), and build a timeline—not just react to alerts. Design a query builder with field picker, time range, and saved hunts; results table with pivot actions; entity timeline merging auth, network, and app events; investigation canvas linking alerts, IOCs, and automation runs; and case export for incident runbooks. Start from the Figma guides hub and pair with SIEM ingestion, audit log, sessions, and Dev Mode handoff.


Who this is for

  • Product designers building SOC investigation workspaces, hunt notebooks, and entity-centric timelines for enterprise Security consoles.
  • Design system teams aligning query chips with search UI, tables, and badges for severity and entity type.
  • Engineers implementing query DSL, cross-index joins, pivot caching, and investigation state persistence with RBAC.

Hunt library (saved queries hub)

HuntLibrary
├── Header: Threat hunting · [ New query ] [ Scheduled hunts ] [ Shared with team ]
├── Summary: 48 saved hunts · 6 scheduled · 12 ran this week
├── Filters: Data source · Author · Tag · Last run outcome
└── Row: Impossible travel follow-up · SIEM + Auth · Last run: 3 hits · Owner: SOC Tier 2
ColumnContent
Hunt name”Rare admin API calls after hours”
Data sourcesAuth logs, SIEM, app audit, DNS
ScheduleManual / Daily / Weekly / On new IOC
Last runHit count, duration, anomaly score
SharedTeam library vs personal draft
Linked playbookIncident runbook step reference

Verdict: library separates proactive hunts (scheduled) from reactive pivots (spawned from alert or IOC).

Promote high-signal hunts to automation triggers when pattern stabilizes.


Query builder

QueryBuilder
├── Data source: Authentication logs · Index: auth-* · Time: Last 7 days
├── Filters:
│   ├── event_type = login_failure
│   ├── count_by(user_id) > 5
│   └── geo.country NOT IN allowlist_countries
├── Group by: user_id, source_ip
├── Visualization: Table · [ Run ] [ Save ] [ Schedule ]
└── Query assist: "Show similar to alert #8842"
ControlUI detail
Field pickerAutocomplete with type (string, IP, timestamp, enum)
Time rangeRelative presets + absolute; timezone label for global teams
Aggregationscount, distinct, rate, percentile—for hunt not just filter
Join hint”Enrich with user profile” pulls HR/identity attributes
Query historyUndo stack; compare last 3 runs
Cost estimate”Scans ~2.1M events” before Run on large ranges
RBACRestrict raw log fields per team role

Use combobox for field names; sliders for threshold tuning.

Query assist: paste alert ID or IOC value—pre-fill filters from alert context.


Results table and pivot actions

ResultsTable
├── 23 entities · Sort: failure_count desc
├── Row: jchen@acme.com · 14 failures · 8 source IPs · Last: 2h ago
├── Pivot: [ View timeline ] [ All sessions ] [ Related alerts ] [ Add IOC ]
└── Bulk: [ Open investigation ] [ Assign analyst ] [ Export CSV ]
Pivot actionDestination
View entity timelineInvestigation workspace (user-centric)
Pivot on IPNew query with IP as anchor
Related alertsFiltered alert inbox
Add to caseAttach rows to open investigation
Promote to IOCThreat intel review queue
Run workflowAutomation dry-run on selection

Right-click row for context menu—mirror dropdown patterns.

Empty results: suggest broader time range or linked hunt template—not blank screen.


Investigation workspace (case canvas)

InvestigationWorkspace
├── Case: INV-2026-0412 · Credential stuffing hypothesis · Status: Open
├── Entities: jchen@acme.com · 185.220.101.42 · AS12345 · Alert #8842
├── Tabs: Timeline · Graph · Notes · Evidence · Actions
├── Timeline (merged):
│   ├── 3:10 PM — 12 login failures (jchen) from 185.220.101.42
│   ├── 3:12 PM — [Alert fired](/designing-security-alerting-rules-and-notification-routing-ui-in-figma/) Impossible travel
│   ├── 3:15 PM — [Automation run](/designing-security-automation-and-response-workflows-ui-in-figma/) #4521 started
│   └── 3:17 PM — Session revoke approved
└── Actions: [ Escalate ] [ Close as FP ] [ Link runbook ] [ Export case ]
TabContent
TimelineChronological merge of auth, network, app, alert, automation events
GraphEntity nodes (user ↔ IP ↔ device ↔ app) with edge weights
NotesAnalyst markdown; @mention; pinned hypotheses
EvidenceSaved query snapshots, redacted log excerpts, screenshots
ActionsAssign, severity, link runbook, trigger workflow

Hypothesis strip: editable “We think X because Y”—drives recommended next pivots.

Assign cases with team roles—Tier 1 vs Tier 2 vs IR lead.


Entity timeline detail

EntityTimeline — user: jchen@acme.com · Last 30 days
├── Filter: Auth · App · Admin · Network
├── 2026-07-23 3:10 PM — login_failure ×12 · IPs: 185.220.*, 198.51.*
├── 2026-07-23 3:18 PM — session_revoked · automation step 4
├── 2026-07-22 — login_success · Seattle · MFA pass
└── Anomaly band: Unusual IP cluster highlighted
Event typeVisual
AuthLogin success/fail, MFA, password reset
SessionNew session, revoke—link active sessions
AdminRole change, API key created
NetworkDNS, proxy, IP allowlist hit
Alert / RunInline chip linking source system
IOC matchFeed indicator overlay on IP/hash

Zoom presets: 24h, 7d, 30d; brush select to spawn sub-query.

Use progress indicators when loading large timelines—show partial results streaming.


Scheduled hunts and hit review

ScheduledHuntReview
├── Hunt: Rare OAuth scope grants · Ran 6:00 AM · 2 new hits
├── Hit 1: app_id=legacy-crm · scope=admin · user=contractor@vendor.com
├── Analyst action: [ Investigate ] [ Suppress 30d ] [ False positive ]
└── Auto-case: Create draft investigation when hits > 0 and severity ≥ Medium
PatternUI detail
Hit notificationRoute via alert channels
SuppressTime-boxed; documents reason in audit log
Auto-caseOptional; prevents hits sitting unreviewed
Hunt diffCompare hit count vs prior run—spike badge
Tune huntInline “Edit query” without leaving review

Pair with posture dashboard—track % hunts reviewed within SLA.


Collaboration and handoff

CaseHandoff
├── Assignee: Ana Liu → Marcus Chen · Reason: Escalation Tier 2
├── Handoff note: Pivot on AS12345; 3 other users same /24
├── Preserved: 4 saved queries · 2 hypotheses · Timeline bookmark 3:10–3:20 PM
└── Member impact: Account locked — link [recovery UI](/designing-suspicious-login-alerts-and-account-recovery-ui-in-figma/)
FeaturePurpose
@mention in notesNotify assignee without email thread
Query snapshotImmutable evidence—even if index retention expires
Timeline bookmarkShare deep link to 10-minute window
Export packPDF + JSON for compliance export
Legal holdFreeze case evidence—investigation immutability flag

Read-only viewers: auditors with custom role—no pivot actions, export only.


Prebuilt hunt templates

TemplateAnchor entityData sourcesPairs with
Impossible travel follow-upUserAuth + geoSuspicious login
IOC sighting sweepIP or hashSIEM + proxyThreat intel feeds
Admin API anomalyService accountApp audit + API keysPAM
Lateral movement sketchHost / IPVPN + internal DNSIP allowlist
OAuth app abuseapp_idOAuth audit + app approvalsDLP
Post-automation validationUserAuth after workflow runAutomation history
Leaked credential checkEmail domainDark web feed + authSecrets vault

Template gallery uses cards with estimated scan cost and required roles.


Common mistakes

MistakeWhy it hurtsFix
Query builder only, no workspaceAnalysts lose context between pivotsPersistent investigation canvas
Timeline single-sourceMisses alert ↔ auth correlationMerged multi-index timeline
No query cost estimateAccidental $50k scanShow event count before Run
PII in shared hunt linksGDPR violationRBAC + redaction on export
No evidence snapshotRetention deletes proofImmutable query snapshot on case
Pivot dead-endsAnalyst re-types filtersOne-click pivot from any cell
Hunts without review SLAScheduled noise ignoredHit review queue with notify
Graph-only investigationOverwhelms Tier 1Default to table + timeline
Case close without FP feedbackSame hunt fires againClose reason feeds hunt tuning
No link to member recoveryLocked user stuckSurface recovery path in case

  1. Design hunt library with schedules, data sources, and playbook links.
  2. Build query builder with field picker, aggregations, cost estimate, and alert assist.
  3. Add results pivots to timeline, IP, alerts, IOC, and automation actions.
  4. Create investigation workspace with entities, hypothesis, notes, and evidence tabs.
  5. Implement entity timeline merging auth, network, alerts, and automation events.
  6. Wire scheduled hit review with auto-case, suppress, and audit trail.
  7. Document query DSL and pivot API in Dev Mode.

FAQ

Hunt workspace vs audit log?

Audit log is immutable org-wide record; investigation workspace is analyst-assembled narrative with hypotheses and snapshots for one incident.

Pivot from IOC table?

Yes—“Search sightings” pre-fills SIEM query for indicator value across indexes.

Who can run destructive pivots?

Same as automation approversteam role gates “Run workflow” from investigation; others get dry-run only.

Scheduled hunt vs alert rule?

Alerts fire on single-event thresholds; hunts find multi-event patterns. Promote stable hunts to alerts when logic crystallizes.

Case retention?

Align with data retention—open cases exempt until closed; closed cases archive per policy; legal hold overrides deletion.


Next steps

Share on X

§ Keep reading

Related guides.