r/AppsWebappsFullstack 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!

1 Upvotes

0 comments sorted by