Each part (Frontend, Backend, etc.) should only handle their own works.
Frontend
- Display base UI
- Handle user input (inputted messages, button clicks, etc.)
- Display chat messages, rooms, users
Backend
- Manage WebSocket connections
- Manage internal logics (rooms, room memberships, etc.)
- Handle authentication and authorization
- Route received messages
- Handle Redis pub/sub
Client
- Handle user input
- Handle client-side encryption/decryption
- Handle WebSocket
- Open WebSocket connection to server
- Handle client-side encryption/decryption