Conduir Spatial — WebXR Specification
Version: 1.0
Date: 2026-03-03
Target Hardware: Meta Quest 2 / 3 / Pro
1. Overview
Conduir Spatial delivers a spatial computing experience for collaborative scene graph manipulation in VR. Users can create, connect, and explore 3D concept maps using controllers, hand tracking, or gaze input on Meta Quest headsets via the WebXR Device API.
Hardware
Browser
3. XR Session Lifecycle
Desktop Page Load
│
├─→ Check navigator.xr.isSessionSupported("immersive-vr")
│ ├─→ true: Show "Enter VR" button
│ └─→ false: Hide VR button, desktop-only mode
│
├─→ User clicks "Enter VR"
│ ├─→ xrStore.enterVR()
│ ├─→ Canvas switches to XR rendering mode
│ ├─→ Controllers/hands detected → input handlers activated
│ └─→ Scene renders stereoscopically at headset refresh rate
│
└─→ User exits VR (Quest menu or API)
├─→ xrStore.session ends
└─→ Returns to desktop rendering
4.1 Controllers
4.2 Hand Tracking
4.3 Gaze (Fallback)
5. Spatial UI Panels
Placement: Anchored to non-dominant hand (wrist-mounted)
┌─────────────────────────┐
│ TOOLS │
│ ┌───┐ ┌───┐ ┌───┐ │
│ │ ◇ │ │ + │ │ ⌥ │ │
│ │Sel│ │Add│ │Con│ │
│ └───┘ └───┘ └───┘ │
│ ┌───┐ ┌───┐ ┌───┐ │
│ │ ✎ │ │ ★ │ │ ✕ │ │
│ │Ann│ │Hlt│ │Del│ │
│ └───┘ └───┘ └───┘ │
│ │
│ [Undo] [Redo] │
└─────────────────────────┘
- Buttons are 6cm x 6cm (comfortable finger press)
- Active tool highlighted with emissive border
- Panel follows wrist rotation
5.2 Node Properties Panel
Placement: Floating 0.5m from selected node, faces user
┌─────────────────────────────┐
│ Authentication │
│ Type: concept │
│ ───────────────── │
│ Description: │
│ [User auth system ] │
│ ───────────────── │
│ Color: ● ● ● ● ● ● │
│ Shape: ◇ ○ □ ◆ ⬡ │
│ ───────────────── │
│ Connected: 3 nodes │
│ Created: 14:30 by Alice │
│ │
│ [Delete] [Duplicate] │
└─────────────────────────────┘
- 40cm wide, 50cm tall
- Transparent dark background (alpha 0.85)
- Dismiss by looking away or pinching closed
5.3 Chat Panel
Placement: Left side of view, anchored to world (not head)
┌──────────────────────────────┐
│ TEAM CHAT │
│ ──────────────── │
│ Alice: Let's review the │
│ auth flow │
│ │
│ Claude: I'll add the OAuth │
│ nodes for you │
│ │
│ [mutation applied: +3 nodes]│
│ ──────────────── │
│ 🎤 [Voice Input Active] │
└──────────────────────────────┘
- Voice input (STT) as primary text entry in VR
- Messages appear with spatial audio cue
- Panel repositionable via grip + drag
5.4 Minimap Panel
Placement: Wrist-mounted on dominant hand (flip wrist to view)
- 15cm x 15cm 2D view
- Shows node positions top-down
- Current view frustum indicator
- Tap node dot to teleport near it
6. Locomotion
6.1 Teleport
Controller thumbstick forward
→ Ray arc appears (parabolic)
→ Target indicator on grid
→ Release to teleport
→ Fade-to-black transition (200ms)
→ Appear at target position
- Range: 0–30 meters
- Snap turn: Thumbstick left/right rotates view 30 degrees
- Continuous turn: Hold thumbstick for smooth rotation (optional, comfort setting)
6.2 Fly Mode (Advanced)
- Thumbstick forward/back: move along gaze direction
- Speed: 2 m/s (walk) to 8 m/s (hold grip)
- Height maintained unless intentionally changed
- Comfort vignette enabled by default
6.3 Node Focus
- Double-tap node: camera smoothly flies to 3m in front of node
- Duration: 500ms ease-in-out
- Maintains upright orientation
7. Node Interaction in VR
7.1 Creating Nodes
1. Select "Add" tool (wrist panel or voice: "add")
2. Choose node type from palette
3. Point controller/hand where node should appear
4. Trigger/pinch to place
5. Virtual keyboard or voice to set label
7.2 Moving Nodes
1. Select "Select" tool
2. Grip node (controller grip or hand grab)
3. Move hand to new position
4. Release grip to place
5. Node snaps to 0.5m grid (optional)
7.3 Connecting Nodes
1. Select "Connect" tool
2. Touch/trigger source node → cyan ring appears
3. Drag to target node → preview edge shown
4. Release on target → edge created
5. Edge type defaults to "association" (configurable via properties panel)
7.4 Deleting Nodes
1. Select "Delete" tool
2. Trigger/pinch on node
3. Confirmation: node pulses red for 1s
4. Trigger again to confirm (or wait to cancel)
5. Node and connected edges dissolve (particle effect)
8. Participant Presence in VR
8.1 Human Avatars
- Floating head (sphere with user color)
- Hand representations (if hand tracking active)
- Name label above head
- Gaze direction indicator (subtle ray)
8.2 AI Agent Avatars
- Floating orb with provider color (same as desktop)
- Gentle bob animation
- Particle trail when moving between nodes
- Speech bubble when sending messages
8.3 Awareness
- See other participants' selected nodes (colored outline)
- See other participants' pointer rays
- Proximity audio: hear collaborators more clearly when nearby
9. Comfort & Accessibility
9.1 Comfort Settings
9.2 Accessibility
- Color blind mode: Node types distinguished by shape (not just color)
- Haptic feedback: Controller vibration on select, connect, delete
- Audio cues: All interactions have spatial audio feedback
- Scale override: Enlarge all nodes and text for visibility
- Voice-only mode: All actions available via voice commands
10.1 LOD (Level of Detail)
10.2 Culling
- Frustum culling (Three.js default)
- Occlusion culling for nodes behind large groups
- Edge rendering skipped for edges between culled nodes
10.3 Instanced Rendering
- Same-shape nodes use
InstancedMesh (one draw call per shape type) - Max 6 instanced meshes: sphere, box, diamond, hexagon, card, group-box
- Per-instance color via instance attributes
10.4 Texture Management
- No image textures in Phase 1 (pure geometry + text)
- Text rendered via SDF (Signed Distance Field) fonts
- Total GPU memory target: <128MB on Quest 2
11. Mixed Reality (Phase 6+)
11.1 Passthrough Mode (Quest 3)
- Scene graph overlaid on real environment
- Nodes anchored to real-world surfaces (floor, walls, table)
- Spatial anchors persist between sessions
- Real-world occlusion (hands, objects pass in front of virtual nodes)
11.2 Desk Mode
- Scene graph rendered on desk surface
- Tabletop scale (1 unit = 10cm instead of 1m)
- Interact with fingertips (precision mode)
- Keyboard passthrough for text input
12. Implementation Phases