watchdeck
watchdeck is a touch screen that runs shell commands and HTTP requests when you press a button. It has two parts: a display that shows the button grid, and a desktop app that holds the layout and runs the actions.
I wanted a controller that was easy to customize and could drive both coding workflows and homelab tasks from the same grid.
Hardware
The display is an Elecrow CrowPanel Advanced 10.1” with an ESP32-P4: 1024 x 600 IPS touch screen, 32 MB PSRAM, 16 MB flash. Wi-Fi comes from an ESP32-C6 co-processor on the board, which means 2.4 GHz networks only. Power is a USB-C cable and a 5 V, 2 A supply. A microSD card is needed only if you set Wi-Fi with a wifi.txt file.
How it works
- The firmware (ESP-IDF v6.1, in
firmware/) draws up to 8 columns by 5 rows of buttons with labels, colors and icons, and sends presses to the desktop over the network. - The desktop app (Tauri 2, React and TypeScript front end, Rust back end, in
app/) keeps the layout in aconfig.toml, runs the shell or HTTP action for each press, and sits in the tray. Its pages are Layout, Secrets and Devices. - The link between them is TLS. Pairing is confirmed on the display, and a pairing can be forgotten from the display.
- Tiles are buttons that poll a shell command or HTTP endpoint on an interval and show the result. HTTP actions can take header values from a secrets file so tokens stay out of the config.
- The app reloads the config when you save it. A bad edit is refused and the last good config stays live.
Status
Early development. The app is at version 0.1.0 and there are no releases yet, so both parts are built from source with mise. The code is MIT licensed.
Links
- Source: rackrot/watchdeck on GitHub
- Docs: Buttons and actions, Wi-Fi setup, device protocol and device spec
- Post: Introducing watchdeck