The goal of the project was to make a chat system that runs on the client, that can work offline, and has a server that stores pending messages and users. To have no barrier of entry, the client is built as a PWA so that, to use it, you just need a bookmark. The client stores the messages, contacts, and user data in the indexed DB to enable offline use. The server stores the global contacts and pending messages. The text of the messages and the passwords are encrypted on client-side and server-side.
For this project, I used Angular’s PWA support on the client and Spring Boot’s reactive MongoDB support on the server.