data/dashboard.json
{
"layout": [ /* one entry per card */ ],
"editing": false, // not per tab
"theme": "dark" // not per browser
}
-
No tab left silently draggable. Edit mode is one flag for the install, so leaving it on a
laptop leaves it on everywhere.
-
The palette is the board's, not the browser's. A wall display that reboots at 3am comes
back in the theme you chose, without a local setting to lose.
Optional login
The panel can be locked; the board stays a board
Set ADMIN_PASSWORD in .env and /admin asks for it — as does every
route behind it: widget source, run logs, history, connections and the secret store. Leave it unset and
everything stays open, which is the right answer on a trusted LAN and the way it always worked.
Signed out, the board still draws itself and webhooks still fire on their own tokens — but nothing can be
written to it, and the header shows a liveness dot and nothing else. No edit button, no theme switch, no
link to the panel for whoever walks past the screen.
One shared password from the environment, an httpOnly session cookie, and sessions that end when the
process does. It keeps the panel out of reach of the room, and it is not pretending to be more.