diff --git a/src/components/SystemsIntelligenceCanvas.jsx b/src/components/SystemsIntelligenceCanvas.jsx index 04661ac..4f6722b 100644 --- a/src/components/SystemsIntelligenceCanvas.jsx +++ b/src/components/SystemsIntelligenceCanvas.jsx @@ -1,18 +1,12 @@ -import React, { useState, useEffect, useMemo, useRef, useCallback } from "react"; +import React, { useState, useMemo, useCallback } from "react"; import { motion, AnimatePresence } from "framer-motion"; -import { - Activity, Cpu, Network, ShieldCheck, Zap, Radio, - Layers, Compass, Database, Terminal, RefreshCw, X, Info, CheckCircle2, - Server, GitCommit, ShieldAlert, ArrowUpRight, CpuIcon, BookOpen, - HelpCircle, Link2, Sparkles, Code2, ArrowRight, History, Lightbulb, - Workflow, Layers3, ChevronRight, Share2, CornerDownRight +import { + Layers, Compass, X, History, ChevronRight } from "lucide-react"; import clsx from "clsx"; import { twMerge } from "tailwind-merge"; import { useSpatial } from "../SpatialContext"; import { useSystemCommand } from "../context/SystemCommandContext"; -import EngineeringReviewPanel from "./EngineeringReviewPanel"; -import { CASE_STUDIES } from "../data/missions"; import { MICRO_EDUCATION_DB, MISSION_TOPOLOGIES, AMBIENT_NODES, AMBIENT_LINKS } from "../data/canvas-atlas"; import { mapReveal } from "../lib/motion"; @@ -29,18 +23,7 @@ export default function SystemsIntelligenceCanvas() { const [selectedNode, setSelectedNode] = useState(null); const [hoveredLink, setHoveredLink] = useState(null); const [selectedTech, setSelectedTech] = useState(null); - const [viewMode, setViewMode] = useState("presentation"); - const activeMissionData = useMemo(() => { - if (selectedMissionId) { - return CASE_STUDIES.find((m) => m.missionId === selectedMissionId) || CASE_STUDIES[0]; - } - return CASE_STUDIES[0]; - }, [selectedMissionId]); - - const [eventLogIndex, setEventLogIndex] = useState(0); - - // Phase 2: Engineering Memory (Session Exploration History Trail) const [explorationHistory, setExplorationHistory] = useState(() => { return [ { type: "mission", id: "ops-dronly", label: "ops.dronly.in" } @@ -49,34 +32,13 @@ export default function SystemsIntelligenceCanvas() { const addToHistory = useCallback((item) => { setExplorationHistory((prev) => { - // Avoid duplicate consecutive entries if (prev.length > 0 && prev[prev.length - 1].id === item.id) return prev; const filtered = prev.filter((x) => x.id !== item.id); return [...filtered.slice(-5), item]; }); }, []); - // Pillar 1: Live Pulse Traffic Density & Simulation Controls - const [trafficDensity, setTrafficDensity] = useState('NORMAL'); // 'NORMAL' | 'HIGH_LOAD' | 'FAILOVER' - const [manualBreakerTripped, setManualBreakerTripped] = useState(false); - - const isBreakerActive = manualBreakerTripped || trafficDensity === 'FAILOVER'; - - // Computed Dynamic Operations Telemetry Metrics - const pingRate = trafficDensity === 'FAILOVER' ? '142.0k pings/s' : trafficDensity === 'HIGH_LOAD' ? '68.5k pings/s' : '12.4k pings/s'; - const workerPool = trafficDensity === 'FAILOVER' ? '256 Workers' : trafficDensity === 'HIGH_LOAD' ? '128 Workers' : '64 Workers'; - const healthSLA = isBreakerActive ? '94.10% SHIELDED' : trafficDensity === 'HIGH_LOAD' ? '98.42% ARMED' : '99.98% NOMINAL'; - - // Packet animation speed - const packetAnimDuration = trafficDensity === 'FAILOVER' ? '0.5s' : trafficDensity === 'HIGH_LOAD' ? '1.2s' : '3.8s'; - - // Cycle telemetry event log ticker - useEffect(() => { - const interval = setInterval(() => { - setEventLogIndex((prev) => prev + 1); - }, 4000); - return () => clearInterval(interval); - }, []); + const packetAnimDuration = "3.8s"; const activeTopology = useMemo(() => { if (selectedMissionId && MISSION_TOPOLOGIES[selectedMissionId]) { @@ -87,15 +49,8 @@ export default function SystemsIntelligenceCanvas() { const currentNodes = activeTopology ? activeTopology.nodes : AMBIENT_NODES; const currentLinks = activeTopology ? activeTopology.links : AMBIENT_LINKS; - const currentEvents = activeTopology ? activeTopology.events : [ - "Systems Mesh active: Monitoring distributed nodes", - "Telemetry link integrity: 99.94% Nominal", - "Zero security vulnerabilities detected in active build", - "Select a Flagship Mission above to inspect full topology" - ]; - const themeColor = isBreakerActive ? "#f43f5e" : trafficDensity === 'HIGH_LOAD' ? "#fbbf24" : activeTopology ? activeTopology.hexColor : "#00f0ff"; - const themeText = isBreakerActive ? "text-rose-400" : trafficDensity === 'HIGH_LOAD' ? "text-amber-400" : activeTopology ? activeTopology.textClass : "text-cyan-electric"; + const themeColor = activeTopology ? activeTopology.hexColor : "#00f0ff"; // Helper to resolve node coordinates const getNodePos = useCallback((id) => { @@ -203,29 +158,6 @@ export default function SystemsIntelligenceCanvas() { ); })} - -
-
- - -
-
{/* Phase 2: Engineering Memory (Session History Trail) */} @@ -259,17 +191,8 @@ export default function SystemsIntelligenceCanvas() { - {/* Layer 2: Main Vector Node Canvas Stage OR Engineering Review Mode Panel */} - {viewMode === "review" ? ( -
- setViewMode(mode)} - /> -
- ) : ( -
+ {/* Layer 2: Main Vector Node Canvas Stage */} +
{/* SVG Vector Links Layer */} @@ -573,46 +496,9 @@ export default function SystemsIntelligenceCanvas() {
Open a system
-

- Click a node for situation, choice, and cost. -

)}
- )} - - {/* Layer 3: Contextual Operational Telemetry Status Bar */} -
- -
- Active Mission - - {activeTopology ? activeTopology.title : "Global Systems Mesh"} - -
- -
- gRPC Worker Pool - - {workerPool} - -
- -
- Live Ingest Rate - - {pingRate} - -
- -
- Circuit Breaker SLA - - {healthSLA} - -
- -
); diff --git a/src/components/TrustCenter.jsx b/src/components/TrustCenter.jsx index 8d41200..6f4e5e7 100644 --- a/src/components/TrustCenter.jsx +++ b/src/components/TrustCenter.jsx @@ -125,7 +125,7 @@ export default function TrustCenter() { -
+
{TRUST_SECTIONS.map((section) => { const isActive = activeSection === section.id; diff --git a/src/data/canvas-atlas.js b/src/data/canvas-atlas.js index 3ddff74..2043548 100644 --- a/src/data/canvas-atlas.js +++ b/src/data/canvas-atlas.js @@ -75,7 +75,7 @@ export const MICRO_EDUCATION_DB = { } }; -// Flagship Mission Topologies Configuration with deep 4-Pillar Engineering Insights, Decision Ledgers, Evolution & Recommendations +// Flagship topologies. Nodes, edges, short notes. export const MISSION_TOPOLOGIES = { "ops-dronly": { id: "ops-dronly", @@ -100,7 +100,6 @@ export const MISSION_TOPOLOGIES = { label: "Ingest", x: 50, y: 35, isCore: true, - detail: "Ingests 50k telemetry pings/sec with <2ms jitter across distributed UAV clusters.", insight: { problem: "Positions arrive faster than a table wants.", decision: "Stream them. Cache the hot path.", @@ -113,7 +112,6 @@ export const MISSION_TOPOLOGIES = { label: "Edge", x: 22, y: 18, isCore: false, - detail: "Low-latency bi-directional UDP/gRPC gateway operating on edge gateways.", insight: { problem: "The cell drops mid-flight.", decision: "UDP at the edge. gRPC on the way back.", @@ -126,7 +124,6 @@ export const MISSION_TOPOLOGIES = { label: "Hexes", x: 78, y: 18, isCore: false, - detail: "Hierarchical hexagonal spatial indexing for real-time airspace collision avoidance.", insight: { problem: "Pairwise distance does not scale.", decision: "Hex buckets. Look up the neighbors.", @@ -139,7 +136,6 @@ export const MISSION_TOPOLOGIES = { label: "Viewport", x: 18, y: 68, isCore: false, - detail: "Sub-100ms camera feed passthrough with H.264 hardware encoding.", insight: { problem: "HLS is too late if someone is still flying.", decision: "WebRTC for the loop.", @@ -152,7 +148,6 @@ export const MISSION_TOPOLOGIES = { label: "Shed", x: 82, y: 68, isCore: false, - detail: "Automatic failover circuit breaker tripping at 95% channel saturation.", insight: { problem: "A backlog can take the core with it.", decision: "Shed the extra pings. Keep the loop.", @@ -165,7 +160,6 @@ export const MISSION_TOPOLOGIES = { label: "Replay", x: 50, y: 82, isCore: false, - detail: "Partitioned hypertable time-series store for trajectory replay and diagnostics.", insight: { problem: "Raw GPS fills a disk.", decision: "Compress the chunks. Replay the path.", @@ -213,7 +207,6 @@ export const MISSION_TOPOLOGIES = { label: "Events", x: 50, y: 35, isCore: true, - detail: "Immutable append-only event store for clinical audit trails and state projections.", insight: { problem: "A row overwrite loses who changed what.", decision: "Write events. Read a projection.", @@ -226,7 +219,6 @@ export const MISSION_TOPOLOGIES = { label: "Lock", x: 20, y: 20, isCore: false, - detail: "Zero-knowledge encryption for PHI data streams with strict RBAC enforcement.", insight: { problem: "A shared clinic cannot leak a chart.", decision: "Encrypt the field before it hits the wire.", @@ -239,7 +231,6 @@ export const MISSION_TOPOLOGIES = { label: "Chart", x: 80, y: 20, isCore: false, - detail: "3D real-time odontogram state reducer with optimistic UI synchronization.", insight: { problem: "The chart cannot wait on the server.", decision: "Reduce locally. Sync when you can.", @@ -252,7 +243,6 @@ export const MISSION_TOPOLOGIES = { label: "X-ray", x: 18, y: 68, isCore: false, - detail: "Automated radiograph image ingestion with GPU-accelerated contrast normalization.", insight: { problem: "An X-ray is too big for the waiting room.", decision: "Chunk it. Normalize at the edge.", @@ -265,7 +255,6 @@ export const MISSION_TOPOLOGIES = { label: "Tenants", x: 82, y: 68, isCore: false, - detail: "Tenant isolation gateway providing dynamic database schema partitioning.", insight: { problem: "Two clinics cannot share a row.", decision: "A key per practice. A schema per key.", @@ -278,7 +267,6 @@ export const MISSION_TOPOLOGIES = { label: "Offline", x: 50, y: 82, isCore: false, - detail: "Offline-first clinic local node relay with automatic peer reconciliations.", insight: { problem: "The line goes down mid-appointment.", decision: "A local copy. Reconcile later.", @@ -325,7 +313,6 @@ export const MISSION_TOPOLOGIES = { label: "Bus", x: 50, y: 35, isCore: true, - detail: "Interoperable clinical message broker streaming FHIR v4 compliant health records.", insight: { problem: "Hospitals do not speak the same shape.", decision: "One event shape for everyone.", @@ -338,7 +325,6 @@ export const MISSION_TOPOLOGIES = { label: "Wearable", x: 22, y: 18, isCore: false, - detail: "High-frequency wearable telemetry for heart-rate variability and kinematic tracking.", insight: { problem: "A wristband drops samples.", decision: "Smooth on the phone. Then stream.", @@ -351,7 +337,6 @@ export const MISSION_TOPOLOGIES = { label: "Corridor", x: 78, y: 18, isCore: false, - detail: "Rules-based automated engine evaluating recovery trajectory against clinical benchmarks.", insight: { problem: "A coach cannot watch every joint.", decision: "A rule for the corridor. A ping if they leave it.", @@ -364,7 +349,6 @@ export const MISSION_TOPOLOGIES = { label: "Pose", x: 18, y: 68, isCore: false, - detail: "Computer vision kinematic range-of-motion angle quantification worker.", insight: { problem: "Self-report lies.", decision: "Pose on the camera. Count the angle.", @@ -377,7 +361,6 @@ export const MISSION_TOPOLOGIES = { label: "Translate", x: 82, y: 68, isCore: false, - detail: "Bidirectional converter translating HL7 v2 messages to modern FHIR streams.", insight: { problem: "The hospital still speaks HL7 v2.", decision: "Translate into the event bus.", @@ -390,7 +373,6 @@ export const MISSION_TOPOLOGIES = { label: "Practice", x: 50, y: 82, isCore: false, - detail: "End-to-end encrypted mobile client receiving real-time clinical exercise plans.", insight: { problem: "Paper handouts do not get done.", decision: "Show the motion. Count the set.", @@ -437,7 +419,6 @@ export const MISSION_TOPOLOGIES = { label: "Skills", x: 50, y: 35, isCore: true, - detail: "High-dimensional vector embedding space connecting engineering domain competencies.", insight: { problem: "Keywords miss the neighbor skill.", decision: "Put skills near each other in a space.", @@ -450,7 +431,6 @@ export const MISSION_TOPOLOGIES = { label: "Notes", x: 22, y: 20, isCore: false, - detail: "Structured mapping linking engineering decisions directly to live proof assets.", insight: { problem: "A claim without a note is a claim.", decision: "Link the choice to the case.", @@ -463,7 +443,6 @@ export const MISSION_TOPOLOGIES = { label: "Cases", x: 78, y: 20, isCore: false, - detail: "Dynamic dependency graph mapping case studies to architectural artifacts.", insight: { problem: "A case study hides the joints.", decision: "Draw the graph. Open a node.", @@ -476,7 +455,6 @@ export const MISSION_TOPOLOGIES = { label: "Scope", x: 18, y: 68, isCore: false, - detail: "Quantifies technical scope, architectural ownership, and systemic business impact.", insight: { problem: "Seniority is usually a vibe.", decision: "Show the scope of the choice.", @@ -489,7 +467,6 @@ export const MISSION_TOPOLOGIES = { label: "Model", x: 82, y: 68, isCore: false, - detail: "Calculates throughput improvements, latency drops, and availability metrics.", insight: { problem: "Abstract work hides the cost.", decision: "Show latency and dollars as a model.", @@ -502,7 +479,6 @@ export const MISSION_TOPOLOGIES = { label: "Cover", x: 50, y: 82, isCore: false, - detail: "Generates context-aware technical briefs for engineering leadership.", insight: { problem: "A recruiter and a CTO want different depths.", decision: "A cover first. The rest on open.", @@ -549,7 +525,6 @@ export const MISSION_TOPOLOGIES = { label: "Local model", x: 50, y: 35, isCore: true, - detail: "Local private LLM orchestrator running on dedicated hardware for deep contextual synthesis.", insight: { problem: "A public model sees the journal.", decision: "Run it on this machine.", @@ -562,7 +537,6 @@ export const MISSION_TOPOLOGIES = { label: "Vault", x: 22, y: 18, isCore: false, - detail: "Encrypted local LanceDB vector store holding personal engineering journal entries.", insight: { problem: "Years of notes are not searchable.", decision: "Embed them locally.", @@ -575,7 +549,6 @@ export const MISSION_TOPOLOGIES = { label: "Journal", x: 78, y: 18, isCore: false, - detail: "Synthesizes daily commit logs, ADR updates, and architectural notes into a knowledge graph.", insight: { problem: "The day's choice evaporates.", decision: "Parse commits and notes into a graph.", @@ -588,7 +561,6 @@ export const MISSION_TOPOLOGIES = { label: "Focus", x: 18, y: 68, isCore: false, - detail: "Dynamic priority scheduler structuring deep work blocks based on cognitive load.", insight: { problem: "Context switch kills the afternoon.", decision: "Group the hard work.", @@ -601,7 +573,6 @@ export const MISSION_TOPOLOGIES = { label: "Key", x: 82, y: 68, isCore: false, - detail: "Hardware security key authorization protecting context access.", insight: { problem: "A stolen laptop is the vault.", decision: "A hardware key. No key, no notes.", @@ -614,7 +585,6 @@ export const MISSION_TOPOLOGIES = { label: "Pair", x: 50, y: 82, isCore: false, - detail: "Encrypted peer-to-peer device state replication across local workstations.", insight: { problem: "Two machines. No cloud.", decision: "Encrypt the delta over the LAN.", @@ -645,7 +615,6 @@ export const AMBIENT_NODES = [ id: "amb-1", label: "Distributed Telemetry Ingest", x: 20, y: 25, - detail: "High-throughput telemetry ingestion network.", insight: { problem: "Ingesting multi-source telemetry data at scale.", decision: "Distributed edge ingestion nodes.", @@ -657,7 +626,6 @@ export const AMBIENT_NODES = [ id: "amb-2", label: "Edge C2 Command Router", x: 80, y: 25, - detail: "Edge Command & Control routing gateway.", insight: { problem: "Low-latency command dispatching.", decision: "Direct edge RPC routing.", @@ -670,7 +638,6 @@ export const AMBIENT_NODES = [ label: "Enterprise Event Core", x: 50, y: 45, isCore: true, - detail: "Central event orchestration & message router.", insight: { problem: "Decoupling microservices across enterprise workloads.", decision: "Centralized event streaming bus.", @@ -682,7 +649,6 @@ export const AMBIENT_NODES = [ id: "amb-4", label: "Capability Knowledge Graph", x: 25, y: 75, - detail: "Vector embedding knowledge graph.", insight: { problem: "Connecting complex domain skills & evidence.", decision: "Graph database with vector embeddings.", @@ -694,7 +660,6 @@ export const AMBIENT_NODES = [ id: "amb-5", label: "Clinical Event Store", x: 75, y: 75, - detail: "Immutable append-only event store.", insight: { problem: "Maintaining compliance audit trails.", decision: "Append-only event sourcing.",