Skip to content

Vision Pro spatial tracker with surround environment#23

Open
RonTuretzky wants to merge 8 commits intomainfrom
RonTuretzky/visionpro-3js-port
Open

Vision Pro spatial tracker with surround environment#23
RonTuretzky wants to merge 8 commits intomainfrom
RonTuretzky/visionpro-3js-port

Conversation

@RonTuretzky
Copy link
Copy Markdown
Owner

@RonTuretzky RonTuretzky commented Mar 30, 2026

Summary

  • Adds a Three.js 3D tracker page (tracker3d-visionpro.html) that renders the Conductor organization graph as a spatial environment — repos placed on a Fibonacci sphere shell around the viewer with PR nodes branching outward
  • Camera starts inside the graph with slow auto-orbit, so on Vision Pro Safari it works as an ambient environment in a floating window (shared space, other apps stay visible)
  • Immersive VR mode is opt-in ("Go Immersive") for when you want full-space takeover
  • Includes nginx config for HTTPS serving (WebXR requires secure context) with self-signed cert setup script
  • Adds SPEC-visionos-tracker.md — full spec for a native visionOS RealityKit app using ImmersiveSpace with .mixed immersion to render the tracker as a true spatial environment

Test plan

  • Open https://localhost:8443/tracker3d-visionpro.html after running .nginx/setup.sh and verify surround layout renders
  • Toggle between Surround and Flat layout modes
  • Test on Vision Pro Safari over local network (https://<mac-ip>:8443/...)
  • Verify other visionOS windows remain visible while viewing
  • Review SPEC-visionos-tracker.md for native app feasibility

🤖 Generated with Claude Code

Port the Conductor Tracker 3D visualization for Apple Vision Pro.
Renders the ThreeJS scene as a surround environment with repos on a
sphere shell around the viewer. Runs in a Safari window (shared space)
so other apps stay visible, with opt-in immersive mode available.
Includes nginx config for local HTTPS serving (required by WebXR).
Reworked the 3D tracker to place the camera inside the node graph
looking outward (surround mode), with repos on a Fibonacci sphere shell.
Added auto-orbit, layout toggle, and made immersive VR opt-in so
Vision Pro users can keep other windows open. Wrote a full spec for
a native visionOS RealityKit app that uses ImmersiveSpace with mixed
immersion to render the tracker as a true spatial environment.
@RonTuretzky RonTuretzky changed the title Add Vision Pro spatial tracker for Conductor Vision Pro spatial tracker with surround environment Mar 30, 2026
- Port full HUD from original tracker: status panel (working/idle/error
  from session_statuses), legend with gradient and CI badges, toolbar
  buttons (zen, fullscreen, orbit, layout, fit), footer with worktree
  count and session timer, cursor-following tooltip
- Add nginx reverse proxy for /api/ -> localhost:8765 so Vision Pro
  only needs one HTTPS port
- Fix status counts to use session_statuses instead of CI status
- Add /api/tracker as first data source URL (same-origin via proxy)
- Render commit avatars along connection lines between repos and PRs
  using circular avatar sprites with texture caching
- Add 5-second auto-refresh polling to keep data in sync with
  Conductor (only rebuilds scene when data changes)
- Commits are hoverable (shows message, author, sha) and clickable
  (opens commit on GitHub)
- Add backtick-toggled hide/show menu for repos (A-Z) and workspaces
  (a-z), with click support and 0 to show all
- Zen mode now shows minimal working count badge in top-right
- Lock onto live API source after first successful fetch to prevent
  flipping between Conductor and static BreadCoop data
- Increase fetch timeout from 3s to 10s for reliability
- Filter hidden repos/workspaces from scene building
- Keep API source lock on transient failures instead of clearing it
  and falling back to static BreadCoop data
- Remove data/org_data.json from fallback URLs entirely
- Make tracker server threaded (ThreadingTCPServer) so concurrent
  requests don't block and cause timeouts
- Add WebSocket broadcaster to tracker_server.py that polls
  TrackerState every 3s and pushes to clients only on changes
- Client connects via wss:// through nginx proxy, falls back to
  direct ws://localhost:8766, then HTTP polling as last resort
- Nginx config proxies /ws/ to WebSocket server on port 8766
- Supports refresh_ci action over WebSocket
- Graceful reconnect with automatic fallback chain
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant