# Build a kiosk app with the SDK

> Canonical HTML: https://screenrig.ai/videos/sdk-kiosk-app/

A developer film: Claude Code writes a lobby kiosk against window.screenrig, ships an immutable release, and answers a visitor's tap on another screen.

<a id="watch"></a>

## Watch

- [Build a kiosk app with the SDK, 3:08 (MP4, 1080p)](https://screenrig.ai/videos/media/sdk-kiosk-app-1080.mp4)
- [Build a kiosk app with the SDK, 3:08 (MP4, 720p)](https://screenrig.ai/videos/media/sdk-kiosk-app-720.mp4)
- [English captions (WebVTT)](https://screenrig.ai/videos/media/sdk-kiosk-app.en.vtt)

Kestrel Labs, its visitors and every id are sample data. The app, the commands and the event line on screen use the [SDK](https://screenrig.ai/docs/sdk/) and [CLI](https://screenrig.ai/docs/cli/) as documented, run from [Claude Code](https://screenrig.ai/docs/start/claude-code/).

<a id="chapters"></a>

## Chapters

Jo asks for a lobby check-in kiosk. Claude Code writes it against `window.screenrig`, ships it, and answers the first tap on the welcome wall.

- **0:00** The kiosk, live
- **0:17** The old way
- **0:30** Jo asks Claude Code
- **0:50** The code
- **1:26** An immutable release
- **1:51** A tap reaches the agent
- **2:15** A second release
- **2:38** Built for developers

<a id="transcript"></a>

## Transcript

The narration, as spoken. The captions carry the same lines.

- **0:05** A check-in kiosk, written by an agent. And the lobby answers every tap.
- **0:18** A kiosk app used to mean a native build for every device, and your own server for every tap.
- **0:31** Jo builds internal tools at Kestrel Labs, in Claude Code.
- **0:39** One request: check visitors in on the lobby kiosk, and welcome them on the wall.
- **0:50** Nothing to install. Packing the app injects the runtime, so window.screenrig is just there.
- **0:57** Wait until the Player activates the page. Then say it's ready.
- **1:05** Today's visitors live in the app's key/value store. Change the list and the kiosk follows. No new build.
- **1:12** A tap sends a named event. The receipt means the backend has it.
- **1:20** On a landscape screen, the same app is the welcome wall.
- **1:26** Upload makes an immutable release, on its own origin.
- **1:33** One playlist pins that release, for the kiosk and the wall.
- **1:39** Assigning doesn't wait for the glass, so the agent checks. Screenshots come back.
- **1:52** A visitor taps their name.
- **1:56** The tap reaches the agent as an event, and the agent answers on another screen.
- **2:02** The kiosk never talks to the wall. The agent does.
- **2:15** Jo wants a button to call reception. That's a new release.
- **2:22** Every release is immutable. The playlist moves its pin when you say so.
- **2:28** And the key/value store carries over, so today's visitors are still there.
- **2:39** No build step. Immutable releases. State that outlives them. Events with receipts, and webhooks for your own service.
- **2:54** A generous free tier. Then pay for bytes, never per screen.
- **3:00** Ask your agent to set up screenrig.ai.
- **3:04** Give your agent a screen.

<a id="next-steps"></a>

## Build an app that belongs on a screen

Every method in the film is in the SDK reference: `waitUntilActive`, `ready`, `kv` and `emitConfirmed`.

- [Read the SDK reference](https://screenrig.ai/docs/sdk/)
- [All videos](https://screenrig.ai/videos/)
