Lowcall
Realtime WebRTC communication platform designed during internet shutdowns to provide fast, low-friction video calling with minimal infrastructure overhead.

Lowcall started during periods of internet shutdowns when traditional communication platforms became unreliable or inaccessible. I needed a fast and lightweight way to stay connected with family and friends, so I built a realtime video calling platform optimized around simplicity and resilience.
Instead of treating the project as a feature-heavy communication platform, I focused heavily on reducing interaction friction. Users could instantly create or join rooms without authentication, setup flows, or unnecessary UI complexity.
The project became my first serious experience combining frontend architecture, realtime communication systems, deployment, and infrastructure management at the same time. Debugging peer connection failures, websocket synchronization issues, and reconnect behavior taught me far more than typical frontend-only projects.
What makes the project meaningful to me is that it solved a real problem for real people during a difficult period. The engineering decisions were driven by practical constraints rather than portfolio aesthetics.
Realtime peer-to-peer video communication
Room-based instant connection flow
Minimal onboarding without authentication
Connection recovery and reconnect handling
Responsive low-latency UI architecture
Self-hosted signaling infrastructure
WebRTC Peer Connection Layer
The core communication layer was built around direct peer-to-peer WebRTC connections to reduce latency and minimize dependency on centralized infrastructure. Socket.io was used strictly for signaling and room coordination.
Minimal Friction User Flow
The entire product experience was intentionally designed around speed and accessibility. Users could instantly join rooms without account creation or setup, reducing interaction cost during unstable internet conditions.
Self-Hosted Infrastructure
Deployment and infrastructure were managed manually on Linux servers, including reverse proxy configuration, websocket handling, SSL setup, and runtime debugging.
Handling unstable peer reconnections during weak or interrupted internet conditions.
Managing inconsistent WebRTC browser behavior across devices and network types.
Synchronizing signaling state without introducing UI blocking or race conditions.