Replacing Lovelace on Wall Tablets with Plain HTML That Claude Wrote
A blogger swapped slow Lovelace wall-tablet dashboards for small HTML pages over one Home Assistant websocket, with Claude writing the code. The wiring, the failures and the guardrails are worth copying.

Replacing Lovelace on Wall Tablets with Plain HTML That Claude Wrote
The Helpful Idiot, a personal blog, posted a build log on October 4 that I keep coming back to. The author's Home Assistant wall tablets were slow and kept reloading, so they replaced the Lovelace dashboards with small HTML and JavaScript pages that talk to Home Assistant over a single websocket. In the author's words, Claude "basically wrote all of it."
The AI angle isn't what makes it worth reading. It's the detail on how it's wired, how the author stayed in control, and what broke in real life.
How it's built
The pages live in Home Assistant's www folder and are served from /local/dashboard/. No framework, no build step, no npm. A core file of about 400 lines opens one websocket, subscribes only to the entity IDs found in the card settings, and redraws only the cards that changed. No polling, no refresh timer.
For scale: the family room page is "about 130 KB across 13 files, and around 42 KB compressed," and about a third of that is icons. The whole project is roughly 3,500 lines of JavaScript, including an in-browser SIP.js intercom that signs in to the author's Asterisk server. Rooms for the intercom are published to Home Assistant over MQTT rather than hard-coded.
One detail I liked: the per-floor light counts come from Home Assistant areas, so adding a bulb to an area updates the dashboard with no dashboard edit. Lights hidden behind a light group are skipped so they aren't counted twice.
The author is upfront that they didn't write the code. They told Claude what each tablet needed to do, tried every version on the actual tablets, and reported back what was broken or annoying.
What broke, and the fix
This is the part I'd bookmark. Most of these would bite anyone building a websocket dashboard, AI or not:
- The intercom gave up after a power cut. The tablets boot faster than the server hosting SIP.js. It now retries at 5, 10, 20, 40 and 60 seconds.
- The websocket got stuck on "connecting." It now gets 15 seconds to log in, or it's closed and retried.
- Subscribing to an empty entity list returns every entity. A page with nothing to show now doesn't subscribe at all.
- Home Assistant tells browsers to cache
/localfiles for 31 days. The fix is a version-stamped query string on every script, plus a small script that re-stamps every page after a change. - Testing from a PC hijacked a kid's room intercom calls. So there are now
?intercom=dialerand?intercom=offswitches.
The guardrails
Two things stood out to me.
The token. The author's advice is to "make a separate, non-admin Home Assistant user just for the tablets and use that user's token." The token is passed once in the URL fragment, saved in browser storage, and removed from the address bar. As the post puts it, a tablet on a wall is the easiest thing in the house to walk off with. It shouldn't carry admin credentials.
The workflow. The dashboards live in a Git repo. Claude works on a branch, explains what it changed and how it tested it, and the author merges and copies the folder into Home Assistant. Claude also built a fake Home Assistant, a headless browser answering the page's websocket with made-up data, which is how the screenshots avoid exposing a real house and how most fixes were tested. That's a sane way to let a coding agent near a home: it never touches the live system, and a human merges.
Part 2 adds voice and music
A follow-up post, dated October 10, extends the same tablets. The kids' tablets and the family room remote became Assist voice satellites using Voice Satellite, a custom integration by jxlarrea from the default HACS list (the author runs 2026.9.13; it needs Home Assistant 2025.6.1 or newer). Wake word detection runs in the tablet's browser, so audio only goes to Home Assistant after the wake word. There's also a Music Assistant page.
The integration work repeats a lesson from part 1. Intercom calls take the microphone from the voice assistant and give it back afterward. And only one browser can be a given satellite, so opening a kid's page on a PC would quietly take over that room's voice assistant. The fix is a ?voice=off switch and never starting the satellite inside another page.
The verdict
The author doesn't oversell it: "Lovelace is still the right answer for most people ... and it doesn't need any code." I agree. This is a project for someone with several older wall tablets, a specific complaint, and the patience to maintain a small codebase. If your dashboards are fine, leave them alone.
The performance claims, like taps responding right away, are the author's own, and the posts don't include benchmarks. The parts I'd copy regardless of who writes the code are the non-admin token, the branch-and-merge workflow, the fake Home Assistant for testing, and a retry plan for the boot-order problem.
Permalink: https://homeautomationweekly.com/issues/3-home-assistant-wall-tablet-plain-html-dashboards