EncChat is a modern real-time communication application that offers users an intuitive and secure environment for chatting. With support from advanced technologies such as React, Vite, Node.js, and PostgreSQL, EncChat ensures reliability, flexibility, and security in message management. The application includes features like registration, login, friend search, profile and chat personalization, and notification management.
User Authentication
- Account registration with CAPTCHA and password encryption
- Login via username or email
- Password recovery and "remember me" option
- Email verification
Main Interface
- User profile with photo, name, and email
- Friends list and recent chats
- Conversation window
- User search capability
Profile Settings
- Change profile picture, password, and personal information
- Application appearance customization
- Blocked users management
- Message and contact statistics
Chat Settings
- Disappearing message mode
- Multimedia preview
- User blocking capability
Notifications
- Recent event information
- Invitation and notification list management
End-to-End Encryption
- Client-side message encryption
- Secure key exchange protocol
- Protection against unauthorized access to messages
Key Backup & Recovery
- Secure encryption key backup system
- Key recovery mechanisms
- Protection against key loss
Friend Management
- Friend request system
- Friend search functionality
- Managing friend relationships
Toast Notification System
- Real-time status notifications
- Action feedback alerts
- Error and success messaging
- React + Vite
- React Router
- WebSockets for real-time communication
- Web Crypto API for client-side encryption
- Node.js
- Express
- WebSocket server
- JWT authentication
- PostgreSQL with Prisma ORM
- Cloudinary for image storage
The application follows a client-server architecture with end-to-end encryption:
- User Interface Layer: React components handling the UI/UX
- Client-side Encryption Layer: WebCrypto API for local message encryption
- Communication Layer: WebSockets for real-time data exchange
- Server Layer: Node.js + Express handling API requests
- Storage Layer: PostgreSQL database for persistent data
- Node.js (v14 or higher)
- PostgreSQL
- Git
-
Clone the repository:
git clone https://github.com/yourusername/EncChat.git cd EncChat -
Install dependencies:
npm install
-
Create a
.envfile with necessary environment variables:DATABASE_URL=postgresql://username:password@localhost:5432/encdb JWT_SECRET=your_jwt_secret ENCRYPTION_KEY=your_encryption_key CLOUDINARY_CLOUD_NAME=your_cloud_name CLOUDINARY_API_KEY=your_api_key CLOUDINARY_API_SECRET=your_api_secret
-
Initialize the database:
npx prisma migrate dev
-
Run the development server:
npm run dev
- Open
http://localhost:3000in your browser - Register a new account or log in to an existing one
- Add friends by searching for their username
- Begin chatting in a secure, end-to-end encrypted environment
- Customize your profile and chat settings as needed
EncChat prioritizes user security with several key features:
- End-to-end encryption using the Web Crypto API
- RSA key pairs for secure key exchange
- AES-GCM for symmetric message encryption
- No plaintext message storage on the server
- Secure chat session management
- Password hashing with bcrypt
- Patryk Czartowski - Project Lead - GitHub
- Kacper Pianka - Developer - GitHub
- Paweł Piernicki - Developer - GitHub
This project is licensed under the MIT License - see the LICENSE file for details.
