The problem
My stream’s schedule, links, OBS scenes and chat commands were set up by hand across separate tools; I wanted them in one place I own.
How it’s built
Four React apps — the public site, the admin dashboard, the OBS overlays and the Studio — served from one origin by nginx, with a Spring Boot API in Docker on a self-hosted server.
Decisions
One origin: nginx serves all four apps and proxies the API.
Overlays have no fallback, so a mistyped URL fails visibly in OBS.
The Studio: a separate door for invited streamers, signed in with Twitch.
Discord and Twitch bots run inside the backend.
Outcomes
- I run my stream’s OBS overlays from it.
- Invited streamers use the Studio.
- The schedule, social links, OBS scenes and chat commands and timers are set from the dashboard and the Studio, not by hand.
Features
- Studio
The Studio, where the stream’s OBS overlays are built and managed.