A comprehensive real-time team collaboration platform with video conferencing, messaging, polls, voice messages, AI assistance, and advanced productivity tools
π Live Demo | π Documentation | π Setup Guide
- Overview
- Screenshots
- Key Features
- Database Schema
- Architecture
- Tech Stack
- Installation
- Configuration
- Usage
- API Documentation
- Project Structure
- Contributing
- Troubleshooting
- Authors
SyncSpace is a cutting-edge team collaboration platform that seamlessly integrates real-time messaging, HD video conferencing, interactive polls, voice messages, AI-powered assistance, and comprehensive project management tools. Built with modern web technologies and designed for scalability, it empowers teams to communicate, collaborate, and stay productive from anywhere.
Main dashboard with organization overview, quick stats, and navigation
Real-time team messaging with reactions, replies, and file sharing
Private 1-on-1 conversations with full message history
HD video conferencing with screen sharing and in-meeting chat
AI-powered meeting summaries with participant analytics
Integrated calendar with event management and meeting scheduling
Google Gemini-powered AI assistant with workspace context awareness
Universal search across all content types with instant navigation
Power user shortcuts for enhanced productivity
Comprehensive notification center with filtering and categorization
Organization creation with custom roles and channel setup
Simple organization joining with access code
Key Highlights:
- π― All-in-One Platform: Messaging, video calls, polls, notes, calendar, and more
- π€ AI-Powered: Google Gemini integration with real-time workspace awareness
- β‘ Real-Time Everything: Instant updates via WebSocket connections
- π Universal Search: Search across 10+ content types with instant navigation
- π¨ Modern Design: Beautiful glass-morphism UI with smooth animations
- π Secure: JWT authentication, role-based access control, encrypted connections
- 64+ React Components: Comprehensive UI component library
- 16+ API Routes: RESTful API endpoints with full CRUD operations
- 15+ Controllers: Business logic handlers for all features
- 5 Context Providers: Global state management (Auth, Socket, Notifications, Toast, Unread)
- Real-time WebSocket: Instant bidirectional communication with Socket.IO
- 3-Tier Architecture: Client (React), Server (Express), Email Service (Microservice)
- PostgreSQL Database: Serverless Neon database with full-text search
- Cloud Storage: Cloudinary CDN for media files and images
- AI Integration: Google Gemini AI for intelligent assistance
- 10+ Search Categories: Universal search across all content types
- π― All-in-One Solution: Everything your team needs in one platform - messaging, video, polls, notes, calendar
- β‘ Real-Time Everything: Instant updates, live presence, typing indicators, real-time collaboration
- π¨ Modern UI/UX: Beautiful glass-morphism design with smooth animations and transitions
- π Enterprise-Grade Security: JWT authentication, role-based access control, secure WebSocket connections
- π Advanced Analytics: AI-powered meeting reports, engagement metrics, productivity insights
- π Cloud-Native: Serverless architecture, auto-scaling, global CDN with Cloudinary
- π± Mobile-First: Fully responsive design optimized for all devices and screen sizes
- π€ AI-Powered: Google Gemini integration for intelligent assistance and auto-summaries
- π Universal Search: Search across 10+ content types with instant navigation
- β‘ Feature Hub: Quick access to all productivity tools with keyboard shortcuts
- π― Productivity Tools: Built-in Pomodoro timer, keyboard shortcuts, and AI assistant
- Hero Section: Eye-catching hero with animated elements and call-to-action
- Feature Showcase: Comprehensive feature highlights with visual demonstrations
- Statistics Display: Real-time platform statistics and metrics
- Testimonials: User reviews and feedback from satisfied teams
- Pricing Plans: Transparent pricing information with feature breakdown
- Feature Comparison: Compare plans side-by-side to find the best fit
- FAQ Section: Common questions answered with detailed explanations
- Responsive Navigation: Mobile-friendly navigation with smooth scrolling
- Custom Cursor: Interactive cursor effects for enhanced user experience
- Particle System: Dynamic background particles for visual appeal
- Scroll Progress: Visual scroll indicators to track page position
- Animated Buttons: Smooth button interactions with hover effects
- Error Boundaries: Graceful error handling to prevent app crashes
- Loading States: Skeleton screens and spinners for better UX
- Toast Notifications: Non-intrusive alerts for user feedback
- Modal Dialogs: Confirmation and input modals for user actions
- Route Guards: Protected and public route handling for security
- Glass-morphism Design: Modern frosted glass effect throughout the UI
- Multi-channel team chat with threading
- Private direct messages
- Message reactions (π, β€οΈ, and more)
- Reply and quote functionality
- Edit and delete messages
- File attachments with preview
- Typing indicators
- Read receipts
- WhatsApp-style voice recording
- Audio playback with controls
- Voice message reactions and replies
- Download voice messages
- Duration tracking
- Create instant polls with multiple options
- Real-time voting and results
- Single or multiple choice
- Anonymous voting option
- Poll reactions and replies
- Visual progress bars
- Vote count tracking
- Pin important messages to channel top
- Quick access to pinned content
- Jump to pinned message
- Unpin functionality
- Visual pin indicators
- Private 1-on-1 conversations
- Real-time message delivery
- File sharing in DMs
- Message history
- Unread message tracking
- HD Video Calls: Crystal-clear video with WebRTC
- Screen Sharing: Share your screen with participants
- Meeting Preparation: Test camera/mic before joining
- Real-Time Chat: Integrated chat during meetings
- Participant Management: See who's in the meeting
- Connection Monitoring: Real-time connection status
- Meeting Reports: Automatic report generation with analytics
- Meeting Settings: Customize audio/video preferences
- Meeting Modal: Quick meeting creation interface
- Universal Search: Search across all content types
- Messages in channels
- Direct messages
- Files and attachments
- Meetings and meeting reports
- Notes and documents
- Channels and users
- Notices and announcements
- Calendar events
- Category Browsing: Click any category tab to browse all items
- Instant Navigation: Click any result to jump directly to its location
- Real-time Results: See results as you type with debounced search
- Smart Filtering: Filter by specific content types
- Full-text Search: Powered by PostgreSQL full-text search
- Single Character Search: Find content with just one letter
- Content Previews: See message/file previews in results
- Keyboard Shortcut: Quick access with Ctrl+K
- Built-in Pomodoro timer
- Distraction-free interface
- Productivity tracking
- Custom work/break intervals
- Keyboard shortcut (Ctrl+Shift+F)
- Power user shortcuts for all features
- Customizable key bindings
- Quick access panel (Ctrl+/)
- Shortcut cheat sheet
- Real-time Context Awareness: AI has live access to your workspace data
- Your organizations, channels, and members
- Online users and their status
- Organization roles and permissions
- Active meetings and recent activity
- Meeting chat transcripts and participants
- Channel messages and discussions
- Intelligent Assistance:
- Answers questions about your specific workspace
- "What's my organization name?"
- "Who's online right now?"
- "What channels do I have?"
- "What permissions does the Admin role have?"
- "Summarize the chat so far" (in meetings)
- "What did [name] say about [topic]?"
- Meeting Context:
- Full access to meeting participants and their settings
- Real-time chat transcript analysis
- Meeting notes and action items extraction
- Audio/video troubleshooting assistance
- Screen sharing tips and controls
- Channel Context:
- Access to channel messages and history
- Member lists and roles
- Pinned messages and important discussions
- Channel-specific insights and summaries
- Platform Help:
- Feature explanations and navigation
- Best practices and troubleshooting
- Workflow recommendations
- Keyboard shortcuts and tips
- Meeting Summaries:
- Auto-generates meeting summaries with AI
- Manual summary generation for reports
- Analyzes meeting chat and participants
- Extracts key discussion points and action items
- Accessible via Feature Hub (Ctrl+Shift+A)
- Conversational Interface: Natural language understanding
- Context Retention: Remembers conversation history within session
- Floating quick-access menu (β‘ button)
- One-click feature activation
- Smart Search (Ctrl+K)
- Focus Mode with Pomodoro timer (Ctrl+Shift+F)
- Keyboard Shortcuts panel (Ctrl+/)
- AI Assistant integration (Ctrl+Shift+A)
- Smooth animations and transitions
- Bottom-right corner positioning
- Keyboard-first navigation
The Smart Search feature is a powerful universal search system that helps you find anything in your workspace instantly.
10 Content Categories:
- Messages - Search all channel messages with full-text search
- Direct Messages - Find conversations with specific users
- Files - Search uploaded files by name, type, or content
- Meetings - Find scheduled meetings by title or description
- Meeting Reports - Search meeting summaries and analytics
- Notes - Find collaborative notes and documents
- Channels - Discover channels by name or description
- Users - Find team members by name or email
- Notices - Search announcements and important updates
- Events - Find calendar events and reminders
- Type to Search: Real-time results as you type (150ms debounce)
- Browse Categories: Click any tab to see all items in that category
- Single Character Search: Find content with just one letter
- Full-Text Search: PostgreSQL-powered text search with ranking
- Content Previews: See message/file content in search results
- Smart Navigation: Click any result to jump directly to its location
- Result Caching: Instant results for repeated searches
- Organization Filtering: Only see content you have access to
- Keyboard Navigation: Full keyboard support for power users
When you click a search result, Smart Search automatically:
- Messages/Files β Opens the channel where the content is located
- Direct Messages β Opens the DM conversation with that user
- Channels β Navigates to the channel page
- Meetings β Opens the calendar view
- Meeting Reports β Opens the channel's reports page
- Notes β Opens the channel where the note is shared
- Users β Opens a DM conversation with that user
- Notices β Opens the dashboard with notices
- Events β Opens the calendar view
- Backend: PostgreSQL full-text search with
to_tsvectorandto_tsquery - Frontend: React with debounced search and AbortController for request cancellation
- Caching: Client-side Map-based cache for instant repeated searches
- Performance: Optimized queries with proper indexes and limits (40-50 results per category)
- Security: All queries filtered by user's organization membership and permissions
- Multi-Organization Support: Join and manage multiple orgs
- Role-Based Access Control: Admin, moderator, member roles
- Channel Management: Create and organize team channels
- Member Invitations: Email-based invite system
- Activity Tracking: Monitor member engagement
- Custom Branding: Organization-specific settings
- Organization Settings: Customize org preferences
- Member Management: Add, remove, and manage members
- Channel Editing: Modify channel details and permissions
- Smart Calendar: FullCalendar integration with event management
- Notes System: Collaborative note-taking and sharing
- Notice Board: Important announcements and updates
- Meeting Reports: Comprehensive analytics and insights
- Notification Center: Categorized, filterable notifications
- File Management: Cloud storage with Cloudinary
- Direct Messaging: Private 1-on-1 conversations
- User Status: Online/offline/away presence indicators
- Mentions System: @mention users in messages
- Typing Indicators: See when others are typing
- Connection Status: Real-time connection monitoring
- Unread Tracking: Track unread messages across channels
SyncSpace uses PostgreSQL (Neon serverless) with a comprehensive relational schema designed for scalability and performance.
- 18 Tables: Users, Organizations, Channels, Messages, Meetings, Events, and more
- 30+ Relationships: Complex foreign key relationships with cascade behaviors
- 50+ Indexes: Optimized for fast queries and full-text search
- JSONB Support: Flexible schema for evolving features
- Role-Based Access Control: Granular permissions system
users- User accounts and authenticationorg_members- User-organization membershipsorg_roles- Custom roles with permissions
organisations- Workspace/team informationorg_channels- Team channels within organizationsorg_notes- Collaborative notesorg_notices- Announcements and notices
channel_messages- Team channel messagesdirect_messages- Private 1-on-1 messagesmeeting_messages- In-meeting chat messagesmessage_reactions- Emoji reactionspinned_channel_messages- Pinned messages
polls- Interactive pollspoll_votes- Poll voting recordsevents- Calendar eventsmeeting_reports- Meeting analytics and summaries
notifications- User notificationschannel_read_status- Unread message tracking
users (1) βββ (N) channel_messages
users (1) βββ (N) direct_messages
users (N) ββββ (N) organisations (via org_members)
organisations (1) βββ (N) org_channels
org_channels (1) βββ (N) channel_messages
org_channels (1) βββ (N) polls
polls (1) βββ (N) poll_votes
channel_messages (1) βββ (N) message_reactions
- Full-Text Search: PostgreSQL
to_tsvectorandto_tsqueryfor instant search - Cascade Deletes: Automatic cleanup of related records
- Unique Constraints: Prevent duplicate memberships and votes
- Timestamp Tracking:
created_atandupdated_aton all tables - JSONB Columns: Flexible storage for arrays and objects
- Indexed Queries: Optimized for common access patterns
- Bcrypt Password Hashing: 10 salt rounds
- JWT Authentication: 7-day expiration
- Role-Based Permissions: 8 granular permission types
- Parameterized Queries: SQL injection prevention
- Email Verification: OTP-based verification
ββββββββββββββββββββββββ ββββββββββββββββββββββββ ββββββββββββββββββββββββ
β users β β org_members β β org_roles β
ββββββββββββββββββββββββ€ ββββββββββββββββββββββββ€ ββββββββββββββββββββββββ€
β PK user_id βββββββββββ FK user_id ββββββββββΊβ PK role_id β
β name β β FK org_id β β role_name β
β email β β role β β permissions... β
β password β ββββββββββββββββββββββββ ββββββββββββββββββββββββ
β FK org_id βββββββ
ββββββββββββββββββββββββ β
βΌ
ββββββββββββββββββββββββ
β organisations β
ββββββββββββββββββββββββ€
β PK org_id β
β org_name β
β org_code β
ββββββββββββββββββββββββ
β
ββββββββββββββββββββββΌβββββββββββββββββββββ
βΌ βΌ βΌ
ββββββββββββββββββββββββ ββββββββββββββββββββββββ ββββββββββββββββββββββββ
β org_channels β β org_notes β β org_notices β
ββββββββββββββββββββββββ€ ββββββββββββββββββββββββ€ ββββββββββββββββββββββββ€
β PK channel_id β β PK note_id β β PK notice_id β
β FK org_id β β FK org_id β β FK org_id β
ββββββββββββββββββββββββ ββββββββββββββββββββββββ ββββββββββββββββββββββββ
β
ββββββββββββββββββββββββ¬βββββββββββββββββββββββ
βΌ βΌ βΌ
ββββββββββββββββββββββββ ββββββββββββββββββββββββ ββββββββββββββββββββββββ
β channel_messages β β polls β β meeting_reports β
ββββββββββββββββββββββββ€ ββββββββββββββββββββββββ€ ββββββββββββββββββββββββ€
β PK message_id β β PK poll_id β β PK report_id β
β FK channel_id β β FK channel_id β β room_id β
β FK user_id β β question β β meeting_title β
β content β β options (JSONB) β β summary β
ββββββββββββββββββββββββ ββββββββββββββββββββββββ ββββββββββββββββββββββββ
β β
βΌ βΌ
ββββββββββββββββββββββββ ββββββββββββββββββββββββ
β message_reactions β β poll_votes β
ββββββββββββββββββββββββ€ ββββββββββββββββββββββββ€
β FK message_id β β FK poll_id β
β FK user_id β β FK user_id β
β emoji β β selected_options β
ββββββββββββββββββββββββ ββββββββββββββββββββββββ
For detailed schema documentation including all columns, constraints, and relationships, see:
- DATABASE_SCHEMA.md - Complete schema documentation
- database-schema-diagram.txt - Full visual diagram
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENT LAYER (React 19) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Pages β β Components β β Context β β
β β β β β β β β
β β β’ Landing β β β’ TeamChat β β β’ Auth β β
β β β’ Dashboard β β β’ Messages β β β’ Socket β β
β β β’ Meeting β β β’ Polls β β β’ Notif β β
β β β’ Calendar β β β’ Voice β β β’ Unread β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Vite 7 + Tailwind CSS 4 β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β HTTPS/WSS
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β API LAYER (Express.js) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Routes β β Controllers β β Middleware β β
β β β β β β β β
β β β’ Auth β β β’ Messages β β β’ JWT Auth β β
β β β’ Messages β β β’ Meetings β β β’ Multer β β
β β β’ Meetings β β β’ Polls β β β’ CORS β β
β β β’ Polls β β β’ Reports β β β’ Error β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Socket.IO Server (WebSocket) β β
β β β’ Real-time messaging β’ Presence β’ Typing indicators β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββΌββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββ ββββββββββββ ββββββββββββββββ
β PostgreSQL β βCloudinaryβ β Nodemailer β
β (Neon) β β Media β β Email β
β β β Storage β β Service β
ββββββββββββββββ ββββββββββββ ββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β USER ACTIONS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββΌββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββ ββββββββββββ ββββββββββββββββ
β REST API β β WebSocketβ β File Upload β
β (Axios) β β(Socket.IO)β β (Multer) β
ββββββββββββββββ ββββββββββββ ββββββββββββββββ
β β β
βββββββββββββββΌββββββββββββββ
βΌ
ββββββββββββββββββββββββββββ
β Express Middleware β
β β’ JWT Verification β
β β’ Request Validation β
β β’ Error Handling β
ββββββββββββββββββββββββββββ
β
βββββββββββββββΌββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββ ββββββββββββ ββββββββββββββββ
β Controller β β Socket β β Service β
β Logic β β Handlers β β Layer β
ββββββββββββββββ ββββββββββββ ββββββββββββββββ
β β β
βββββββββββββββΌββββββββββββββ
βΌ
ββββββββββββββββββββββββββββ
β Database Queries β
β β’ PostgreSQL (Neon) β
β β’ Optimized Queries β
β β’ Transaction Support β
ββββββββββββββββββββββββββββ
β
βββββββββββββββΌββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββ ββββββββββββ ββββββββββββββββ
β Response β β Socket β β File URLs β
β JSON β β Emit β β (Cloudinary) β
ββββββββββββββββ ββββββββββββ ββββββββββββββββ
β β β
βββββββββββββββΌββββββββββββββ
βΌ
ββββββββββββββββββββββββββββ
β React State Update β
β β’ Context Providers β
β β’ Component Re-render β
β β’ UI Update β
ββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β NEW USER JOURNEY β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Landing Page
β
βΌ
Sign Up βββββββΊ Email Verification (OTP)
β β
β βΌ
β Verify Email
β β
ββββββββββββββββββββββ
β
βΌ
Create/Join Organization
β
ββββββββββββΌβββββββββββ
β β β
βΌ βΌ βΌ
Dashboard Channels Calendar
β β β
ββββββββββββΌβββββββββββ
β
ββββββββββββΌβββββββββββ¬βββββββββββ
β β β β
βΌ βΌ βΌ βΌ
Team Chat Meetings Polls Voice Msgs
β β β β
ββββββββββββΌβββββββββββ΄βββββββββββ
β
βΌ
Collaborate & Communicate
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MESSAGING FLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Select Channel/User
β
βΌ
ββββββββββββββββββββ
β Message Input β
ββββββββββββββββββββ
β
ββββββββΌβββββββ¬βββββββ¬βββββββ
β β β β β
βΌ βΌ βΌ βΌ βΌ
Text File Voice Poll Reply
β β β β β
ββββββββΌβββββββ΄βββββββ΄βββββββ
β
βΌ
Send via Socket.IO
β
βΌ
Server Processing
β
ββββββββΌβββββββ
β β β
βΌ βΌ βΌ
Save Emit Notify
β β β
ββββββββΌβββββββ
β
βΌ
Real-time Update
β
ββββββββΌβββββββ¬βββββββ
β β β β
βΌ βΌ βΌ βΌ
React Reply Pin Delete
- React 19.1.1 - Latest React with concurrent features
- Vite 7.1.2 - Lightning-fast build tool
- Tailwind CSS 4.1.12 - Utility-first CSS framework
- Socket.IO Client 4.8.1 - Real-time bidirectional communication
- Axios 1.11.0 - HTTP client for API requests
- React Router 7.8.1 - Client-side routing
- FullCalendar 6.1.19 - Calendar and scheduling
- Lucide React 0.541.0 - Beautiful icon library
- React Hot Toast 2.6.0 - Elegant notifications
- React DatePicker 8.7.0 - Date selection component
- date-fns 4.1.0 - Modern date utility library
- Node.js - JavaScript runtime
- Express.js 4.19.2 - Web application framework
- Socket.IO 4.8.1 - WebSocket server
- PostgreSQL (Neon 1.0.1) - Serverless Postgres database
- JWT 9.0.2 - JSON Web Token authentication
- Bcrypt 6.0.0 - Password hashing
- Multer 2.0.2 - File upload handling
- Nodemailer 7.0.6 - Email service
- Cloudinary 2.8.0 - Media storage and CDN
- Cookie Parser 1.4.7 - Cookie parsing middleware
- CORS 2.8.5 - Cross-origin resource sharing
- Dotenv 17.2.1 - Environment variable management
- Google Generative AI 0.24.1 - Gemini AI integration
- Express.js 4.18.2 - Lightweight web framework
- Nodemailer 7.0.6 - Email sending service
- CORS 2.8.5 - Cross-origin support
- Dotenv 16.3.1 - Environment configuration
- Vercel - Serverless deployment platform
- GitHub - Version control
- Environment Variables - Secure configuration management
- Nodemon 3.1.10 - Development auto-reload
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher)
- npm or yarn
- PostgreSQL database (or Neon account)
- Cloudinary account
- Git
git clone https://github.com/yourusername/syncspace.git
cd syncspacecd client
npm installcd ../server
npm installcd ../email-service
npm installCreate .env files in each directory with the following variables:
VITE_API_URL=http://localhost:3000
VITE_SOCKET_URL=http://localhost:3000
VITE_EMAIL_SERVICE_URL=http://localhost:3001# Server Configuration
PORT=3000
NODE_ENV=development
# Database (Neon PostgreSQL)
DATABASE_URL=postgresql://username:password@host/database?sslmode=require
# JWT Secret
JWT_SECRET=your_super_secret_jwt_key_here
# Cloudinary Configuration
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
# Email Service
EMAIL_SERVICE_URL=http://localhost:3001
# AI Configuration
GEMINI_API_KEY=your_gemini_api_key_here
# CORS
CLIENT_URL=http://localhost:5173
# Production URLs (for deployment)
# CLIENT_URL=https://syncspace-client.vercel.app# Email Configuration
EMAIL_USER=your_email@gmail.com
EMAIL_PASS=your_app_specific_password
# Server Configuration
PORT=3001- Create a PostgreSQL database (recommended: Neon)
- Run the database schema (tables will be created automatically on first run)
- Update
DATABASE_URLin server.env
- Sign up at Cloudinary
- Get your Cloud Name, API Key, and API Secret
- Update the Cloudinary variables in server
.env
For Gmail:
- Enable 2-Factor Authentication
- Generate an App Password
- Use the App Password in
EMAIL_PASS
Run all services concurrently:
cd client
npm run devClient will run on http://localhost:5173
cd server
npm startServer will run on http://localhost:3000
cd email-service
npm startEmail service will run on http://localhost:3001
cd client
npm run buildcd server
npm startOpen your browser and navigate to:
- Client:
http://localhost:5173 - API:
http://localhost:3000 - Email Service:
http://localhost:3001 - Health Check:
http://localhost:3000/health
POST /api/auth/register
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com",
"password": "securePassword123"
}POST /api/auth/login
Content-Type: application/json
{
"email": "john@example.com",
"password": "securePassword123"
}POST /api/auth/verify-email
Content-Type: application/json
{
"email": "john@example.com",
"otp": "123456"
}POST /api/auth/forgot-password
Content-Type: application/json
{
"email": "john@example.com"
}POST /api/auth/reset-password
Content-Type: application/json
{
"token": "reset_token",
"newPassword": "newSecurePassword123"
}POST /api/organizations
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "My Team",
"description": "Our awesome team workspace"
}GET /api/organizations/user
Authorization: Bearer <token>POST /api/channels
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "general",
"organizationId": 1,
"isPrivate": false
}GET /api/channels/:channelId/messages
Authorization: Bearer <token>POST /api/messages
Authorization: Bearer <token>
Content-Type: application/json
{
"channelId": 1,
"content": "Hello team!",
"type": "text"
}POST /api/messages/:messageId/reactions
Authorization: Bearer <token>
Content-Type: application/json
{
"emoji": "π"
}POST /api/messages/:messageId/pin
Authorization: Bearer <token>POST /api/polls
Authorization: Bearer <token>
Content-Type: application/json
{
"channelId": 1,
"question": "What's for lunch?",
"options": ["Pizza", "Burgers", "Salad"],
"allowMultiple": false,
"anonymous": false
}POST /api/polls/:pollId/vote
Authorization: Bearer <token>
Content-Type: application/json
{
"optionIndex": 0
}POST /api/meeting-reports
Authorization: Bearer <token>
Content-Type: application/json
{
"organizationId": 1,
"title": "Weekly Standup",
"duration": 1800,
"participants": ["user1@example.com", "user2@example.com"]
}GET /api/meeting-reports?organizationId=1
Authorization: Bearer <token>GET /api/search?q=project
Authorization: Bearer <token>Response includes all categories:
{
"messages": [...],
"directMessages": [...],
"files": [...],
"meetings": [...],
"meetingReports": [...],
"notes": [...],
"channels": [...],
"users": [...],
"notices": [...],
"events": [...]
}GET /api/search/category/:category
Authorization: Bearer <token>Supported categories:
messages- All channel messagesdirectMessages- All DM conversationsfiles- All uploaded filesmeetings- All scheduled meetingsmeetingReports- All meeting reportsnotes- All noteschannels- All channelsusers- All organization membersnotices- All announcementsevents- All calendar events
POST /api/ai/chat
Authorization: Bearer <token>
Content-Type: application/json
{
"message": "How do I create a meeting?",
"conversationHistory": []
}POST /api/ai/generate-summary
Authorization: Bearer <token>
Content-Type: application/json
{
"meetingData": {
"title": "Team Standup",
"participants": [...],
"duration_minutes": 30,
"messages": [...],
"started_at": "2024-01-01T10:00:00Z",
"ended_at": "2024-01-01T10:30:00Z"
}
}POST /api/events
Authorization: Bearer <token>
Content-Type: application/json
{
"title": "Team Meeting",
"start": "2024-01-15T10:00:00Z",
"end": "2024-01-15T11:00:00Z",
"organizationId": 1
}GET /api/events?organizationId=1
Authorization: Bearer <token>POST /api/notes
Authorization: Bearer <token>
Content-Type: application/json
{
"title": "Meeting Notes",
"content": "Discussion points...",
"organizationId": 1
}GET /api/notes?organizationId=1
Authorization: Bearer <token>POST /api/notices
Authorization: Bearer <token>
Content-Type: application/json
{
"title": "Important Announcement",
"content": "Please read...",
"organizationId": 1
}GET /api/notices?organizationId=1
Authorization: Bearer <token>GET /api/notifications
Authorization: Bearer <token>PUT /api/notifications/:notificationId/read
Authorization: Bearer <token>GET /api/users/profile
Authorization: Bearer <token>PUT /api/users/status
Authorization: Bearer <token>
Content-Type: application/json
{
"status": "online"
}POST /api/direct-messages
Authorization: Bearer <token>
Content-Type: application/json
{
"recipientId": 2,
"content": "Hello!",
"type": "text"
}GET /api/direct-messages/:userId
Authorization: Bearer <token>socket.emit('join', { userId, organizationId });socket.emit('sendMessage', { channelId, content, type });socket.emit('typing', { channelId, isTyping: true });socket.emit('statusUpdate', { status: 'online' });socket.on('newMessage', (message) => {
// Handle new message
});socket.on('userTyping', ({ userId, channelId, isTyping }) => {
// Show typing indicator
});socket.on('userStatusChanged', ({ userId, status }) => {
// Update user status
});socket.on('messageReaction', ({ messageId, emoji, userId }) => {
// Update message reactions
});socket.on('newPoll', (poll) => {
// Display new poll
});
socket.on('pollVote', ({ pollId, optionIndex, userId }) => {
// Update poll results
});syncspace/
βββ client/ # React frontend
β βββ public/ # Static assets
β β βββ icon.png # App icon
β βββ src/
β β βββ assets/ # Images, fonts, etc.
β β βββ components/ # React components (65+ components)
β β β βββ AIAssistant.jsx # AI-powered chat assistant
β β β βββ AnimatedButton.jsx # Animated UI button
β β β βββ Calendar.jsx # Event calendar
β β β βββ ChannelPage.jsx # Channel view
β β β βββ ConfirmationModal.jsx # Confirmation dialogs
β β β βββ ConnectionStatus.jsx # Network status indicator
β β β βββ CreateOrgModal.jsx # Organization creation
β β β βββ CustomCursor.jsx # Custom cursor effect
β β β βββ Dashboard.jsx # Main dashboard
β β β βββ EditChannel.jsx # Channel editing
β β β βββ EmojiPicker.jsx # Emoji selection
β β β βββ ErrorBoundary.jsx # Error handling
β β β βββ EventInputForm.jsx # Event creation form
β β β βββ EventModal.jsx # Event details modal
β β β βββ FAQList.jsx # FAQ section
β β β βββ FeatureHub.jsx # Feature quick access
β β β βββ FileUpload.jsx # File upload component
β β β βββ FocusMode.jsx # Pomodoro timer
β β β βββ Footer.jsx # Page footer
β β β βββ InviteModal.jsx # Member invitation
β β β βββ JoinedOrgDash.jsx # Org dashboard view
β β β βββ JoinOrgModal.jsx # Join organization
β β β βββ KeyboardShortcuts.jsx # Shortcuts panel
β β β βββ LandingComparison.jsx # Feature comparison
β β β βββ LandingFeatures.jsx # Features showcase
β β β βββ LandingHero.jsx # Landing hero section
β β β βββ LandingNav.jsx # Landing navigation
β β β βββ LandingPricing.jsx # Pricing section
β β β βββ LandingStats.jsx # Statistics display
β β β βββ LandingTestimonials.jsx # User testimonials
β β β βββ MeetingChat.jsx # In-meeting chat
β β β βββ MeetingModal.jsx # Meeting creation
β β β βββ MeetingReports.jsx # Meeting analytics
β β β βββ MeetingReportsOverview.jsx # Reports overview
β β β βββ MeetingRoom.jsx # Video conference room
β β β βββ MeetingSettings.jsx # Meeting preferences
β β β βββ MentionsList.jsx # User mentions
β β β βββ MessageReactions.jsx # Message reactions
β β β βββ Messages.jsx # Message display
β β β βββ NoteEditModal.jsx # Note editing
β β β βββ NoteInputModal.jsx # Note creation
β β β βββ NoteViewModal.jsx # Note viewing
β β β βββ NoticeBoard.jsx # Announcements board
β β β βββ NoticeModal.jsx # Notice creation
β β β βββ NoticeViewModal.jsx # Notice viewing
β β β βββ Notifications.jsx # Notification center
β β β βββ OnlineCounter.jsx # Online users count
β β β βββ OnlineStatus.jsx # User status indicator
β β β βββ OnlineUsersList.jsx # Online users list
β β β βββ OrgSettingsModal.jsx # Org settings
β β β βββ ParticleSystem.jsx # Particle effects
β β β βββ PinnedMessages.jsx # Pinned messages view
β β β βββ PollDisplay.jsx # Poll results display
β β β βββ ProtectedRoute.jsx # Auth route guard
β β β βββ PublicRoute.jsx # Public route guard
β β β βββ QuickPoll.jsx # Poll creation
β β β βββ ScrollProgress.jsx # Scroll indicator
β β β βββ Settings.jsx # User settings
β β β βββ Sidebar.jsx # Navigation sidebar
β β β βββ SmartSearch.jsx # Advanced search
β β β βββ StatusSelector.jsx # Status selection
β β β βββ TeamChat.jsx # Team messaging
β β β βββ TypingIndicator.jsx # Typing status
β β β βββ VoiceRecorder.jsx # Voice messages
β β βββ context/ # React Context providers
β β β βββ AuthContext.jsx
β β β βββ NotificationContext.jsx
β β β βββ SocketContext.jsx
β β β βββ ToastContext.jsx
β β β βββ UnreadContext.jsx
β β βββ hooks/ # Custom React hooks
β β β βββ useKeyboardShortcuts.js
β β βββ pages/ # Page components
β β β βββ ForgotPassword.jsx
β β β βββ Home.jsx
β β β βββ Landing.jsx
β β β βββ Login.jsx
β β β βββ MeetingPrep.jsx
β β β βββ MeetingReportsPage.jsx
β β β βββ ResetPassword.jsx
β β β βββ Signup.jsx
β β β βββ VerifyMail.jsx
β β βββ styles/ # CSS modules
β β βββ utils/ # Utility functions
β β β βββ meetingDebug.js
β β β βββ meetingReports.js
β β βββ App.jsx # Main App component
β β βββ index.css # Global styles
β β βββ main.jsx # Entry point
β βββ .env # Environment variables
β βββ index.html # HTML template
β βββ package.json # Dependencies
β βββ vite.config.js # Vite configuration
β βββ vercel.json # Vercel deployment config
β
βββ server/ # Express backend
β βββ src/
β β βββ configs/ # Configuration files
β β β βββ socket.js # Socket.IO setup
β β βββ controllers/ # Route controllers
β β β βββ authControllers.js
β β β βββ directMessageControllers.js
β β β βββ eventControllers.js
β β β βββ meetingChatControllers.js
β β β βββ meetingControllers.js
β β β βββ meetingReportControllers.js
β β β βββ messageControllers.js
β β β βββ noteController.js
β β β βββ noticeControllers.js
β β β βββ notificationControllers.js
β β β βββ orgControllers.js
β β β βββ pollControllers.js
β β β βββ searchControllers.js
β β βββ database/ # Database models & queries
β β βββ middleware/ # Express middleware
β β βββ routes/ # API routes
β β β βββ authRoutes.js
β β β βββ debugRoutes.js
β β β βββ directMessageRoutes.js
β β β βββ eventRoutes.js
β β β βββ meetingChatRoutes.js
β β β βββ meetingReportRoutes.js
β β β βββ meetingRoutes.js
β β β βββ messageRoutes.js
β β β βββ noteRoutes.js
β β β βββ noticeRoutes.js
β β β βββ notificationRoutes.js
β β β βββ orgRoutes.js
β β β βββ pollRoutes.js
β β β βββ searchRoutes.js
β β β βββ userRoutes.js
β β βββ templates/ # Email templates
β β βββ utils/ # Utility functions
β β βββ server.js # Server entry point
β βββ .env # Environment variables
β βββ package.json # Dependencies
β βββ vercel.json # Vercel deployment config
β
βββ email-service/ # Email microservice
β βββ src/
β β βββ index.js # Email service logic
β βββ .env # Environment variables
β βββ package.json # Dependencies
β βββ vercel.json # Vercel deployment config
β
βββ .gitignore # Git ignore rules
βββ README.md # This file
I welcome contributions! Here's how you can help:
- Fork the repository
- Clone your fork
git clone https://github.com/yourusername/syncspace.git
- Create a feature branch
git checkout -b feature/amazing-feature
- Make your changes
- Commit your changes
git commit -m "Add amazing feature" - Push to your branch
git push origin feature/amazing-feature
- Open a Pull Request
- Follow the existing code style and conventions
- Write clear, descriptive commit messages
- Add comments for complex logic
- Update documentation as needed
- Test your changes thoroughly
- Ensure all existing tests pass
- Add new tests for new features
- JavaScript/React: Use ES6+ syntax, functional components with hooks
- CSS: Use Tailwind utility classes, avoid custom CSS when possible
- Naming: Use camelCase for variables/functions, PascalCase for components
- Files: One component per file, named after the component
Found a bug or have a feature request? Please open an issue with:
- Clear description of the problem/feature
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Screenshots (if applicable)
- Environment details (browser, OS, etc.)
# Kill process on port 3000 (server)
lsof -ti:3000 | xargs kill -9
# Kill process on port 5173 (client)
lsof -ti:5173 | xargs kill -9
# Kill process on port 3001 (email service)
lsof -ti:3001 | xargs kill -9- Verify
DATABASE_URLis correct in server.env - Check Neon database is active and accessible
- Ensure SSL mode is enabled:
?sslmode=require
- Verify
CLIENT_URLmatches your frontend URL - Check allowed origins in
server/src/server.js - Clear browser cache and cookies
- Ensure
VITE_SOCKET_URLmatches server URL - Check firewall settings
- Verify WebSocket support in your environment
- Verify email credentials in
email-service/.env - For Gmail, use App Password (not regular password)
- Check
EMAIL_SERVICE_URLin server.env
- Verify Cloudinary credentials
- Check file size limits (default: 10MB)
- Ensure proper MIME types
- Use
npm run start:devfor auto-reload with nodemon - Check browser console for client-side errors
- Monitor server logs for backend issues
- Use
/healthendpoint to verify server status - Clear localStorage if experiencing auth issues
Built with β€οΈ by the Ishan Roy
β Star this repo if you find it helpful!
Made with π by developers, for developers