ZuChat is a secure, end-to-end encrypted messaging platform designed for private and real-time communication. Built with React.js, Node.js, and AWS Cloud Services, it ensures message confidentiality, performance, and scalability with modern cloud infrastructure.
- End-to-End Encryption (E2EE) – AES-256 encrypted messages readable only by sender and receiver
- Group Chat Security – Encrypted symmetric key for private group conversations
- Real-Time Messaging – Powered by WebSockets using Socket.io
- Encrypted File Sharing – Files encrypted client-side and stored securely on S3
- Self-Destructing Messages – Optional message auto-deletion with TTL in DynamoDB
- User Authentication – Secure login and JWT session management
- Analytics & Engagement – Real-time metrics using AWS Pinpoint
- Scalable Cloud Infrastructure – Auto-scaling with AWS Fargate & EC2
| Component | Service/Technology |
|---|---|
| Frontend | React.js, Chakra UI (Hosted on S3) |
| Backend | Node.js, Socket.io (EC2, Vercel ) |
| Database | Amazon DynamoDB, Amazon RDS |
| Storage | Amazon S3 |
| Analytics | AWS Pinpoint |
| Containerization | Docker |
-
User Authentication
- Login/Register with credentials stored in Amazon RDS
- JWT token used for securing user sessions
-
Message Encryption
- Messages encrypted client-side using recipient's public key
- Stored encrypted in DynamoDB; unreadable by backend
-
Real-Time Messaging
- Persistent Socket.io connection via WebSocket
- Immediate message delivery and read receipts
-
Encrypted Media Sharing
- Client-side encrypted uploads to S3
- Secure, expiring pre-signed download links
-
Logout & Cleanup
- Token invalidation, socket disconnect, memory cleanup
git clone https://github.com/<your-username>/zuchat.git
cd zuchatnpm install # For frontend
cd backend
npm install # For backend
Create a .env file in both frontend/ and backend/ directories:
AWS_REGION=<your-aws-region>
AWS_ACCESS_KEY_ID=<your-access-key>
AWS_SECRET_ACCESS_KEY=<your-secret-key>
JWT_SECRET=<your-jwt-secret>
S3_BUCKET_NAME=<your-s3-bucket>
DYNAMODB_TABLE_NAME=<your-table-name>
RDS_CONNECTION_STRING=<your-rds-uri>
cd backend
node index.js
cd ../frontend
npm start



