AmnisLive
A live-streaming social app where people follow each other, go live privately for a chosen audience, and replay past broadcasts. Building it in Flutter on Agora is where WebRTC clicked for me, from signaling to scaling one stream to a whole audience.
Overview
AmnisLive is a live-streaming social app: a Flutter app with an Express backend, Agora.io for real-time video, and Firebase for push notifications and data storage. People follow each other to see their broadcasts, creators can go live privately for an audience they choose, and a finished broadcast can be uploaded to AWS S3 so others can watch it later.
Where WebRTC clicked
Agora handles the real-time video layer, but building on top of it is where I learned how WebRTC actually works:
- Signaling: two devices can’t find each other on their own. Before any media flows, they exchange session descriptions (SDP offers and answers) over a signaling channel.
- NAT traversal: most devices sit behind routers. ICE tries candidate routes, STUN discovers a device’s public address, and TURN relays the media when no direct path works.
- Encrypted media: once connected, audio and video travel over SRTP, with keys negotiated through DTLS.
- Scaling to an audience: a peer-to-peer mesh falls apart past a handful of viewers, because the broadcaster would have to upload a separate copy for each one. Live streams instead send one stream up to servers that forward it to every viewer. That’s the selective forwarding unit (SFU) pattern, and it’s the role Agora’s network plays.
Features
- Follows: follow other users to see their broadcasts in your feed
- Private streams: go live for a selected audience only
- Replays: after broadcasting, the creator can upload the whole session, stored in AWS S3, so others can watch it later
- Push notifications: delivered through Firebase
Huble →
Time tracking and invoicing for teams. I lead development across the whole product, rebuilt the desktop tracker in Rust (130 MB down to 30 MB, with offline sync), and built its Paddle billing, real-time backend, and security-first infrastructure.