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.
Anything you want to discuss, you can join me on this slack channel.
⚠️ This project is just using for technical test purpose, use at all your risk!
⚠️ There is freedom of speech, but I cannot guarantee freedom after speech. (- Idi Amin)
- Real-time Communicating
- Voice chat in room
- 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
- 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
- Real-time Collaborating
- User real-time collaboration, like whiteboard, you draw I guess, etc.
- Use CRDT to impelement real-time collaboration
- Whiteboard
- User real-time collaboration, like whiteboard, you draw I guess, etc.
- 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
- Azure Text to speech service.
- 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?
- Deep learning models are changing the world
- robot use Web Speech API to play with user in room
- AI Robot user, like game robot who can play or facilitate game
-
Common
- Use WebSocket to replace http protocol of JSON-RPC
- Compatibility
- Make Safari(WebKit) compatibility better
-
Tech Stack
- Use Elixir/Phoenix to rewrite the backend code
- Use Recat/Next.js to rewrite the frontend code
-
Infra
-
Use docker to deploy to PaaS platform like Railway or Fly - Use GitHub Actions + AWS Lightsail to deploy backend server
- Backend service cluster, auto scaling, load balancing, etc.
- Backend service use Elixir libcluster to build cluster
- Frontend app use the client load balance strategy
- 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
-
For now, we just ignore this issue, because it can be resolved by reconnect another node and create the room again
-
Some Elixir simple approaches
-
A complex approach is use Riak Core which implement the
Consistent hashing
and can rebalance the process by VNode- NkDIST, a Erlang distributed registration and load balancing lib which is base on
Riak Core
- NkDIST, a Erlang distributed registration and load balancing lib which is base on
-
Tinode chat solve this issue by implementing the Raft Consensus Algorithm
More
-
- Security enhancement, like coturn TLS setup, end-to-end encryption, etc.
- TURN enable TLS
- Privacy enhancement.
- IPV6 support.
-
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.
- free4.chat Elixir version is build on the top of Membrane Framework, thanks for their heart of open source.
- free4.chat Golang version is build on the top of Kraken, Mornin, coturn and Pion, thanks for their heart of open source.
- These websites also inspired me:
- Random voice and text chat rooms that you’ll love. | Speakrandom
- Practice Speaking English Online Free - Language Practice Community
- Agora Real-Time Voice and Video Engagement
- An open network for secure, decentralized communication - Matrix
- Introduction to Realtime Web Applications
- Gather | Building better teams, bit by bit