Talkie is a free, open-source, secure, peer-to-peer video chat app that you can use to talk to your friends.
Talkie is a side-project that I use to play with WebRTC and brand new Web APIs. Talkie uses :
| Category | API | Used for... | 
|---|---|---|
| WebRTC | RtcPeerconnection | Creating peer to peer connections | 
| WebRTC | Data Channels | Sending messages and images | 
| WebRTC | MediaDevices / enumerateDevices | Selecting audio and video sources | 
| WebRTC | MediaDevices/ getUserMedia | Stream the user audio / video | 
| WebRTC | MediaDevices / getDisplayMedia | Share the user screen | 
| PictureInPicture | Video / requestPictureInPicture | Enable picture in picture for a user | 
| Clipboard | writeText | Copy the space link | 
| Clipboard | write | Copy the space QR code | 
| Clipboard | paste event | 
Send images from the clipboard over data channels | 
| Canvas | captureStream | (Experiment) Merge all streams to a canvas | 
| Canvas | toBlob | To copy a canvas to the clipboard | 
| WebAudio | AnalyzerNode | Detect sound and silence | 
| Navigator | Connection | Detect connection type | 
| PWA | Service Workers | Installing Talkie on your device! | 
The source code can be found here.
The signaling server is a GraphQL API, written using :
- ✅ TypeScript
 - 🚀 Apollo server as a GraphQL server
 - 🄺 Koa
 - ♻️ Dependency Injection using Awilix
 - 📦 Redis as a database / pubsub
 
The source code can be found here.
The frontend is a React app using :
- ✅ TypeScript
 - 🚀 urql as a GraphQL client
 - 💅 styled-components for styling
 - 🎥 framer motion for animations
 
This project extensively uses new APIs such as CSS Grid or CSS custom properties.
To run this project locally, you will need
- Docker and docker-compose
 - Yarn
 - A version of Node supported by create-react-app.
 
To start the app :
- Install dependencies using 
yarnin the project root - Run 
docker-compose upin the project root (this will start Redis and the signaling server in watch mode usingts-node) - Run 
yarn startin thepackages/webdirectory (this will start the front-end) 
# Configure the remote machine (install Nginx and Docker)
ansible-playbook infra/playbooks/install.yml
# Configure the reverse proxy
ansible-playbook infra/playbooks/reverse_proxy.yml
# Deploy the app
ansible-playbook infra/playbooks/talkie.yml