KHALID

DrawSketch — A Real-Time Collaborative Hand-Drawn Style Whiteboard

A full-stack web application that enables users to create stunning hand-drawn style diagrams, flowcharts, and illustrations using an intuitive canvas-based interface. Built with React, Rough.js rendering engine, and a secure Node.js/Express backend with MongoDB.

Overview

DrawSketch is a professional-grade whiteboard application that brings the natural, sketch-like aesthetic of hand-drawn diagrams to the digital world. The application combines powerful canvas manipulation capabilities with an elegant, user-friendly interface.

Frontend Features

- Canvas Rendering Engine: Powered by Rough.js for authentic hand-drawn aesthetics on all shapes

- Drawing Tools: Select, hand (pan), frame, pencil, rectangle, ellipse, diamond, triangle, line, arrow, text, image, and eraser

- Properties Panel: Comprehensive styling with stroke color, fill color, fill styles (solid, hatch, cross-hatch, dots), stroke width, stroke style (solid, dashed, dotted), roughness control, opacity, and typography options

- Interactive Features: Multi-select, drag-and-drop, resize handles, alignment guides, snap-to-grid, layer ordering (bring to front/send to back), grouping/ungrouping

- Keyboard Shortcuts: Full keyboard navigation and shortcuts for all major actions

- Mini Map: Overview navigation for large canvases

- Presentation Mode: Full-screen presentation capabilities

- Component Library: Save frequently used elements as reusable components locally

- Dark/Light Theme: Complete UI theming with system preference detection

Backend Features

- Authentication System: JWT-based auth with email verification, OTP, password reset functionality

- File System Management: Hierarchical folder and file structure with CRUD operations

- Auto-Save: Real-time canvas state persistence to MongoDB

- Public Sharing: Generate unique shareable links for viewing published diagrams

- Security: Rate limiting, helmet, CORS, input validation with Zod

- API Documentation: Interactive Swagger documentation

- Logging: Winston-based structured logging with daily rotate

- Caching: Redis integration for performance optimization

- Docker: Production-ready containerization

The Challenge

Technical Challenges

1. Canvas Performance: Implementing smooth 60fps rendering with complex shapes while maintaining React state synchronization

2. Real-time Rendering: Balancing between React state updates and imperative canvas operations for drag/resize operations without unnecessary re-renders

3. Rough.js Integration: Creating consistent hand-drawn aesthetics across all shape types while supporting advanced styling options

4. Coordinate System: Managing world-to-screen coordinate transformation with pan/zoom capabilities

5. Undo/Redo System: Implementing reliable state snapshots for history management

Backend Challenges

1. Scalable Architecture: Designing a maintainable modular backend structure with proper separation of concerns

2. Security: Implementing robust authentication with email verification and secure password handling

3. Data Integrity: Ensuring canvas data persistence with proper error handling and transactions

The Solution

Frontend Solutions

1. Hybrid Rendering Architecture: Combined React state management with imperative canvas rendering using requestAnimationFrame for smooth drag operations. Used refs to maintain live state without triggering React re-renders during active interactions.

2. Smart Rendering Pipeline: Implemented two-pass rendering (frames first, then elements) with z-order management and selection highlight overlay. Separated main canvas drawing from selection rectangle overlay for optimal performance.

3. Optimized Shape Rendering:

- Custom path generation for rounded rectangles to preserve sketch style

- Bezier curve interpolation for pencil tool with smooth rendering

- Arrow binding system that auto-connects arrows to shapes

- Dynamic text wrapping for labels on lines/arrows

4. User Experience Enhancements:

- Context-aware toolbars with keyboard shortcut hints

- Visual alignment guides with snap-to functionality

- Minimap with viewport indicator

- Comprehensive props panel with segment buttons, sliders, and color pickers

Backend Solutions

1. Modular Architecture: Followed feature-based module organization with dedicated services, controllers, routes, validations, and interfaces for each domain (Auth, FileSystem)

2. Security Implementation:

- JWT tokens with refresh mechanism

- Bcrypt password hashing

- Express-rate-limit for DDoS protection

- Helmet for HTTP header security

- Input validation with Zod schemas

- Image content validation middleware

3. Data Persistence: Prisma ORM with MongoDB for flexible schema evolution, with proper relation handling between users, folders, and files

The Outcome

Technical Achievements

- ✅ Smooth canvas interactions with 60fps rendering

- ✅ Complete toolset with 14+ drawing instruments

- ✅ Professional-grade property editing with 50+ style combinations

- ✅ Full keyboard accessibility

- ✅ Dark/light theme support with system preference detection

Backend Achievements

- ✅ Production-ready Express application with TypeScript

- ✅ Complete JWT authentication flow with email verification

- ✅ Hierarchical file system management

- ✅ Public sharing with unique shareable links

- ✅ Docker containerization ready for deployment

- ✅ Comprehensive API documentation with Swagger

- ✅ Structured logging with log rotation

Performance Metrics

- Canvas renders 100+ elements without lag

- Drag operations maintain 60fps

- Auto-save completes in <100ms

- API response time <50ms for typical operations

Tech Stack

ReactTypescriptRough.jsCanvasNode.jsExpressMongoDBPrismaRedisJWTTailwind CSSDrawingWhiteboardSketch

Project Links