Digital Signage
Screens get a small JSON, not a video; the design is drawn on the device.
A real-time system that sends lightweight JSON documents instead of videos to Android screens, which render them with templates.
- Role
- Backend, admin panel, Android
- Year
- 2026
- Status
- Open source
- Stack
- NestJS · Next.js · Kotlin · Jetpack Compose · WebSocket · Docker
- Links
- Source
Architecture
Architecture
- 01
Android screen
Kotlin + Jetpack Compose. Templates live in the APK; a new template is one registry line and one Composable.
- 02
Admin panel
Next.js. Screens, devices, media, schedules and team; the preview is drawn with the same measures as the device.
- 03
WebSocket
A raw WebSocket that OkHttp can speak; changes travel as RFC 6902 deltas.
- 04
NestJS + SQLite
Multi-tenant organizations, roles, invitations, plan limits and the schedule engine.
Screens
Screens
Four screens on four templates: info, orders, queue number and media.
Pairing
A new device shows its ID and a QR code, and is paired from the panel with that code.
Real screenshots, matched to language and theme
How it works
The control plane is JSON
The server only tells a screen “render this template with this data”. Heavy media sits in a separate library; the device downloads it ahead of time, verifies it with SHA-256 and plays it from disk. Changes are designed to reach a device in under a second with almost no bandwidth.
Only the difference travels
When an order is added, only the changed fields travel, not the whole screen. If a device cannot apply a patch it asks for the full data itself. A change arriving from the panel over HTTP is handed to the device’s WebSocket through an in-process event bus.
When the network drops, the screen stays on
The last screen is stored on the device and shown when offline or at startup; media plays from the cache. The device reconnects with a growing delay, the app restarts itself after a crash and gives up after 3 crashes in 2 minutes so a broken build never loops forever.
Teams, integrations and setup
Organizations, owner/editor/viewer roles, email invitations, two-factor authentication, POS and queue-machine integration with screen-scoped API keys. Deployment is one command with Docker Compose and Caddy, with automatic HTTPS.