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.
Install / Use
/learn @i365dev/Free4chatREADME
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 🚩
- https://github.com/elixir-webrtc/ex_webrtc
- [ ] 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
PoWin 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
- https://github.com/derekkraan/delta_crdt_ex
- https://github.com/electric-sql/vaxine
- https://github.com/liveblocks/liveblocks
- https://github.com/yjs/yjs
- [ ] Whiteboard
- https://github.com/tldraw/tldraw
- [ ] Use CRDT to impelement real-time collaboration
- [ ] 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
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
-
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 hashingand 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
<details> <summary>More</summary>- https://github.com/tinode/chat/issues/28
- https://github.com/tinode/chat/issues/279
- https://github.com/tinode/chat/blob/master/server/topic_proxy.go
- https://github.com/tinode/chat/blob/master/server/cluster.go
- https://github.com/tinode/chat/blob/master/server/cluster_leader.go
- https://github.com/tinode/chat/blob/master/server/ringhash/ringhash.go
-
- [ ] 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
- 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
About the Author
This project is maintained by the creator of MyInvestPilot — a systematic investment assistance platform focused on rule-based, long-term investing and transparent strategy research.
🔗 https://www.myinvestpilot.com
Related Skills
bluebubbles
342.0kUse when you need to send or manage iMessages via BlueBubbles (recommended iMessage integration). Calls go through the generic message tool with channel="bluebubbles".
canvas
342.0kCanvas Skill Display HTML content on connected OpenClaw nodes (Mac app, iOS, Android). Overview The canvas tool lets you present web content on any connected node's canvas view. Great for: -
slack
342.0kUse when you need to control Slack from OpenClaw via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
frontend-design
84.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
