Skip to content
All work
IoT & infrastructureIn use

Uracam

Live video from off-grid sites over cellular, without a SaaS subscription.

The problem

Remote sites often sit behind carrier-grade NAT on LTE connections, with no way to accept inbound traffic. Commercial camera clouds work around that, but charge a recurring fee per camera.

Approach

A Raspberry Pi at each site pulls the RTSP stream from the local IP camera and keeps a WireGuard tunnel open to a central VPS. The VPS runs a MediaMTX relay and serves viewers over WebRTC, falling back to HLS when the connection degrades. A small Next.js dashboard sits in front, behind authentication.

[ IP camera (RTSP) ]
        │ LAN
[ Raspberry Pi edge unit ]
        │ WireGuard tunnel over LTE
[ VPS ]
  ├── MediaMTX relay (WebRTC / HLS)
  ├── Nginx reverse proxy + auth
  └── Next.js dashboard

Key decisions

  • A WireGuard overlay with persistent keepalives gets around carrier NAT without any inbound port forwarding at the site.
  • An SSH jump host with per-unit port offsets allows out-of-band access to each camera for debugging.
  • The dashboard runs directly on the VPS under PM2, with no third-party cloud dependencies.

Highlights

  • Runs at several remote sites in Southern Africa.
  • Viewers get low-latency WebRTC, with automatic HLS fallback on poor links.
  • Video stays on infrastructure I control, with no per-camera fees.

Stack

  • Raspberry Pi
  • WireGuard
  • MediaMTX
  • WebRTC
  • HLS
  • Next.js
  • TypeScript

© 2026 Munotidaishe Zuze

terminal
Type "help" to see what this terminal can do.