Qmap
3D network traffic visualization. 16 experiment cycles from first render to production component.
View Contexts
c16March 18, 2025View context abstraction and first semantic view: policy violation.
New QMap prop — array of dataflow objects with semantic status field (violation, healthy, warning). Renders flows on load, maps status to visual treatment, highlights involved actors, dims others.
BaseFlow FLOW_STATUSES map: violation (red, 1.3x thickness), warning (amber, 1.2x), healthy (green), default (purple).
useHighlightedDataflows — creates flows, highlights involved actors, dims others, focuses camera. QMapPolicyViolation wrapper component.
Schema-driven visual tuning infrastructure (DevExpressionControls, useExpressionWiring) built and parked for future use.
Narrative
Different consumers of QMap need fundamentally different configurations. A policy violation page needs a focused, non-interactive view highlighting specific actors. A dashboard needs the full interactive map. This cycle establishes the abstraction: the wrapper says what the data represents, QMap decides how to render it.
The policy violation view was the first real application: pass an array of dataflows with status: "violation" and QMap renders them immediately, colors the flows red, highlights the involved actors, dims everything else, and focuses the camera. Expression props — schema-driven live tuning of visual parameters — were built and parked for future experimentation.
Production Component
c15March 18, 202514 experiment cycles promoted to a clean, props-driven Vue component.
37 files promoted and reorganized: QMap.vue (props → scene), useSceneReactivity (watches props → reconciler → transitions), public exports for QMap, useQMap, SceneManager, CameraControls, GroupingStrategy.
actors, connections, groupBy, width, height, backgroundColor, frustumSize, selectable, autoStart, faviconProxy.
ready, error, actor-select, actor-deselect, transition-start, transition-end.
4 bugs resolved during promotion: race condition in dual load paths, RAF leak in TransitionOrchestrator, render target leak in SceneManager.captureImage, private API access in CameraControls.
Narrative
This was not an experiment cycle — it was a promotion cycle. No new features were invented. Instead, c14's battle-tested code was reorganized, cleaned, and wired into a props-driven Vue component that other projects can import and pass reactive data to.
The reactivity model is clean: props change → useSceneReactivity watches → LayoutEngine computes → SceneReconciler diffs → TransitionOrchestrator animates → camera fits. First load is a direct build; subsequent prop changes trigger animated reconciliation. Pending updates during active transitions are queued and applied after completion.
Actor Expansion
c14February 17, 2025AI Agents and Users join as first-class actor types.
AI Agent (icosahedron with grounded spin + hover bob) and User (sphere + cone silhouette with slow spin). 6 total actor types.
Realistic scenarios: aiTeamScenario, userWorkspaceScenario. AI vendor URLs (OpenAI, Anthropic, Hugging Face, Cohere, Replicate).
Users can serve as grouping context — by Department, Role, Location, Timezone.
Narrative
The final experiment cycle added two actor types that reflect how modern networks actually work: AI agents making API calls to LLM providers, and users whose traffic patterns vary by role and department.
All prior cycles' achievements — layout engine, reconciler, transitions, entity system, composable architecture — carried forward without modification. The architecture was stable enough that adding new actor types was a matter of defining meshes and test scenarios, not structural changes.
Group Mode
c13February 12, 2025View modes for exploring different organizational dimensions.
Topology, Geography, and Group view modes. Same actors, different grouping context — switch dimensions without data changes.
Narrative
Built on c12's reconciler and layout system — both carried forward without modification. Group mode lets the same set of actors be viewed through different organizational lenses: topology (infrastructure hierarchy), geography (regional grouping), or custom groups.
Switching between modes triggers the 4-phase reconciler transition. Actors morph from one grouping to another with animated boundary reshaping. The architecture proved its composability — new features stack on existing systems.
State Reconciliation
c12February 11, 2025Incremental updates with 4-phase animated transitions. Scales from 7 to 300 actors.
SceneReconciler — pure diff engine. 4-phase animation: EXIT → RUG RESHAPE → MOVE → ENTER.
Validated incremental updates with 300 actors — no full-scene rebuilds needed.
Narrative
Before c12, changing the scene meant rebuilding it. The SceneReconciler computes diffs and orchestrates a 4-phase transition: departing actors exit, boundary rugs reshape, actors move to new positions, new actors enter. Each phase completes before the next begins.
This was the cycle that made Qmap production-viable. A pure diff engine means the visualization can respond to live data changes — actors appearing, disappearing, regrouping — without jarring scene resets. Tested with 300 actors and the transitions remained smooth.
Layout Engine
c9 + c10 + c11February 5, 2025Pluggable layout strategies replace hardcoded positioning.
4 pluggable strategies: Grid, Spiral, Circle Pack, Phyllotaxis. Pure math in virtual grid units, rendering as separate layer.
Clean separation: layout computes positions, renderer places meshes. Bin packing for efficient space use.
Narrative
c9 attempted a dual layout system for infrastructure topology (Cloud → Region → Cluster → Namespace → Node → Pod) but the complexity was too high. c10 pivoted to a general-purpose pluggable layout engine — four strategies that can be swapped at runtime.
The key architectural insight from c11: layout math operates in virtual grid units, completely decoupled from Three.js rendering. This separation meant layout logic could be tested and iterated independently. The grid layout with bin packing was promoted to src/ as the first production-ready module.
Screenshots
c8February 4, 2025Screengrab-ready scenes and swappable test data for visual curation.
Screengrab-ready scene configurations with carefully curated actor positions and flow patterns.
Swappable test data sets for different visual scenarios and use-case demonstrations.
Narrative
Before pitching or sharing the visualization, it needed to look deliberate. This cycle focused on curating scenes that showcased the design intent — enough actors to feel populated, flows that told a readable story, boundaries that framed without cluttering.
Swappable test data meant the same scene could demonstrate different network architectures without rebuilding from scratch. The screenshot tooling became the quality bar for subsequent cycles — if a scene didn't look good as a static capture, the design wasn't done.
Interaction + Camera
c4 + c5 + c6 + c7February 2–3, 2025From static scene to explorable space. Tag-based grouping, camera focus, morphing transitions.
Tag-based boundary morphing — flat data with runtime tag queries, more flexible than nested hierarchies.
Auto-framing selected actors with easing. State save/restore for returning to previous views.
Flat-to-3D perspective morphing. Key learning: single animation source of truth needed to avoid conflicts.
Narrative
c4 explored semantic zoom and hierarchical decomposition, but pivoted to tag-based grouping in c5 — flat data with runtime queries proved more flexible than pre-built nested structures. The same actor can appear in different groupings without data duplication.
Camera focus (c6) and context morphing (c7) made the scene interactive. The camera system frames selected actors with smooth easing and can restore previous views. The morphing transitions between flat and 3D perspectives were satisfying but exposed the need for a single animation coordinator.
Project Genesis
c1 + c2 + c3January 30–31, 2025First render — actors, flows, and boundaries in 3D space.
4 entity types with semantic 3D shapes: App (rounded cube), Service (hexagonal prism), Database (stacked cylinder), Vendor (octahedron + favicon).
DashFlow (GPU-accelerated) for production, LineFlow as fallback. Encodes volume, direction, protocol, and PII presence.
13 zone visualization strategies explored. Key finding: boundaries need subtlety to not overwhelm flows.
Narrative
Three cycles in two days established the foundation: semantic shapes that encode meaning at a glance, animated data flows between actors, and boundary zones that group without dominating. The core question — "what's talking to what, and what boundaries does that traffic cross?" — was answerable from the first render.
Vendor favicons required a Vite proxy plugin to solve CORS. DashFlow's GPU-accelerated approach was validated as the production path. The OOP entity architecture proved solid enough to carry through every subsequent cycle without modification.