What all tech should I study to make a real time messenger?

I have designed a chat app with Flutter and would like to know what to do next. What (if possible affordable) tech (like AWS, Azure, Firebase, Django, SQL, etc) should be used since I don’t know what any of these are. Will there be any disadvantages in using it?

I would like to study about it so I can implement it in my app as the best way I learn is actually implementing things and doing it. I hope I can make a messenger (like Telegram) with very good security (E2EE) and the chats, photos, videos, etc. backed up in the cloud.

Would you guys tell me what to do/study and point me in the right direction.

Thanks a lot

(I know this is a very advanced topic but I am determined to do whatever it takes :smiley:)

What (if possible affordable) tech (like AWS, Azure, Firebase, Django, SQL, etc) should be used since I don’t know what any of these are.

This is probably a good place to start. I’d only learn enough of the technology to know if you actually could use it and want to use it for your project.

I hope I can make a messenger (like Telegram) with very good security (E2EE) and the chats, photos, videos, etc. backed up in the cloud.

This sounds like a “lower level” requirement that, if important for your application, should be one of the key deciding factors. For example you could build a messenger app super fast with Firebase technologies, but since its a Paas (Platform as a Service) you wont be able to get your own e2ee beyond what your provided with. (This is just an example)

check out Meteor for building real-time apps.

I think you’re a very long way off understanding much of what you require here (this is totally fine! You need to start somewhere), but be aware for the particular thing I’ve quoted above, you’ve picked two fundamentally incompatible things, you can’t have both.

Could you back up the encrypted content, and keep the private key on the device? I assume this would introduce some overhead, however, when rotating keys.

Yes, but the data is on other computers, that’s the key thing here. I mean, you can encrypt absolutely everything, that would be taken as given, it has to be done. Guaranteeing that security when the thing you need to secure is stored on different computers is hard. What the OP is wanting to do is have a highly secure messenger application combined with the convenience of “cloud” storage. So take all the data transmitted in that application, and securely transmit it back and forth to some “cloud”, ie to other computers, which also have to be highly secure. It mutiplies the number of attack vectors, opportunities for error, blind spots. It’s possible to get good tradeoffs, but there are enormous privacy implications for this, and there aren’t simple solutions, because as I say the two things are opposed (fundamentally is maybe too strong a word, but not far off – it’s security or convenience normally, not and).

1 Like

That makes sense, thanks for detailing it!

1 Like

Why not make a chat app first and then figure out how to add the storage functionality later? You can try to design it so you can switch out and use different tech with minimal modifications. For example, I made a simple blog that first used just React state, then used local storage, and then upgraded it to Firebase. You might be able to do something similar (although your use case is much harder).

Firebase, by the way, is very easy to use and there are handy YouTube tutorials.