insigz docs
Product Spec

App Surfaces (every screen in detail)

Every insigz screen in detail — Overview, Explore, Sources, Cases, Entity Inspector, network, reports, sessions, workshop, AAR — plus cross-surface conventions.

Each surface below lists: what it is · what's on it · key interactions. All read from the active project's slice of the canonical model.


Overview (/overview) — app-overview.jsx

The project home and default authenticated route (doctrine Q1 — no vanity "Today" dashboard). At-a-glance: source-health summary, open-case count, recent cases, latest alerts, latest reports. Header actions: SETTINGS/project, OPEN EXPLORE →/explore.

Explore (/explore, /workspace) — app-screens.jsx (live-ops) / app-research.jsx (research)

The investigation workspace.

  • Live-ops: a MapLibre + Carto basemap (theme-aware) with toggleable layers (Vessels / Cables / Events / Sanctions / Weather), a collapsible layer chip (◇ LAYERS · 3/5), and the AsOf control (green ● LIVE / amber AS-OF + one-click ↻ RETURN TO LIVE). A focus-mode () hides nav + chat; ESC exits. The analyst chat sits alongside; its right-edge reservation shifts map overlays left.
  • Research mode (app-research.jsx): a document/evidence workspace — filters rail (collapsible), an assertions list with source-sentence provenance and confidence, a world map of findings, and a license-gated export modal. The mode switch is inline where both modes are enabled.

Sources (/sources) — the fusion layer

The catalog of feeds powering this project, with live (simulated) health. Stat tiles: live sources, observations/min, entities tracked, 30-day uptime. A family filter row, then a table: source · family · status (healthy/degraded) · rate · last obs · errors · INSPECT. Header actions: ◈ ONBOARD SOURCE/sources/onboard (the Ontology Agent), + ADD SOURCE → project source config. The D/E/L/E ViewToggle previews empty/loading/error states.

Source inspect (/sources/:id) — app-detail-views.jsx

Opened from INSPECT. Header (name, family·connector·rate) + back/configure. Body: a status banner (healthy → "streaming nominally"; degraded → "down-weighted in fusion"), SIGNALS stat tiles (rate, last obs, errors·24h, status), the LINEAGE chain (Source→…→Report), and a RECENT OBSERVATIONS list (id, body, timestamp/place). Footer note: every record signed, classification scoped at the row, normalization additive.

Cases (/cases) — list

The investigations table for the project (open / watch / closed), with priority and counts. + NEW CASE opens NewCaseModal (title, priority HIGH/MEDIUM/LOW, status OPEN/WATCH) → creates + navigates to the new case + toast.

Case detail (/cases/:id) — app-screens.jsx

Collapsible header with its own AsOf control and a fullscreen map mode. Sections (each collapsible): Hypothesis · Events · Entities. Header actions: HIDE/SHOW HEADER, ← CASES, DRAFT REPORT/reports. Events/entities link into the Entity Inspector.

Entity Inspector (/entities/:id) — app-entity-inspector.jsx

Drill into one entity (mock set: VESSEL-SF12, CABLE-ESTLINK2, ENTITY-Q42-12). Tombstone, <Freshness>, its own <AsOfControl> (pin the entity to a past time), observations, related entities, and sanctions exposure. Pinned-state banner spans the surface.

Entity network (/network) — app-entity-network.jsx

Link analysis as a navigable graph: entities as nodes, grounded ties as edges, rendered as a spinnable 3D point cloud (grab to rotate, scroll to zoom, drag a node). Colour by cluster / type / risk; node size + brightness track centrality; a side rail lists top connectors and strongest bridges. Tie-strength and entity-type filters prune the subgraph; click a node → Entity Inspector. Agent-suggested ties render dashed until a human confirms them (Q10). View modes: network (graph) · geo (on the basemap) · timeline (Pattern of Life). Listens for insigz:network-focus / insigz:network-view so the chat can pop a focused graph out as a canvas. Full detail: 14-entity-network.md.

Pattern of life (/network → timeline) — <ActivityTimeline>

An entity's activity over time against a robust baseline band, with anomalies flagged and scored (robust-z + direction). Drag to brush a window (totals, peak, anomalies vs expected) or click a bucket to inspect a moment; a scope picker switches which entity you're profiling. A deviation is the canonical trigger for a Standing Watch (§13). Full detail: 15-pattern-of-life.md.

Reports (/reports) — list

Columns: ID · TITLE (with ↪ derivedFrom when applicable) · ORIGIN (STAND-ALONE / DERIVED / IMPORTED) · STATUS (DRAFT/PUBLISHED) · DATE · AUTHOR · action (EDIT for drafts, VIEW for published). + DRAFT REPORT opens the Q7 three-origin modal (default STAND-ALONE; DERIVED reveals a case selector; IMPORTED reveals a file field) → creates + toast. Doctrine Q7: reports can stand alone — they are not forced to come from a case.

Report view / editor (/reports/:id) — app-detail-views.jsx

A document view: Executive summary · Timeline · Entities · Assessment · Recommendations, plus a CITATIONS chip row. A DRAFT shows a draft banner and an ✎ EDIT DRAFT toggle that turns sections into editable textareas ("DONE EDITING" → success toast). A PUBLISHED report shows ⤓ EXPORT PDF (info toast + print). Derived reports link back to their case.

Sessions (/sessions) — wargame projects only

The multiplayer Strategy-Day sessions table: session id · name · status (SCHEDULED/LIVE/COMPLETED) · date · cells · players · AAR status · OPEN. + NEW SESSION guides to author the scenario in the Workshop first. Seed examples include a LIVE Move-2 session and a COMPLETED Spring Strategy Day with a published AAR. Full mechanics: 07-wargame-extension.md.

Session detail (/sessions/:id) — app-detail-views.jsx

Header (name, status·date·cells·players) + actions: ← SESSIONS, ⛨ ENTER ARENA (live → /team-view), ✑ AAR (→ /aar-drafting). Body: a status banner, the phase timeline (Phase 0 Briefing → Phase 3 Resolution, with times and the current phase marked), the cells (NATO/EU, Hybrid, Civil/Media — only as many as the session has), and a live faculty queue card when the session is LIVE.

Workshop (/workshop) — app-workshop-editors.jsx

Scenario authoring, three tabs: Action categories (what each cell may DO), Adjudicator playbook (how the AI drafts consequences), Inject library (real-world events fired during play). Each is an editable table/list with EDIT (opens a modal editor) / DEL / + NEW, each firing a toast. Injects flow into the alert model (doctrine Q6 — no standalone inject surface in the live product).

AAR drafting (/aar-drafting) — app-aar-drafting.jsx

Staff after-action report. Left rail groups: NARRATIVE (Timeline · Decisions · Base rates · Prompts) + APPENDIX (Reasoning, with §-divided chains). Each section has approve / un-approve; top-right reads N/5 APPROVED. Export gate (Q8): the PDF export is locked (⊘ EXPORT LOCKED · N TO GO) until all five sections are human-approved; then SHIP TO CUSTOMER →. PREVIEW PDF opens a print-styled A4 window (running headers/footers, page-break control, signed-by footer) and triggers window.print().

Team view (/team-view) — arena previews

Preview what each cell sees — NATO/EU, Hybrid Threat, Civil/Media — because information asymmetry is enforced at the database, not by trust (doctrine). A role switcher + an optional NATO Light variant for daytime authoring. Backed by product-artboards*.jsx.


Cross-surface conventions

  • D/E/L/E view-state previews — most list surfaces carry a ViewToggle (Default / Empty / Loading / Error) that swaps in <EmptyState>/<SkeletonTable>/<ErrorState> for design review.
  • AsOf appears on Explore, Case detail, and Entity Inspector.
  • The global analyst chat is the primary command surface (§16): it overlays every authenticated route (right panel on desktop, bottom sheet on mobile) except the onboarding surface where it gates. Verbs happen as in-chat widgets; the map, network, timeline and arena are the canvases you pop out to. A six-step journey rail sits in its header.
  • Every action gives feedback — navigation, a modal, or a status toast (see 09-notifications-and-ux.md).