Why do I want this?
- Need to do some quick code collaboration with someone remotely?
- Need a simple way to do a remote coding interview?
- Tired of flipping back and forth between Google Hangouts and Google Docs during the interview?
- Don't want to sign-up for or pay for a SaaS interview or web conference platform?
Use this project to create an (almost) free coding web conference in less than 5 minutes.
Most importantly, you don't need to do any local development to use it: click the purple button, configure some stuff, start a conference room, send the URL to the attendee. That's it!
Setup will take about 5 minutes the first time. After the first time, it's about 30 seconds.
1. Deploy app
This will deploy the web app to Heroku.
2. Configure app
This will walk you through generating and pasting a few Twilio configuration values and, if you don't have one, direct you to create a Twilio account first.
3. Create conference
After Heroku has finished deploying the app, click the button to view it. From there choose a name for your code conference (or use the random suggestion) and click 'Create New Code Conference'.
You can create as many code conferences as you like.
4. Share URL
Share the URL with the person you want to collaborate with. Anyone that visits that URL will see the same code that you see. Any edits you or your collaborator make will be shared in real-time.
5. Connect video
If two people are viewing a code conference URL, one of you can click 'Connect Video' to establish a peer-to-peer audio and video WebRTC connection between your browsers. The other side will be prompted by and must accept the invitation.
What is Heroku? "Heroku is a cloud platform that lets companies build, deliver, monitor and scale apps — we're the fastest way to go from idea to URL, bypassing all those infrastructure headaches." (from https://www.heroku.com/what)
What is Twilio? Twilio is "A Messaging, Voice, Video and Authentication API for every application" (from https://www.twilio.com)
Is this really free? Well, almost. This app uses two services -- Heroku and Twilio -- and the total cost will range from $0.0002 (not a typo) to $0.501 for a 60 minute conference with two people. Cost is pay-as-you-go, i.e. it's related to the length of the conference and the number of participants. You pay for what you use. No automatically recurring monthly fee that you'll forget to cancel.
Heroku provides the hardware the app runs on and makes sure it has no problems. Heroku allows anyone to run an app for free for 18 hours per day (i.e. it must "sleep" for six hours each day). If you need more you can upgrade your app's plan. Here's Heroku's pricing page.
Twilio helps setup the peer-to-peer connection between interviewer and interviewee and provides some "magic" to ensure it works smoothly. This magic is where the cost comes in. Sending peer-to-peer audio and video over the web is not simple because 1) the technology standard used, WebRTC, is still pretty new and 2) NAT, which is used in most home and corporate networks, makes it difficult to establish direct peer-to-peer connections. Because of these complexities, Twilio pricing is a little less simple to explain. Here are the relevant pricing pages: Video Pricing and STUN/TURN Pricing. TURN is the part that could potentially bring the cost up to $0.50, which is still not really that bad for a 60 minute video call. TURN relays the audio and video between peers in scenarios where a direct peer-to-peer connection cannot be established.
Can I use this for interviewing candidates without worrying about it crashing? Not yet! But that's because my code has not been fully tested. However the underlying services provided by Heroku and Twilio are battle-tested and very stable. Heroku is owned by Salesforce and, as of writing this (March 2016), serves 8 billion requests per day. Twilio is the leader in programmable web, SMS, and video communications. Here is more information about Twilio's security, resiliency, and scalability.
I found a bug. Please tell me about it so I can fix it!
Have an unanswered question? Ask it here.
- Marcel Klehr for gulf and gulf-codemirror
- Joseph Gentle and Devon Govett for Operational Transformation types and useful docs
- Marijn Haverbeke for CodeMirror