Before you start
What you need
- Node 24
- pnpm 10, through corepack
- Git
With Node installed, corepack provides the pnpm version the repo pins:
$ corepack enableTry it
On your machine, in one command
No Vega SDK and no Cloudflare account needed:
git clone https://github.com/ddedic/boothwall && cd boothwall
pnpm install
pnpm demo --lanIt starts the API and web app on your machine’s network address, adds approved demo photos to a fresh wall and prints display, guest and Control addresses plus the local passcode. Open / on a laptop or projector, scan its QR code with your phone, send a photo and approve it in /control. Your phone needs to be on the same network. Plain pnpm demo keeps everything on localhost, where /snap in a second browser tab stands in for the phone. Ctrl+C stops it.
pnpm web:dev runs the web app alone against the API in your config, at http://localhost:5173. Arrow keys, Enter, Space and Escape stand in for the remote. Add ?demo to run the wall on the bundled photos with no API at all, ?kiosk to hide the cursor and hints, or ?fullscreen to go full screen on the first key press.
On the Vega Virtual Device
You need the Vega SDK with the Virtual Device, Node 24 and pnpm 10. Start the Virtual Device, then run the whole thing:
export PATH="$HOME/vega/bin:$PATH"
pnpm tv:vvd:start:1080 # the Virtual Device at 1920×1080
pnpm trypnpm try is pnpm demo --lan plus the TV: it points urls in the config at your machine while it runs (the TV reads its API at build time; stopping puts the config back), builds the app and opens it on the Virtual Device. The QR code on the TV leads phones to your local wall. To do it by hand, set the urls that pnpm demo --lan prints and run pnpm tv:build:debug && pnpm tv:run:vvd.
Use the Virtual Device’s on-screen remote, or run pnpm remote for a bigger one in your browser. To run without a network, set demo: true in the config and rebuild; in demo mode the remote’s Menu button steps through the four themes.
Make it yours
For developers: about 15 minutes to your own wall on Cloudflare’s free tier.
-
Configure. Everything event-specific lives in
packages/shared/src/config/boothwall.config.ts: the event name, hashtag, categories, brand colours, the badge beside the logo and where it deploys. Setdeploy.apiDomainanddeploy.webDomainto domains on your Cloudflare account, or to""for free workers.dev addresses. docs/customising.md explains every field. -
Brand it. Swap the logo, the TV backdrop and the icons for yours, keeping the file names (list). To see a fully branded wall first, run
pnpm boothwall example conference-booth. -
Deploy. Run
pnpm exec cf auth login, thenpnpm boothwall setup. It creates the D1 database and R2 bucket in your account, sets the Control panel passcode, deploys the API and the web app, and writes the addresses back into the config. After that,pnpm boothwall deployships changes. -
Put it on the TV. Set
tv.wallIdin the config (andtv.displayCredentialonly if your host checks one), then build a release and install it on a Fire TV in developer mode, or on the Virtual Device. The build is yours: it shows that one wall, a different wall means a rebuild, and the config inside it can be extracted, so keep it on your own TVs and never publish the.vpkg(details).pnpm tv:build:release vega run-app apps/tv-vega/build/armv7-release/tv_armv7.vpkg com.boothwall.app.main -d <device>
