Livra
Problem
The goal was to build a live-streaming experience similar to Twitch and Kick — without depending on a ready-made video service — running on the same backend across both web and mobile.
Approach
I built the web client with React 18 and Vite, and the mobile client with Flutter and Riverpod; I used Firebase Authentication and Cloud Firestore for authentication, database, and real-time sync. Rather than a ready-made service, I built the video stream from scratch with WebRTC; using Firestore as the signaling channel, I implemented single-broadcaster-to-many-viewer streaming that behaves identically on web and mobile.
Result
I added real-time chat, a follow system, and a category-based discovery screen. I wrote domain-scoped Firestore security rules following the least-privilege principle. When a followed broadcaster goes live, Cloud Functions + Firebase Cloud Messaging send instant notifications to their followers.
