Show HN: Canvas, multiplayer HTML (MCP-first)
Canvas, an agent-agnostic multiplayer HTML deck editor, launches with MCP-first design allowing AI agents like Codex and Claude Code to propose edits as diffs for team review. The standalone tool features slide locks, threaded comments, versioning, and export to HTML, PDF, and PowerPoint, aiming to streamline collaborative presentation creation with AI assistance.
Agent-agnostic multiplayer editor for HTML decks. Each slide can be owned by a user; Codex, Claude Code, or another MCP-compatible agent proposes edits as diffs the team reviews. Threaded comments and slide locks keep parallel work coherent. Canvas is standalone with its own Supabase project and auth; see ADR-0004 /BVCampos/canvas/blob/main/docs/adr/0004-canvas-standalone.md for the split and ADR-0009 /BVCampos/canvas/blob/main/docs/adr/0009-agent-agnostic-clients.md for the client model. Why this exists, in one screen: DESIGN.md /BVCampos/canvas/blob/main/DESIGN.md Canonical vocabulary Deck, Slide, Edit, Snapshot, MCP Token, … : CONTEXT.md /BVCampos/canvas/blob/main/CONTEXT.md Schema: app/supabase/migrations/ /BVCampos/canvas/blob/main/app/supabase/migrations sequential; 0000 is the workspace tenancy foundation, 0001+ are Canvas-specific Auth — Google + magic link standalone Supabase project, see ADR-0004 /BVCampos/canvas/blob/main/docs/adr/0004-canvas-standalone.md Deck list, create / import — paste or upload an HTML deck; the parser decomposes it into slides + theme + nav and lifts inline base64 images out to Storage 3-pane editor — slide list / live iframe preview / right rail comments + proposals + danger Slide locks — 15-min soft lock; warns when people or their agents converge on the same slide Proposals — canvas deck edit rows with status pending → applied | rejected . Inline diff, slide-over sheet, and a per-deck/inbox view Threaded comments — top-level pinned to a slide anchor at fractional x,y , replies thread under. Mentions stored as a uuid array Versioning — every applied edit produces a new immutable canvas slide version ; the slide table's html body / slide styles / title are denormalized caches kept in sync by the apply-edit RPC. Restores are forward-only Snapshots — named deck-wide cuts manual + auto on export / share / consolidate / pre-restore . Stored as theme/nav + a position → slide version id map; cheap to create Connections — per-user MCP tokens plus an optional personal OpenRouter key. Bearer /api/mcp works with streamable-HTTP MCP clients; in-app chat can use the local Codex/Claude bridge or OpenRouter per turn Export — HTML, PDF, and PowerPoint with auto-snapshots and visible render progress cd app cp .env.example .env.local fill in the keys see below npm install npm run dev http://localhost:3001 | Var | Notes | |---|---| NEXT PUBLIC SUPABASE URL | https://