Sendr

A Distributed Instant Messaging Application featuring E2E Encryption
Skills: Distributed Systems, Full-Stack Development, Research
Languages: React JS, Typescript, Golang.

Sendr was the result of a research project designed to examine the tradeoffs between security and practicality when implementing distributed systems. Sendr is a distributed messaging application that uses end-to-end RSA public key encryption to facilitate server-blind group chats. Messages are encrypted with other users' public keys as they are sent, and then decrypted by each user using their unique private key that is not shared with any server. This ensures that if one or more of the servers were compromised, the user's messages would remain private. When a user joins a chat, they automatically send their public key to all users in that chat. This prompts each user their public key back to that user, ensuring that users can communicate freely.

Additionally, Sendr’s backend allowed for users to communicate with multiple servers at the same time. This project used Redis to facilitate a pub/sub architecture to synchronize each instance. It also had the ability to support AWS Elastic Load Balancing. In addition to being a good exercise in distributed development and secure coding, this project primarily served to examine the difficulties associated with maintaining confidentiality and privacy on distributed networks. You can check out a detailed analysis of the project Here.