free4chat
free4.chat is a real-time audio chat service. It is designed by the local first and privacy first
principle, and is very easy to use.
:warning: This project is just using for technical test purpose, use at all your risk!
:warning: There is freedom of speech, but I cannot guarantee freedom after speech. (- Idi Amin)
Features
- Real-time Communicating
- [x] Voice chat in room
- [x] Text chat in room, can sent text or emoji
- [ ] Persist text messages to browser localStorage
- [ ] Can send arbitrary data by WebRTC datachannel 🚩
- [ ] Room permission setting, like public/private type setting
- private room can't been seen on room discovery, and it needs password to enter. The password is End-to-End Encryption, server only need check the answer which given by the client like the
PoW
in blockchain.
- [ ] Public rooms discovery, like hot room list or filter rooms by type/tag
- Real-time Collaborating
- [ ] User real-time collaboration, like whiteboard, you draw I guess, etc.
- [ ] Use CRDT to impelement real-time collaboration
- [ ] Whiteboard
- Real-time Contesting
- [ ] AI Robot user, like game robot who can play or facilitate game
- robot use Web Speech API to play with user in room
- robot can play some voice games like language learning, technical interview, etc.
- AI + Voice
- Deep learning models are changing the world
- @midjourney can generate fatastic image from text
- @GitHubCopilot can generate context-awared code from short code segment
- @OpenAI GPT-3 model can generate text paragraph from short sentence segment
- Voice conversation from text?
Architecture
-
Common
- [x] Use WebSocket to replace http protocol of JSON-RPC
- Compatibility
- [ ] Make Safari(WebKit) compatibility better
-
Tech Stack
- [x] Use Elixir/Phoenix to rewrite the backend code
- [x] Use Recat/Next.js to rewrite the frontend code
-
Infra
- [x]
Use docker to deploy to PaaS platform like Railway or Fly
- [x] Use GitHub Actions + AWS Lightsail to deploy backend server
- [x] Backend service cluster, auto scaling, load balancing, etc.
- Backend service use Elixir libcluster to build cluster
- Frontend app use the client load balance strategy
- [x] TURN cluster scale
- Fix by start turn before the libcluster, still wait the upstream library to fix it normally
-
[ ] Room process rebalance, that means if the node where room in is offline, then the room process can rebalance to another node, the rebalance can use Consistent hashing to implement
- [ ] Security enhancement, like coturn TLS setup, end-to-end encryption, etc.
- [ ] TURN enable TLS
- [ ] Privacy enhancement.
- [ ] IPV6 support.
Documentation
https://dev-notes.free4.chat/
Contribution
If you are interested in webRTC
, peer-to-peer(P2P)
, real-time collaboration(CRDT)
, distributed system
or robot design
, you can join this project and contact with me by twitter.
Thanks