A custom app is still content, so it reaches a screen the same way everything else does. You do not stand up a server for it. You hand the app to Screenly, Screenly hosts it, and your screens pull it down like any other content.
Where it actually runs depends on the device. On a capable device, ScreenlyOS in particular, the app runs locally, right on the device next to the screen. That keeps it fast, lets it work with what is on the device, and means it keeps going even when the connection does not.
Some Screenly Anywhere platforms cannot run an app’s full functionality on the device itself. For those, Screenly runs the app on its own side and sends the screen screenshots of it instead. The screen still shows your app; it is rendered for it rather than by it.
Either way, hosting and running the app is Screenly’s job, not yours. You build the app, and where and how it runs is handled for you.