022025Full-stack

CollabBoard.

A real-time collaborative whiteboard where teams sketch, brainstorm, and persist their ideas, together.

Angular 17NestJSMongoDBSocket.ioCanvas APIJWT
CollabBoard preview
Overview

CollabBoard is a focused whiteboarding tool built on Canvas + Socket.io. Multiple users can draw on the same board with live cursors, drop sticky notes, undo / redo, pan and zoom, and export the final canvas to PNG. Everything persists to MongoDB so teams can return to the same board the next day.

TransportSocket.io
PersistenceMongoDB
RenderingCanvas API
AuthJWT
01 / The Problem

What this project set out to solve.

Most collaboration tools assume a video or chat surface; whiteboarding is bolted on as an afterthought. I wanted to flip that: build a whiteboard-first experience that is light enough for a five-minute brainstorm and durable enough that a team can pick up exactly where they left off.

The technical pull was real-time multiplayer: live cursors, broadcast strokes, conflict-free undo per user, all without melting the network or the framerate.

02 / The Approach

How it came together.

Drawing primitives live on the Canvas API directly, with no framework overhead in the hot path. Socket.io carries strokes and cursor events, scoped to a room keyed by board ID, so users only receive updates for boards they joined.

Strokes are serialized as JSON and snapshotted to MongoDB on a debounced interval. On reconnect, the client hydrates the canvas from the last snapshot, then catches up over the socket. No full re-render needed.

Auth uses JWT for both the REST API and the Socket.io handshake, so a single token gates everything.

03 / Architecture

Stack & structure.

01

Frontend

  • Angular 17
  • Canvas API drawing engine
  • Socket.io client
  • Tailwind for chrome / UI
02

Backend

  • NestJS modular gateway
  • Socket.io server with room-scoped channels
  • MongoDB for board snapshots
  • JWT handshake guard

NestJS gateways gave a clean separation between REST controllers and WebSocket handlers.

04 / Key Features

What you can actually do.

01

Live cursors

Other users' cursors broadcast at 30Hz and render via RAF batching.

02

Sticky notes

Drop, drag, and edit notes anywhere on the canvas.

03

Board persistence

Snapshots saved to MongoDB so every board is permanent.

04

Undo / redo

Per-user stroke stack. Your undo never touches another user's work.

05

Zoom & pan

Smooth infinite canvas with viewport transform.

06

PNG export

One-click flatten of the canvas to a downloadable image.

05 / Challenges & Learnings

What was hard, and what I took from it.

Cursor broadcast throughput

Naively emitting every mousemove event floods the socket. I throttled to 30Hz on the wire and batched paint calls with requestAnimationFrame on the receiver, keeping perceived latency under 50ms.

Undo in a multi-user session

A shared undo stack breaks immediately when two users draw at once. I scoped undo per user: each client owns its own stack of strokes it created, and the server enforces ownership on the undo command.

06 / Outcome

What I shipped.

  • Multiplayer whiteboard with end-to-end persistence and secure rooms.
  • Stroke rendering stays at 60fps even with multiple active collaborators.
  • Demonstrates real-time architecture, Canvas API depth, and gateway-based NestJS design.
Next case study

Vizora

A self-service analytics dashboard that turns raw CSV / JSON into interactive charts, augmented with natural-language queries via Gemini.

Back to all projects
© 2026 Vishwa Limbani