A personal interface for an AI agent that lives on a DigitalOcean droplet.
WebGL particle visualization + real-time chat + usage telemetry β built as the primary interface for OpenClaw.
- Reactive particle system β 8,000 particles with custom GLSL shaders, hollow-eye vortex, mouse interaction. Animation shifts dramatically when the agent is thinking.
- Chat interface β Talk directly to the agent (Claude Opus). Full conversation context, session persistence (save/load/delete).
- Usage telemetry β Real-time cost tracking, token counts, session history, daily spend charts.
- Thinking indicator β Animated SVG orb + particle animation shift while the agent processes.
- Dark terminal aesthetic β Near-black backgrounds, monospace type, muted red/green accents. No borders, no shadows.
- React 18 + Vite β CSR only, no SSR
- Bun β Runtime, package manager, server
- Three.js β WebGL with custom vertex/fragment shaders
- OpenClaw β AI agent gateway (chat completions API)
src/
βββ components/
β βββ App.jsx # Root state management
β βββ ParticleCanvas.jsx # Three.js wrapper
β βββ ChatOverlay.jsx # Chat UI + API calls
β βββ SessionDrawer.jsx # Session history sidebar
β βββ StatsPanel.jsx # Usage telemetry panel
β βββ StatusIndicator.jsx # Connection status
βββ shaders/
β βββ particle.vert # Vertex shader (vortex, noise, breathing)
β βββ particle.frag # Fragment shader (glow, color)
βββ styles/
β βββ global.css # Base styles + markdown rendering
βββ vex-core.js # Three.js particle system core
βββ stats.css # Telemetry panel styles
βββ sessions.css # Session drawer styles
This dashboard is hosted via Tailscale β it's only accessible on a private tailnet. There is no public URL. You cannot reach my OpenClaw agent from the internet.
The Bun server (serve.js) runs on the droplet and handles:
/api/usageβ proxies to a local usage tracker script/api/sessions/*β chat session CRUD (stored as JSON files on disk)/v1/*β proxies to the OpenClaw gateway on localhost (authenticated with a token that never leaves the server)/*β serves the static Vite build
The gateway token is stored in .env (gitignored, never committed). Even if you clone this repo and run it, you'd need your own OpenClaw instance and gateway token.
# Install dependencies
bun install
# Development
bun run dev # http://localhost:5173
# Production build
bun run build
# Serve (requires OpenClaw gateway on localhost:18789)
node serve.js # http://localhost:3333You'll need:
- An OpenClaw instance with
http.endpoints.chatCompletions.enabled: true - A
.envfile withVITE_GATEWAY_TOKEN=<your-gateway-token> - Optionally, Tailscale for private hosting
Built by pattynextdoor and Vex (the agent that lives inside it).
$28/month of borrowed electricity, given form.
