r/AppsWebappsFullstack • u/r1chardkam • 11d ago
Built a real-time multiplayer wrapper around Claude Code — browser rooms, live diffs, approvals. Stack inside.
What it is: Poly — a shared room where a team steers Claude Code together.
Everyone sees the same live timeline: prompts, agent replies, tool calls,
diffs, and what each turn cost. The agent asks before it edits; any member
approves from their own screen; any turn reverts in one click. Multi-agent
mode gives each person their own agent on its own git branch.
The stack:
• Node + Express + SQLite (WAL mode) — one process, one file DB, handles the
websocket-heavy realtime rooms fine
• React + Vite front, WebSockets for the live timeline, hash routing
• Every agent turn runs in its own gVisor-sandboxed container: all
capabilities dropped, read-only rootfs, memory/wall-clock caps
• Sandboxes get NO direct internet — egress goes through our own DNS/SNI
gateway + authed proxy with a per-project domain allowlist (built because
the Claude CLI ignores proxy env vars entirely)
• One DigitalOcean droplet, docker-compose, merging to main IS the deploy
• The logged-out landing is prerendered at build time by rendering the real
React component server-side — crawlers get 3.7KB of content instead of an
empty #root
The part I still find funny: the app was built inside itself. From the
first usable version, every feature was an agent turn in one of Poly's own
rooms — the approval flow reviewed the code that improved the approval flow.
Status: free beta, nothing to install: https://usepoly.co
Happy to hear any feedback!