← All projects

End-to-End Encrypted Messaging App

Secure real-time communication

Personal Project
ReactTailwind CSSExpressPostgreSQLSocket.ioRSA-4096AES-256-GCMVitest

Overview

An end-to-end encrypted, real-time messaging web application. Messages are encrypted client-side using AES-256-GCM with RSA-4096 key exchange, ensuring that only intended recipients can read them. The app supports real-time messaging via WebSockets and persists message history in PostgreSQL.

Key features

  • End-to-end encryption — RSA-4096 for key exchange, AES-256-GCM per-message encryption
  • Real-time messaging over WebSockets (Socket.io)
  • RESTful API backend built with Express and PostgreSQL
  • Responsive UI built with React and Tailwind CSS
  • Comprehensive test suite using Vitest, Supertest, and jsdom

Architecture

The client application communicates with the Express backend via both REST endpoints (for authentication, message history, user management) and WebSocket connections (for real-time message delivery). The server manages connections through Socket.io rooms, routing encrypted messages between online users and persisting them to PostgreSQL for offline retrieval. Encryption and decryption happen entirely client-side; the server never accesses plaintext message content.

Results

Delivered a fully functional secure messaging app with end-to-end encryption. Wrote an extensive test suite achieving strong coverage across frontend components and API endpoints. The architecture cleanly separates encryption concerns from the transport layer.

Gallery placeholder
View on GitHubLive demo