Moonlite
I built a simple browser based Zoom clone for quickly connecting with people on the internet. My goals were:
- audio, video, screensharing, chat
- no user accounts
- limit rooms to 2 people
- cost $0 to operate
- free to use for everyone!
How it works #
- You visit moonlite.live and land in a random room indicated by the url.
https://moonlite.live/cello-forum-rainbow
is one example. - Share the url. The first person to visit the url will instantly connect with you. As long as you’re connected, no one else will be allowed to join.
- That’s it.
The backstory #
Over the past few months I’ve been using the Twilio Programmable Video api at Hopps and at some point I realized that we were paying on the order of $50+/month for something I could build in about a day. Most of the modern WebRTC magic that allows two people to connect via audio, video and screen share through the browser is built directly into the browser for free, for everyone! The only missing part left to implement was a signaling server.
All the excitement of getting to run your own signaling server…
What is a signaling server? I like to go to the climbing gym. Much like video calling, climbing is a two person activity. One person belays while the other climbs and vice versa. If you happen to be at the gym by yourself, you can tell the front desk you’re looking for a partner. Then, when somebody else shows up by themselves and tells the front desk they’re looking for a partner, an announcement is made over the PA system and the two of you are introduced. That’s basically what a signaling server does. You and another person tell a signaling server you’re ready to talk and the signaling server exchanges your contact details (IP addresses) so your computers can connect directly.
Even though signaling happens mostly at the beginning of a conversation and occasionally when the network quality changes, Twilio still charges you for every minute of talk time. I already had a Linode that hosts sacalerts.com so I wrote and deployed a simple signaling server using Node and socket.io. It’s working well. It should scale to about 1000 concurrent connections so help me test!
All of the code is currently ugly and available here.
moonlite.live, why? #
Hover was having a sale on .live domains, $4.99 for the first year.
Because I’ve spent time moonlighting (get it?) on Codementor over the past few months. I like it a lot. People post requests asking for help with real world programming problems and pay you to solve them in real time. However, Codementor does not provide an easy way for users to talk (I don’t have Zoom installed, or I don’t have a Gmail account, etc). Now I can just send them a moonlite link…