WhatsUp is a feature-rich chat application built with modern web technologies. It provides real-time messaging capabilities with a clean, responsive UI that works seamlessly across all devices.
You can try the application at: https://whatsup-chat.onrender.com/
- Real-time messaging: Instant message delivery using WebSocket technology
- Video calling: HD video calls with screen sharing and call controls
- User authentication: Secure user management with Clerk
- Redis caching: High-performance caching for conversations and messages
- Responsive design: Works seamlessly on mobile, tablet, and desktop
- Dark/Light mode: Theme customization for user comfort
- Group conversations: Create and manage group chats
- Message status: Track when messages are sent, delivered, and read
- Media sharing: Share images and other media in conversations
- Modern UI: Clean interface with smooth animations and transitions
- React 19
- TypeScript
- Vite
- Tailwind CSS
- Shad CN UI Library
- Clerk for authentication
- Node.js
- Express
- TypeScript
- PostgreSQL database
- Prisma ORM
- Redis for caching
- WebSockets for real-time communication
- Stream.io for video calling
- Node.js (v18 or newer)
- PostgreSQL
- Git
-
Clone the repository
git clone https://github.com/dasakash26/WhatsUp.git cd WhatsUp -
Set up the backend
cd server npm install # Create a .env file with your database and Clerk credentials # Example: # DATABASE_URL="postgresql://username:password@localhost:5432/whatsup" # CLERK_SECRET_KEY=your_clerk_secret_key # REDIS_URL=redis://localhost:6379 # REDIS_PASSWORD=your_redis_password # STREAM_API_KEY=your_stream_api_key # STREAM_API_SECRET=your_stream_api_secret # Run migrations npx prisma migrate dev # Start the server npm run dev
-
Set up the frontend
cd ../client npm install # Create a .env file for your frontend environment variables # Example: # VITE_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key # VITE_API_URL=http://localhost:4000/api # VITE_WS_URL=ws://localhost:4000 # VITE_STREAM_API_KEY=your_stream_api_key # Start the development server npm run dev
-
Access the application
Open your browser and navigate to http://localhost:5173
- Frontend:
cd client && npm run dev - Backend:
cd server && npm run dev
- Frontend:
cd client && npm run build - Backend:
cd server && npm run build
- HD Video Calls: Crystal-clear video calling with Stream.io integration
- Screen Sharing: Share your screen during calls
- Call Controls: Mute/unmute, video on/off, end call functionality
- Call Notifications: Real-time ringing notifications for incoming calls
- Call History: Track call history and missed calls
- Conversation Caching: Fast loading of conversation lists with Redis
- Message Caching: Cached message history for quick retrieval
- Cache Invalidation: Automatic cache updates when data changes
- Error Handling: Robust error handling for cache operations
- Performance: Reduced database load and faster response times
- Smart Invalidation: Cache automatically clears when conversations/messages are modified
- Participant-based Caching: Cache keys based on user participation
- TTL Management: Optimized cache expiration times (5min conversations, 10min messages)
- Fallback Handling: Graceful degradation when Redis is unavailable
WhatsUp/
βββ client/ # Frontend application
β βββ public/ # Static assets
β β βββ logo.webp # Application logo
β βββ src/ # Source code
β β βββ components/ # Reusable UI components
β β β βββ videoCall/ # Video calling components
β β β βββ ui/ # UI library components
β β βββ contexts/ # React contexts for state management
β β βββ hooks/ # Custom React hooks
β β βββ lib/ # Utility functions and helpers
β β βββ types/ # TypeScript type definitions
β β βββ App.tsx # Main application component
β β βββ main.tsx # Application entry point
β βββ .env.example # Example environment variables
β βββ package.json # Frontend dependencies
β βββ tailwind.config.js # Tailwind CSS configuration
β βββ vite.config.ts # Vite configuration
β
βββ server/ # Backend application
β βββ prisma/ # Prisma ORM configuration and migrations
β β βββ migrations/ # Database migration files
β β βββ schema.prisma # Database schema
β βββ src/ # Source code
β β βββ controllers/ # Request handlers
β β βββ lib/ # Cache management and utilities
β β β βββ cacheManager.ts # Redis cache system
β β βββ middlewares/ # Express middlewares
β β βββ routes/ # API routes
β β βββ utils/ # Utility functions
β β βββ websocket/ # WebSocket implementation
β β βββ index.ts # Server entry point
β βββ .env.example # Example environment variables
β βββ package.json # Backend dependencies
β
βββ Demo/ # Demo screenshots and assets
β βββ ui-demo.png # UI demonstration image
β
βββ .gitignore # Git ignore file
βββ package.json # Root package.json for workspace commands
βββ README.md # Project documentation
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Distributed under the MIT License. See LICENSE for more information.

