The quest for the perfect dashboard

As a person who can hack stuff together with code, the idea of a personal dashboard has always been appealing to me. Think of it: one location that you visit...

9 min read

3 months ago

Latest Post All the letters in our script are equal — but some are more equal than others

As a person who can hack stuff together with code, the idea of a personal dashboard has always been appealing to me. Think of it: one location that you visit and see whatever you think is the most important to see, be it news or updates from your friends.

No need to skip around 4-5 apps/websites that you visit every day, just collect what matters from these sites and display them in a unified interface. No need for it to expand to be good enough for millions (if not billions) of people. It just needs to be not shitty enough for me for it to be a success. Sounds great, doesn't it? The idea in its essence sounds simple enough that I've tried building it over and over again. It took me numerous attempt and the rise of IoT to finally accomplish it.

Checking out the competition

The competition for my ultimate dashboard turns out to be immensely large. There are the obvious ones like Google Now, Amazon Alexa, and Facebook, there are experimental ones like Raindrop.io and Start.me, and even my browser wants to be my homepage. As a VP of the browser vendor in question once said:

The largest button on a modern browser is the back button. [...] What if there was a better forward button? One that helps you understand a topic better or find alternative solutions to a problem you’re solving? What if web browsers were immediately useful instead of demanding input when you launched them? Browsers could do so much more, through a better understanding of your behavior and by using the experience of people at human-scale to give you content that enriches your life[...].

Judging by this snippet, you'd probably guess this was a VP from Google Chrome (maybe Microsoft Edge), and you'd be wrong because even Firefox wants to be my dashboard.

What counts as a success?

Let's lay down some groundwork of what should be considered as a successful project. First, some principles:

  1. It needs to remain private. Being as paranoid as I am, I don't like the idea of giving one company all the possible streams of data that are relevant to me. The solution needs to be hosted by me.
  2. I need to rely on it on a daily basis. It needs to act as its own buffer between me and the web, displaying me a lot of data I should care about in my daily life.
  3. It needs to be easy to extend. The list information I'm interested in is never going to be finite. When something needs to be added, tweaked, or replaced, it should be relatively easy to do so.
  4. It needs to have the functionality no other solution has. There's no point in doing any of this if a third party could do it better. My solution needs to have some unique features so that the solution becomes irreplaceable by the competition.

And finally, a simple goal, shared by all the digital dashboards: replacing as many apps (or services) as possible.

The painful journey

With the rough idea in my mind, I wanted to prove to myself that I could do a better job at making my web consumption curated to my needs better than anyone else. Over the years, I've tried to achieve this goal far too many times. My attempts can roughly be separated into three phases, the first two of which have proven to be utter failures:

  1. Simple HTML files.
  2. A bit more complex web of custom-made scripts outputting data to a web app.
  3. A web app that, on top of showing me bits of information, also serves a vital purpose in my everyday life, making me come back to it.

In the beginning, my "dashboard" looked more like a custom-made new tab page. One such example would be this one:

Random image from Unsplash got loaded in the background, and my bookmarks were displayed in a (poorly-centered) table. Since I couldn't anticipate whether the background image would be light or dark, I've created some gray boxes and slapped some white text on top. It used to be a bit more functional, with browser detection actually working, and weather info being displayed to the right of the browser logo before Yahoo decided to shut down its weather API.

I thought I would end up using it if I set it up as a new tab page in my browser, but I didn't. I primarily use keyboard to navigate, and clicking Ctrl + T and typing in the first two letters of the destination is simply more convenient to me. The most useful part of that dashboard was the weather information, and even when it worked, it took a solid second or two to load. It was slightly annoying to have to wait for the only useful bit of information to show up, so I've ended up scrapping this itteration as I did many others before it.


As the idea was maturing in my head, so did my sysadmin skills. I don't like my data being in the hands of others, so my websites are being hosted on a server I have full control over. It also hosts my (Next)cloud and whichever other web app I want it to run (awesome-selfhosted is an extremely useful resource).

The idea behind a second phase was to unite all those simple scripts into one web app: When my work day starts, show me some radio show I could listen to while I'm working. When my work day ends, show me interesting articles that popped up in my RSS feed. I've built a complex web of scripts that spewed data to some text files that were then consumed by Jekyll and displayed back to me.

In theory, the newest data should be visible once I refresh the webpage (as in, when I open a new tab). What I should have known by that point is that, although Jekyll is great and stupidly simple to use (I've been using it for years and built over a dozen of websites in it), it's certainly not the best choice for the task at hand. And that complex web of scripts (split between Bash or Python) is bound to break at some point. Once it does, it was extremely painful to figure out why.

I would love to show you a screenshot from this phase, but I don't have any. This web of seemingly simple scripts was never both complete enough and stable enough to be actually useful. The idea felt like an utter failure. That is, until the final phase proved this idea to be right in its essence. It turned out that the "completely from scratch" approach was a bit too ambitious.


I've never been appealed by the Internet of Things because I didn't like the idea of my home gathering data and sending it to a third party. I've ended up mostly ignoring every gadget out there. While I using Twitter, @internetofshit was one of my favorite accounts. The idea behind automating things in my home sounded nice, but the available solutions looked a bit too dysfunctional for me. I've looked at articles such as this one completely baffled by what half of it means.

Aren't personal computers of 2019 more than capable of managing the data of the individual inside of his/her own home?

I've purchased a Raspberry Pi because it seemed like an awesome toy computer to play around with. The closest thing I had to its purpose at the time was to hook up an external hard drive to it, make it available on all my devices, and slap Kodi on top of it to be able to play media on the TV (via good old-fashioned HDMI). Temporarily, Kodi became a dashboard to access my media — my procrastination dashboard, but dashboard none the less.

Since it's easy to re-purpose a Raspberry Pi (turn it off → replace the microSD card → turn it on), I've constantly searched for alternative use cases (I can always buy another one when I find a use case I really like).

Upon searching for an alternative use case, I've discovered Home Assistant. My entire perspective has changed since then. It turns out that:

The end result doesn't look that special on the front-end:

As you can see, an API timeout shows me that a sensor isn't available, as opposed to messing up my whole dashboard.

The more interesting stuff happens on the backend. A screenshot cannot do it justice, but I believe a description of my usual workday can.

My usual workday

My wristwatch wakes me up by gently vibrating at an optimal in my sleep cycle. Moments later, a kettle starts boiling water for my morning cup of coffee. Lights in my hallway turn on automatically as I walk through it to get the cup. Minutes after I wake up, I'm sitting in my living room, watching a pre-compiled playlist of entertaining videos from my YouTube subscriptions. The lights in my living room change color (from dimmed yellow to bright white) 20 minutes later, giving me a visual indication that I should get to work instead of getting stuck in a YouTube wormhole.

I do feel like a wizard from Hogwarts inside of my home, with my phone instead of a wand. Of course, a wand wouldn't be very effective if I had to unlock it, find some app, and find some control within an app before I do any "spell". Instead, I've placed some NFC tags at various places around my home. By simply placing the phone on a surface with an NFC sticker, my home does whatever I want it to do.

I use NFC tags for various things, such as turning on the "focus mode" (plays music in the background, makes the lights bright, turns on Do Not Disturb on my phone), "movie mode" (syncs lights in my living room and LEDs on my TV with the video), and so on. No data needs to leave my home, and there's no awkward robot voice in between that I have to talk to while I'm home alone.

Privacy considerations weren't a part of J.K. Rowling's story because wands weren't constantly turned-on microphones waiting for the spells to make the magic happen.

Using NFC is much more convenient to me, as I don't have to use an IoT condom to be really, really sure that a smart speaker doesn't listen to every word I say. With over 1300 components at my disposal and a vibrant community , Home Assistant turned out to be versatile enough for me to be able to do some quirky stuff that I couldn't do otherwise. Built in hacker's favorite language (Python of course), the odds are decent that I could find a solution for any task that pops into my mind.

That, to me, sounds like a platform that could make my dream dashboard come true.

Stuff I couldn't do otherwise

I could tell you various things in an attempt to convince you how awesome Home Assistant is, but I think that the most effective method would be to list some things that are extremely useful to me that wouldn't be as easy to achieve otherwise.

Air quality. Since I live in one of the most heavily-polluted cities in Europe (my country holds all three top positions), I find the question "Will I cough if I try walking over 50 meters long distance?" really important in my everyday life. This bar changes color based on the current air quality. If it's green or orange, I should be good. If it's red or purple... I better stay home as much as I can (next to my air purifier that automatically turns on when needed).

Listen to radio shows from different sources. I look for the radio shows that match my musical taste. One of them happens to be available on BBC's iPlayer, another one happens to be played on SiriusXM and occasionally uploaded to Soundcloud, another few are on Mixcloud, some others have no official source at all (but some people record them and upload them unofficially). No third-party solution that I know of would be as complete as is youtube-dl with just a few dozens of lines of code automating it all. Much simpler than having BBC iPlayer, Soundcloud, Mixcloud, and who knows how many more apps on my phone. Instead, I have one interface. Clicking on any of them casts the latest episode to my TV.

Fine-tune my news sources. I find the local news to be somewhat relevant. I get much better results when I look at country-wide news filtered to contain the name of my city. Similarly, while watching domestic news sources certainly has its advantages, stepping out of that box to see when worldwide news sources mention my city (or my country) brings a whole new perspective to the mix that I wouldn't be able to achieve otherwise.


Liked what you've read?

Buy me a coffee. No strings attached.

Support me on Ko-fi
r3bl

Published 3 months ago

Subscribe to our newsletter

Recieve news directly to your email.

input.sh 2019.