Cross Platform Chat Application
Register, Login and Authentication with session for a week,
Dark & Light Mode,
Realtime searching users, sending invites, accepting invites, remove contacts etc..,
You will see your contact's online presence and vise versa,
Realtime Chat with your contacts,
Know number of unread messages and notifications,
See delivered and seen messages, contact will know that you are typing and vise versa,
Realtime contact updates (get notified when a user sent a invite),
Add/Update profile picture, name or even bio (in progress),
Can reset password in settings,
Notifications for native devices, asking permission and contact notifications (contact notifications not tested my poor laptop).
App images are in the image directory,
Angular V16
Ionic V7
Docker
MongoDB
RedisDB - JSON
Redis - Pub/Sub
NestJS
Socket.IO - Websockets
REST - HTTP
JWT Auth - Access & Refresh Tokens
Signals
Monolithic - MVC
Docker/Docker-Desktop node & npm MongoDB Compass - Optional Android Studio - Optional
1.) pull this repo
2.) cd to client and npm i
3.) cd to server and npm i
4.) cd back to root and docker-compose up server redis redis-insight mongodb --build -V
5.) cd to client again and npm run start:local
6.) check http://localhost:4200/
7.) to check redisdb http://localhost:8001/ (Host: redis, port: 6379, name: local, username: default, password: password)
8.) to check mongodb open mongodb compass and connect to this url mongodb://root:password123@localhost:27017/
From root cmd - "docker-compose up --build -V" this will also containerize the Angular-Ionic frontend app and also takes some time to containerize and run
Angularv16, IonicV7, NestJS(monolithic), redis pub/sub & redisdb, MongoDB, Docker, built with only signals ( No NGRX & RxJS so far ), Basic default UI and themes, Socket.io extensive implementation
Make sure you use toggle device toolbar in your browser and set a android or ios device for better UI (Ionic)
Don't expect API & UI with error handling, loggers, testing and stuff (not there yet) , purely focusing on functionality
Default Profile Picture is a random 80 x 80 image from a website loaded at random, you can change it by adding your link for a image hosted online
Learning the Techs mentioned in note, as well as building a chat application project with backend scalability in mind
with redis pub/sub, websockets are H-scalable
and redis is also H-scalable with redis clusters
mongodb also H-scalable with multiple instances
NestJS monolithic to microservices (if required) is also possible with message brokers or other methods