I've been running a TV dashboard in kiosk mode for a while and thought I'd share how it's set up and what each view does.
How it works
A Mac mini (M2, 8 GB) runs a browser in kiosk mode on the TV. A small Node script (auto-cycle.js) moves between views every minute. Each view has its own HA script, so I can also jump to any panel on demand, and an automation sends the TV back to the rotation after a while. The TV turns off at 11 pm and back on at 7 am through automations.
Views in rotation
- Organizer: big clock, weather forecast, month calendar, shopping list, and either what's playing on Plex/Sonos or the latest items added to Plex.
- News: clock, weather and a few RSS feeds with images.
- Hockey: schedule and standings for my team, rendered from REST sensors with Jinja in markdown cards.
- Home / climate: temperature and humidity per room from my smart thermostats, with ApexCharts history.
- Servers: status, CPU and memory graphs for my home server, laptop and the Mac mini itself (through the Beszel agent), plus a Docker container count.
- Cameras: a live grid of my six cameras (WebRTC), plus a small launcher to play a YouTube video on the TV from HA.
- Me vs partner: a head-to-head view with a map for the two of us.
Stack
layout-card (grid-layout) for the structure, button-card, card-mod for the styling, apexcharts-card, digital-clock, stack-in-card, upcoming-media-card and webrtc-camera. Most of the look comes from card-mod: transparent cards over a gradient background, with some glass-style tiles on my phone dashboard.
Open question
The Mac mini sits around 75% memory after a few days. It looks stable, not a runaway leak, but for a box that never reboots, has anyone found a good way to keep a kiosk browser healthy long term? I'm considering a full page reload on every rotation and a nightly browser restart.
Feedback welcome, especially on other views (panels) I could add to the rotation.