Overview
BoomPortal turns a Raspberry Pi 5 into a dedicated game streaming host using Sunshine (server) and Moonlight (client). Housed in a Pironman 5 case with NVMe storage and active cooling, it streams games to TVs, laptops, and tablets across the home network with minimal latency.
Role & Stack
Solo project — hardware assembly, Docker configuration, Nginx reverse proxy routing, and controller input mapping.
- Hardware: Raspberry Pi 5 (8GB) in Pironman 5 case (NVMe SSD, OLED status display, RGB fan)
- Streaming: Sunshine (host) → Moonlight (clients)
- Proxy: Nginx Proxy Manager for TLS and subdomain routing
- Containers: Docker Compose for Sunshine and supporting services
Problem
Wanted to play games on any screen in the house without moving hardware or running HDMI cables. Off-the-shelf solutions (Steam Link, Parsec) had limitations with non-Steam games and controller compatibility across different client devices.
Solution
Set up a dedicated streaming host on the Pi 5 that acts as a central game server:
- Sunshine runs as a Docker container, encoding the Pi's display output via hardware encoder
- Moonlight clients on TVs (Android), laptops, and tablets connect over LAN
- Nginx Proxy Manager provides TLS-secured access via subdomain (
boom.shottsserver.com) - Controller profiles mapped per-device to handle different gamepads (Xbox, PS5, 8BitDo)
Performance (measured):
Wired (Ethernet): ~12–18ms latency, 1080p60 stable
Wi-Fi 6 (5GHz): ~25–35ms latency, 1080p60 with occasional frame drops
Encoding: Hardware H.264 via Pi 5's VideoCore VII
Pironman 5 Case
The Pironman 5 case was a key part of the build — it adds NVMe M.2 storage, an active cooling fan with PWM control, an OLED status display (showing IP, CPU temp, usage), and RGB lighting. The NVMe drive holds game data and container volumes, keeping the microSD free for the OS.
Results
- 1080p60 streaming to any device in the house with one-click Moonlight connection
- Controller mapping profiles eliminate input issues across device types
- Reverse proxy access means no port memorization — just a clean URL
- OLED display provides at-a-glance system health without SSH
What I Learned
- Hardware encoding capabilities and limitations of the Pi 5's VideoCore VII
- Profiling streaming bottlenecks (encode time vs. network latency vs. decode time)
- Controller input mapping across platforms (evdev, SDL, Moonlight profiles)
- Docker networking on ARM64 — bridge mode vs. host mode trade-offs for low-latency streaming
- Physical build considerations: thermal management, NVMe compatibility, case airflow
