Hello world, this is RoboStreamer
Tags: webdev, javascript, svelte, showdev
Published: 2022-05-25 10:42:48

Hey DEV community!
I wanted to share a project I am working on in my free time and tell a bit about how it's structured and which frameworks and/or languages I picked to develop it.

The project is called [RoboStreamer](https://robostreamer.com) and allows users to upload pre-recorded video files to have them streamed via RMTP to their Steam Store pages. So its basically a marketing tool for (indie) game developers and publishers.

_Everything_ in this project is done by myself - the planning, development, design and marketing. I am happy to answer any questions you have!

## About me

My name is Chris - I am living in germany and currently working as [Head of Datadriven Content Portals](https://www.linkedin.com/in/christian-engel-a73457236/?lipi=urn%3Ali%3Apage%3Ad_flagship3_feed%3B0DgOOlQsR7WT7DAq5WAUmg%3D%3D) for t-online.de - one of, if not _the_ biggest german news site with more than 47 million monthly active users.

My team is responsible for concept/planning, development and delivery of the web portals which deliver live stock market and sports data.

I am an active web developer for nearly 20 years now and worked on lots of medium and big projects, try to be helpful for other devs and in [the open source community](https://github.com/paratron) and even founded a startup once.

In my free time, I work on different pet projects and one of them is RoboStreamer.

## Why I started working on RoboStreamer

Out of personal interest, I have a closer eye on the indie point-and-click adventure bubble. In my childhood, I loved playing games like Monkey Island, Day of the Tentacle, Kings' Quest and others.

![Four screenshots of the games 'Curse of Monkey Island', 'Day of the Tentacle', 'Kings Quest VII' and 'Indiana Jones and the Fate of Atlantis'](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3o586bjp5kywn516zyfg.jpg)
> Screenshots of the games 'Curse of Monkey Island', 'Day of the Tentacle', 'Kings Quest VII' and 'Indiana Jones and the Fate of Atlantis'

During a recent [Adventure Game Steam Event](https://bigadventureevent.com/), I noticed some developers were hosting pre-recorded Steam Broadcasts. I researched a bit about how this is done and noticed that its surprisingly much work to do so. You not only have to produce your video but you need to leave your computer running and follow strict configuration parameters in order to make your video appear as a live stream on your Steam Store Page.

And there are lots of developers doing this because - totally understandable - they have games to develop.

I noticed that - when you know how to do it, it's relatively simple to let an instance of ffmpeg handle the streaming part. For initial tests, I had a webserver running, installed [ffmpeg](https://ffmpeg.org/) there and configured the streaming settings by hand. I did so in order to support an indie game developer friend of mine.

This worked surprisingly well, and I thought by myself: if I add a simple UI around it, I may be able to help a lot of indie devs out there!

## How RoboStreamer works

This is my first personal project I built in a decentralized manner where even parts of the main system are separated processes being able to run on separate servers. For the sake of development speed, I settled with [Strapi](https://strapi.io) as my main data storage solution. It gives me an API and user authentication without much hassle. And from Strapi, its relatively straightforward piping events to my other services.


![A diagram showcasing the different parts of the RoboStreamer system](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/09n6ufsj4dn92lxusomk.jpg)
> A diagram showcasing the different parts of the RoboStreamer system

There is the upload service which accepts large video files cut into small pieces. It's responsible for merging the pieces back together and moves them to a storage solution hosted with Hetzner.
I will add video conversion there as well to make it even easier to create Steam Broadcasts from pre-recorded videos.

Another service is the coordination process which will spread streaming jobs to multiple running streamer processes. The
coordination process is like a load balancer for the streaming requests - it will give jobs to streamer instances with free capacity or even boot up new streamer instances, when needed.

All of those services are written in [Typescript](https://www.typescriptlang.org/) and run via [Node.js](https://nodejs.org).

Finally, there is the frontend process powering the RoboStreamer website and the control center. The whole frontend is created with [Svelte](https://svelte.dev) using [Elder.js](https://elderguide.com/tech/elderjs/) which makes it easy to create fast and SEO friendly web projects.

![Screnshot of the RoboStreamer Controlcenter with cursor hovering over a 'Start Stream' button](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/911ik5vuilel2nzcw2kn.jpg)
> Partial screenshot of the RoboStreamer controlcenter

## Thanks for reading!

If you are interested in using RoboStreamer for your Steam Store Page, give me a shout on [Twitter](https://twitter.com/therobostreamer) or register for the newsletter on the homepage.

If you'd like to discuss techy things - you are very welcome to have a chat with me as well!

Greetings, Chris