Most chat pet projects follow the same path: authentication, user search, a messages table, WebSocket delivery, and a React UI.
That is a good way to learn realtime development, but it has one architectural problem:
the server knows everything.
It knows the message text.
It can read the history.
It can return the last message in a chat list.
It can log private conversations by accident.
It can expose message content through an admin panel, a SQL query, a bug, or a compromised backend.
I wanted to build something different.
Not just another WebSocket chat, but a messenger where the backend is not a trusted party.
The rule was simple:
the browser encrypts, the server routes, the database stores ciphertext.
That project became Chaos Messenger — a full-stack end-to-end encrypted messenger built with Spring Boot 3, React, WebSocket/STOMP, PostgreSQL, Redis, and WebCrypto API.
Repository: github.com/vaazhen/chaos-messenger
Tech stack: Spring Boot 3, React 18, WebCrypto API, PostgreSQL, Redis,…