Cypher ChatApp

Published on
•
2 min read
•
––– views

Automatically generated narration. Code examples are available in the article.

Why I built it

I wanted a chat room people could join with a link, without creating an account. The idea was inspired by Enigma: being able to receive a message should not automatically mean being able to read it.

In Cypher, participants agree on a shared password, which I called an “enigma.” Messages are encrypted on the client before being sent. The room URL lets someone join the room; the password is used to decrypt the messages.

This was also the first application I completed with NeoSocket, my real-time networking framework.

How the chat works

Choose a room and a nickname, then enter the password agreed with the other participants. There is no login. Nicknames are just display names, so two people can choose the same one.

Messages are sent and received in real time, and the server stores them for 24 hours. The client checks its connection every five seconds and reconnects if the connection drops. The interface supports dark mode and works on phones, tablets, and computers. Rooms can also be embedded in another website.

What the password does

The shared password is part of the message-encryption design, not a verified identity for the person sending a message. I built this to explore a simple, low-friction chat flow. I have not presented it as an independently audited secure messenger.

Stack

PartTechnology
FrontendReact, TypeScript, Redux Thunk, MUI, NeoSocket TypeScript SDK
BackendNeoSocket on .NET 8
DatabaseMongoDB
HostingAWS for the frontend; GCP VM and Docker for backend and database
DeploymentFrontend CI/CD on AWS