
Heavily inspired by a reddit post a few months ago by u/ZeKWork I wanted to create my own eink dashboard that I wanted to "hide" on a picture wall (and also getting rid of an ugly thermostat). So I got myself a M5PaperS3, used one of my spare picture frames (10x15 cm), 3d printed something to hold the device in place and ordered a custom picture mount.
Over the last weekends I vibe coded a project that lets me configure my eink display with an app running inside Home Assistant.
I wanted a smooth experience in setting up my dashboard – so I included a live preview of the pages configured and implement an option for flashing the device over the air (OTA) after initially setting it up (via Web Serial, also inside the browser), so I don't need to plug it in every time I have a new idea for new page.
Screenshot of the Home Assistant app for configuring the device
I created a few widgets and "special" pages that should cover most use cases.
Quickly deactiving automations from one page
I also wanted to control the dashboard from within Home Assistant. So I created a connection via MQTT that alows me to switch pages, set it to dark mode or change the display text on the overview page (I use this for example to inform "my home" if the washing machine needs to be emptied or if there is some important note for today).
I vibe coded this (using Codex)! I know my way around Typescript/Javascript and Python, but I have no idea about C++ (this project is running the display library FastEPD, thank you for your fantastic work bitbank2). So there is a lot of spaghetti code!
If you want to build something like this as well feel free to use my repository – but totally understandable if you don't want to run someone elses vibe coded project and your server containing sensible data (as you shouldn't). If you want to risk it: This is of course running completely local. After setting up the dashboard you can shut down the app as it's not necessary to run it for the device to work. It will connect to your Home Assistant directly. You can also run this project on another computer using docker compose.