← Selected work SketchSync / Case study Source ↗

SketchSync

Realtime whiteboard. Raw WebSockets.

Live · raw WebSockets · Updated 2026

TypeScript · WebSocket · React

Hosted on Render. The first open may take up to about 60 seconds; the proof below remains available immediately.

Context
Independent realtime-systems project · 2026
My role
Protocol designer and sole engineer
Team
Solo build
Evidence
Typed raw WebSockets · per-user undo

01 Problem

A whiteboard that hides behind Socket.IO does not show whether rooms, undo, or presence are actually correct.

02 Constraints

  1. 01Raw WebSockets.
  2. 02Per-user undo.
  3. 03Room logic unit-tested without the browser.

03 Architecture

04 Decisions

No Socket.IO.

Why The message protocol is the product.

Tradeoff More plumbing. Clearer tests.

05 Failure

  • Two users undo.

    Undo is per-user, not a shared stack.

06 Object

07 Inspect

Live Open product ↗

Source GitHub ↗

Wake time Allow up to about 60 seconds on the first request.

08 What I would improve next

  1. Persist room snapshots and replay deltas so reconnecting clients recover without losing the board.
  2. Define ordering and conflict semantics explicitly before moving from per-user actions toward CRDT or OT collaboration.
  3. Load-test fan-out, slow consumers, and backpressure across multiple room-server instances.