Skip to content

You say you have to draw diagrams? But in realtime is it possible to collectively draw and share the diagrams? Well DrawBetter does this, Achieving true min latency with precision

License

Notifications You must be signed in to change notification settings

ARYPROGRAMMER/DrawBetter

DrawBetter Logo
React TypeScript Tailwind CSS Convex Liveblocks Clerk Hacktoberfest 2025
Version

Collaborative Drawing Platform

Real-time collaborative drawing for teams


Built for creatives and collaborators


πŸ“– Overview

DrawBetter is a collaborative drawing application built with modern web technologies. It allows users to create, share, and organize drawings within organizations, with real-time collaboration powered by Convex and Liveblocks.

πŸš€ Getting Started

1. Clone Repository

git clone https://github.com/ARYPROGRAMMER/DrawBetter.git
cd draw-better

2. Install Dependencies

npm install

3. Set Up Convex

npx convex dev --once

4. Environment Setup

Create .env.local file:

NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
CLERK_SECRET_KEY=your_clerk_secret_key
NEXT_PUBLIC_CONVEX_URL=your_convex_deployment_url
NEXT_PUBLIC_LIVEBLOCKS_PUBLIC_KEY=your_liveblocks_public_key

5. Start Development

npm run dev

πŸ“– Usage

  1. Sign In: Authenticate with Clerk
  2. Create/Join Organization: Set up workspace
  3. Create Drawings: Use drawing tools
  4. Collaborate: Share with team members
  5. Organize: Use favorites and search
  6. Manage: Access dashboard

πŸ“œ Scripts

Command Description
npm run dev Start development server
npm run build Build for production
npm run start Start production server
npm run lint Run ESLint

πŸ“ Project Structure

draw-better/
β”œβ”€β”€ app/                    # Next.js app directory
β”‚   β”œβ”€β”€ (dashboard)/       # Dashboard pages
β”‚   β”œβ”€β”€ layout.tsx         # Root layout
β”‚   └── globals.css        # Global styles
β”œβ”€β”€ components/            # UI components
β”‚   β”œβ”€β”€ ui/               # Base components (Shadcn/ui)
β”‚   β”œβ”€β”€ auth/             # Auth components
β”‚   └── modals/           # Modal dialogs
β”œβ”€β”€ convex/               # Backend functions & schema
β”œβ”€β”€ hooks/                # Custom React hooks
β”œβ”€β”€ lib/                  # Utilities
β”œβ”€β”€ providers/            # Context providers
β”œβ”€β”€ store/                # Zustand state management
└── public/               # Static assets

πŸ—οΈ System Architecture

Core Components

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    DrawBetter Platform                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚
β”‚  β”‚   Frontend  β”‚  β”‚   Backend   β”‚  β”‚  Database   β”‚         β”‚
β”‚  β”‚             β”‚  β”‚             β”‚  β”‚             β”‚         β”‚
β”‚  β”‚ β€’ Next.js   β”‚  β”‚ β€’ Convex    β”‚  β”‚ β€’ Convex DB β”‚         β”‚
β”‚  β”‚ β€’ React     β”‚  β”‚ β€’ API       β”‚  β”‚ β€’ Real-time β”‚         β”‚
β”‚  β”‚ β€’ TypeScriptβ”‚  β”‚ β€’ Auth      β”‚  β”‚ β€’ Schema    β”‚         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚
β”‚  β”‚  Security   β”‚  β”‚ Monitoring  β”‚  β”‚   CDN      β”‚         β”‚
β”‚  β”‚             β”‚  β”‚             β”‚  β”‚             β”‚         β”‚
β”‚  β”‚ β€’ Clerk     β”‚  β”‚ β€’ Analytics β”‚  β”‚ β€’ Vercel    β”‚         β”‚
β”‚  β”‚ β€’ Encryptionβ”‚  β”‚ β€’ Logging   β”‚  β”‚ β€’ Assets    β”‚         β”‚
β”‚  β”‚ β€’ RBAC      β”‚  β”‚ β€’ Metrics   β”‚  β”‚ β€’ Caching   β”‚         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Features

Feature Description
🎨 Collaborative Drawing Create and edit drawings with real-time collaboration
🏒 Organization Management Organize drawings within workspaces
⭐ Favorites System Save and quickly access favorite creations
πŸ” Search Functionality Find drawings by title within organizations
⚑ Live Updates Real-time synchronization via Convex
πŸ” Authentication Secure login with Clerk
πŸ“± Responsive Design Works on desktop, tablet, and mobile

πŸ› οΈ Technology Stack

Frontend

Component Technology Version
Framework Next.js 15.5.3
Runtime React 19.1.0
Language TypeScript 5.0
Styling Tailwind CSS 4.0
UI Components Radix UI Latest
Animations Framer Motion 12.23.22
Icons Lucide React 0.544.0

Backend & Database

Component Technology Version
Database Convex 1.27.3
Authentication Clerk 6.32.2
State Management Zustand 5.0.8

Development Tools

Component Technology Version
Linting ESLint 9.x
Build Tool Next.js 15.5.3

Performance Optimization

Build Optimizations

  • Code Splitting: Automatic route-based splitting
  • Image Optimization: Next.js Image component with WebP
  • Bundle Analysis: Webpack bundle analyzer integration
  • Caching Strategy: Aggressive caching with CDN

Runtime Optimizations

  • Server-Side Rendering: ISR for dynamic content
  • Edge Computing: Global CDN distribution
  • Database Indexing: Optimized Convex queries
  • Connection Pooling: Efficient resource management

πŸ”’ Security & Compliance

Authentication & Authorization

  • OAuth 2.0 Integration: Industry-standard authentication
  • Role-Based Access Control: Granular permission management
  • Multi-Factor Authentication: Enhanced security option
  • Session Management: Secure token handling

Data Protection

  • Encryption at Rest: AES-256 encryption for stored data
  • TLS 1.3: End-to-end encrypted communications
  • Data Sanitization: Input validation and XSS prevention
  • Audit Logging: Comprehensive activity tracking

🀝 Contributing Guidelines

We welcome contributions from the community! Please see our Contributing Guide for detailed information on how to get started.

Code of Conduct

Please review our Code of Conduct to understand our community standards and expectations.

πŸ“„ License & Legal

License Information

This project is licensed under the MIT License. See the LICENSE file for details.

πŸ—ΊοΈ Roadmap & Vision

Future Enhancements

  • Advanced drawing tools (brushes, layers, effects)
  • Voice/video collaboration features
  • Advanced permission management
  • Mobile native applications
  • AI-powered drawing assistance
  • Smart canvas analysis
  • Multi-region deployment
  • Advanced analytics dashboard

πŸ“ž Support & Contact

Contact Information


DrawBetterβ„’ - Where Creativity Meets Collaboration

Licensed under MIT

About

You say you have to draw diagrams? But in realtime is it possible to collectively draw and share the diagrams? Well DrawBetter does this, Achieving true min latency with precision

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •