AI Initiative logoAI Initiative
Reading room / Conduir Spatial

Conduir Spatial — Technical Specification

Describes the technical structure of the shared spatial environment and its collaborating subsystems.

Spatial platform specification
This is the retained source text, not a new validation of its claims. Numerical results and comparative claims require the accompanying source review before public reuse.

Read the connected case study or article →

Not explicitly attributed in document header · 2026-03-03

Provenance, authorship and editorial notes

Conduir Spatial — Technical Specification

Id

spatial-technical

Project

Conduir Spatial

Source path

conduir-spatial/docs/TECHNICAL-SPEC.md

Source host

genesis

Source sha256

c4a1be199808cd50640b791c8eb3b2250c34a94888801e5d98089631475b6a3d

Repo root

conduir-spatial

Repo head

af341d6fc10f561455f76649800bbb064b82b083

Date

2026-03-03

Author

Not explicitly attributed in document header

Document status

Spatial platform specification

Source status statement

Phase 1 Complete, Phases 2–6 Planned

Summary

Describes the technical structure of the shared spatial environment and its collaborating subsystems.

Topics
  • Shared Worlds
  • Simulation
  • Orchestration
  • Conduir Spatial
  • Spatial platform specification
Related ids
  • spatial-long-vision
  • spatial-product-forge
  • spatial-xr
Evidence concerns
  • Technical design and named technologies do not establish a current deployed end-to-end environment.
  • Private source selection. Source inspection only; no fresh build, deployment or effectiveness certification.
Copy scope

Full original document, byte-identical

Copy status

copied-private-review

Format

markdown

Bytes

17209

Word count

2015

Headings
  • Conduir Spatial — Technical Specification
  • 1. Product Overview
  • Core Value Proposition
  • 2. Architecture
  • Tech Stack
  • 3. Data Model
  • 3.1 Scene Graph
  • 3.2 Node Visual Mapping
  • 3.3 Session Model
  • 3.4 Participant Model
  • 4. State Management
  • Zustand Store (`spatialStore`)
  • Mutation History
  • 5. Intent Pipeline
  • Supported Commands (Phase 1 — regex)
  • Phase 4+ (LLM-Backed)
  • 6. 3D Rendering
  • Scene Composition
  • Camera
  • Node Interaction
  • 7. WebXR Integration
  • Hardware Support
  • XR Features (Current)
  • XR Features (Phase 6 Planned)
  • 8. Voice Integration
  • Speech-to-Text (useSTT)
  • Text-to-Speech (useTTS)
  • 9. Templates
  • 10. Backend API
  • Port: 49815 (proxied via nginx :3100/api)
  • Planned Endpoints
  • Persistence
  • Neo4j Schema
  • NATS Stream
  • 11. Deployment
  • Static Frontend
  • Backend
  • Infrastructure Dependencies
  • 12. Security Considerations
Sensitive content review
Automated secret patterns
Email occurrences

0

Customer record terms
Limitation

Pattern scan plus editorial review; not a guarantee of no personal or proprietary material. Private copies retain source code examples, internal locations and attributions.

Attribution note

Source document attribution is preserved. Repository ownership or an agent role is not automatically authorship.

Date basis

Document header or dated filename; source may contain later updates

Source pin note

SHA-256 binds exact copied working-file bytes; repo_head is repository context, not proof that every byte is committed at that head.

Publication recommendation

Private technical reading candidate; editorial selection and claim review required before public use

Conduir Spatial — Technical Specification

Version: 1.0
Date: 2026-03-03
Status: Phase 1 Complete, Phases 2–6 Planned


1. Product Overview

Conduir Spatial is a 3D collaborative workspace where teams interact with interconnected concepts, tasks, decisions, and artifacts in a scene-graph environment. It supports desktop browsers, VR headsets (Meta Quest via WebXR), and voice interaction.

Core Value Proposition


2. Architecture

┌─────────────────────────────────────────────────────────────────────┐
│                        CLIENT (Browser / Quest)                     │
│                                                                     │
│  ┌─────────────┐  ┌──────────────┐  ┌──────────────┐              │
│  │ Three.js     │  │ Zustand      │  │ Yjs CRDT     │              │
│  │ Canvas + XR  │  │ Store        │  │ Provider     │              │
│  │              │  │ (truth)      │  │ (sync)       │              │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘              │
│         │                 │                  │                      │
│  ┌──────┴─────────────────┴──────────────────┴───────┐             │
│  │              React Component Tree                  │             │
│  │  SpatialCanvas → SpatialScene → SceneNode/Edge     │             │
│  │  SpatialHUD → Toolbar / Minimap / Chat / Roster    │             │
│  └────────────────────────┬──────────────────────────┘             │
│                           │                                         │
│  ┌────────────────────────┴──────────────────────────┐             │
│  │  Intent Pipeline                                   │             │
│  │  Input → Classifier → MutationBus → Store → Render │             │
│  └────────────────────────┬──────────────────────────┘             │
└───────────────────────────┼─────────────────────────────────────────┘
                            │ HTTP/SSE
┌───────────────────────────┼─────────────────────────────────────────┐
│                      NGINX (port 3100)                              │
│               /api/* → reverse proxy → :49815                       │
│               /*     → static /out                                  │
└───────────────────────────┼─────────────────────────────────────────┘
                            │
┌───────────────────────────┼─────────────────────────────────────────┐
│                  BACKEND (FastAPI, port 49815)                       │
│                                                                     │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
│  │ SessionStore  │  │ Neo4jScene   │  │ NATS         │              │
│  │ (SQLite WAL)  │  │ Store        │  │ Broadcaster  │              │
│  │ metadata      │  │ scene CRUD   │  │ pub/sub      │              │
│  └──────┬────────┘  └──────┬───────┘  └──────┬───────┘              │
│         │                  │                  │                      │
│    spatial_sessions.db   Neo4j :20687    NATS :44222                │
└─────────────────────────────────────────────────────────────────────┘

Tech Stack

LayerTechnologyVersion
3D EngineThree.js0.183
React BindingsReact Three Fiber9.5
HelpersReact Three Drei10.7
VR/ARReact Three XR6.6
FrameworkNext.js (static export)16.0
StateZustand (persist)5.0
CRDTYjs13.6
CSSTailwind CSS4.2
BackendFastAPI + Uvicorn0.115
Graph DBNeo4j5.26+
Message BusNATS JetStream2.9+
Session DBSQLite (aiosqlite)0.21+

3. Data Model

3.1 Scene Graph

The scene graph is the central data structure — a directed graph of typed nodes and edges in 3D space.

SceneGraph
├── nodes: Record<string, SceneNode>
│   ├── id: string (nanoid)
│   ├── type: concept | task | agent | person | artifact | decision | group | annotation
│   ├── label: string
│   ├── description?: string
│   ├── position: Vec3 { x, y, z }
│   ├── rotation: Vec3
│   ├── scale: Vec3
│   ├── style: { color, opacity, shape, emissive? }
│   ├── parentId?: string (hierarchy)
│   ├── metadata: Record<string, unknown>
│   ├── createdBy: string
│   └── createdAt: ISO string
│
└── edges: Record<string, SceneEdge>
    ├── id: string (nanoid)
    ├── sourceId: string
    ├── targetId: string
    ├── type: dependency | association | flow | hierarchy | reference
    ├── label?: string
    ├── style: { color, width, dashed, animated }
    ├── metadata: Record<string, unknown>
    ├── createdBy: string
    └── createdAt: ISO string

3.2 Node Visual Mapping

Node TypeDefault ShapeDefault ColorUse Case
concepthexagonindigo #6366f1Ideas, topics, themes
taskboxgreen #22c55eAction items, work units
agentspherepurple #a855f7AI personas
personsphereblue #3b82f6Human participants
artifactcardamber #f59e0bFiles, docs, services
decisiondiamondred #ef4444Decision records
groupboxgray #6b7280Container/folder
annotationcardslate #64748bNotes, comments

3.3 Session Model

SpatialSession
├── id: string (nanoid)
├── name: string
├── description?: string
├── status: active | archived | deleted
├── templateId?: string
├── createdBy: string
├── createdAt: ISO string
├── updatedAt: ISO string
├── participantCount: number
└── nodeCount: number

3.4 Participant Model

Participant
├── id: string
├── name: string
├── role: owner | editor | viewer
├── isAgent: boolean
├── provider?: claude | openai | gemini
├── avatarUrl?: string
├── cursorPosition?: Vec3
├── selectedNodeId?: string
├── color: string (hex)
├── joinedAt: ISO string
└── lastActiveAt: ISO string

4. State Management

Zustand Store (spatialStore)

Persisted (localStorage): showMinimap, showChat, showParticipants, gridVisible

Transient (runtime):

StateTypeDescription
sessionSpatialSession | nullCurrent session metadata
nodesRecord<string, SceneNode>Scene graph nodes
edgesRecord<string, SceneEdge>Scene graph edges
participantsRecord<string, Participant>Active participants
toolModeToolModeCurrent interaction tool
selectedNodeIdstring | nullCurrently selected node
hoveredNodeIdstring | nullCurrently hovered node
connectSourceIdstring | nullFirst node during connect
mutationHistorySceneMutation[]Undo stack (max 200)
mutationFutureSceneMutation[]Redo stack

Mutation History

All scene modifications are tracked as SceneMutation objects:


5. Intent Pipeline

User Input                Intent Classifier              Mutation Bus              Store
──────────                ─────────────────              ────────────              ─────
"add task auth"    ──→   { type: "add_node",      ──→   addNode({               ──→   nodes[id] = node
                           nodeType: "task",              type: "task",                 history.push(mutation)
                           label: "auth" }                label: "auth",
                                                          position: random() })

"connect auth     ──→   { type: "connect",        ──→   addEdge({               ──→   edges[id] = edge
 to database"            from: "auth",                   sourceId: found("auth"),
                          to: "database" }                targetId: found("database") })

Supported Commands (Phase 1 — regex)

PatternIntentAction
add <type> <label>add_nodeCreates node at random position
create <type> <label>add_nodeAlias
connect <A> to <B>connectCreates edge between nodes (label match)
link <A> and <B>connectAlias
delete <target>deleteRemoves node + connected edges
highlight <target> [in <color>]highlightSets emissive glow
annotate <target> with <text>annotateCreates annotation node nearby
layout / arrangelayoutRuns force-directed layout (Phase 5)
undo / redoundo/redoHistory navigation
anything elsechatPassed to chat panel

Phase 4+ (LLM-Backed)

Complex natural language will route through the LLM Gateway (local-service) for semantic understanding, entity extraction, and multi-step scene manipulation.


6. 3D Rendering

Scene Composition

<Canvas> (React Three Fiber)
├── XR Store (controllers, hands, gaze)
├── <SpatialScene>
│   ├── Ambient Light (0.4)
│   ├── Directional Light (0.8, shadow 2048x2048)
│   ├── Point Light (at [5,8,5])
│   ├── Stars (2000 particles)
│   ├── Fog (near: 30, far: 80)
│   ├── InfiniteGrid (100x100, fade)
│   ├── <EdgeLine> per edge (Bezier + arrowhead)
│   ├── <SceneNodeMesh> per non-annotation node
│   │   ├── Geometry (Sphere/Box/Diamond/Hexagon/Card)
│   │   ├── Material (color, emissive, roughness, metalness)
│   │   ├── Label (Billboard text)
│   │   └── Selection Ring (white wireframe)
│   ├── <Annotation> per annotation node (Billboard card)
│   └── <AgentAvatar> per AI participant (floating orb)
│
├── <SpatialHUD> (HTML overlay)
│   ├── Top Bar (session info, toggle buttons)
│   ├── SpatialToolbar (left, tool modes + palette)
│   ├── SpatialMinimap (bottom-right, SVG)
│   ├── SpatialChatPanel (right slide-out)
│   └── ParticipantList (bottom-right)
│
└── <DesktopControls>
    ├── OrbitControls (damped, constrained)
    └── Keyboard handlers (Ctrl+Z, G, Escape)

Camera

Node Interaction

Tool ModeClick NodeClick Void
selectSelect nodeDeselect
add—Create node at position
connectSet source, then target → create edgeCancel connect
annotateCreate annotation near nodeCreate annotation at click
highlightToggle emissive glow—
deleteRemove node + edges—

7. WebXR Integration

Hardware Support

XR Features (Current)

XR Features (Phase 6 Planned)


8. Voice Integration

Speech-to-Text (useSTT)

Text-to-Speech (useTTS)


9. Templates

Four built-in scene generators:

TemplateNodesEdgesLayoutPurpose
Whiteboard00EmptyFreeform ideation
Architecture873-tier horizontalSystem design review
Knowledge Graph812RadialTopic exploration
Timeline65Linear X-axisProject planning

10. Backend API

Port: 49815 (proxied via nginx :3100/api)

Planned Endpoints

MethodPathDescription
POST/api/sessionsCreate new session
GET/api/sessionsList active sessions
GET/api/sessions/:idGet session details
PATCH/api/sessions/:idArchive/update session
GET/api/sessions/:id/sceneLoad scene graph
PUT/api/sessions/:id/sceneSave scene graph
DELETE/api/sessions/:id/sceneDelete scene
POST/api/sessions/:id/mutationsApply mutation (broadcast via NATS)
POST/api/chatSSE endpoint for LLM interaction

Persistence

StoreTechnologyData
SessionStoreSQLite WALSession metadata, status, counts
Neo4jSceneStoreNeo4jFull scene graphs (nodes, edges, relationships)
NATSBroadcasterNATS JetStreamReal-time mutation streaming

Neo4j Schema

(:SpatialSession {id})
  -[:HAS_SCENE]->(:SpatialSceneGraph {session_id})
    -[:CONTAINS]->(:SpatialSceneNode {id, type, label, ...})

(:SpatialSceneNode)-[:SCENE_EDGE {id, type, label, ...}]->(:SpatialSceneNode)

NATS Stream


11. Deployment

Static Frontend

cd conduir-spatial
npm run build          # → /out directory
# Nginx serves /out on port 3100

Backend

cd conduir-spatial/server
uvicorn spatial_channel:app --host 0.0.0.0 --port 49815

Infrastructure Dependencies


12. Security Considerations

Continue exploring