Dash
Dash is a browser extension that adds a “new tab” dashboard with widgets driven by personal data from various sources.
This project started as a design exploration in time management in October 2018. When trying to learn a new skill, or reach certain outcomes in a project, consistency is key. “Practice a little every day”, “Write a little every day”. But reaching consistency is difficult, it relies on balance. Overspending time on one project takes it away from other projects, a situation I often found myself in (and I still do).
What if you could, ahead of time, plan time boxes for all the projects you wanted to work on in a week, or in a month? And crucially, what if you could also nudge yourself into respecting those time boxes by getting frequent and instant feedback on your overall progress?
At the outbreak of COVID-19, and while procrastinating on my thesis work, I experienced a surge in interest to work on this again, and I started implementing a proof-of-concept. Iterating on the above idea, I first built the “Time Goals” widget. Later, I built two more related widgets: a “streaks” widget, and an (audio)book-specific time goals widget.
The Time Goals Widget
The Time Goals widget consisted of two parts:
- Live time tracking data for my projects, which came from two sources; the Toggl Track API for my personal projects at the time, and the Harvest API for my Columbia Road work projects at the time.
- Time goals, which I set in the dashboard, for projects I wanted to commit to at the time. For example, “I want to learn Swedish for 6 hours per week” would be a goal.
The widget then showed my progress towards the goal of each project in a progress bar, dividing the time goal equally over each weekday. With colors, it visually represented how much I was on- or off-balance:
- Blue meant: completed according to schedule
- Red meant: overdue, should have been done.
- Yellow meant: to be done today.
- Green meant I “overshot” the goal, or did more than planned given this distribution (can be a bad thing!).
I used this for about two months, and I felt it did help me to achieve a better balance. A new tab page is one you see often, so I would get reminded of my undershooting and overshooting all the time, which would steer my behavior.
I wanted to take this step further, according to my original designs: what if you didn’t just set a fixed number of hours as a project goal for a week/month, but would also integrate it with your digital calendar?
Then the tool would help you in more ways:
- When planning, you could add, re-scale and reshuffle calendar events for each project, until each project reached the desired quota of time: “Is your calendar sound? Does it match your intentions?”
- Your expectations for a day would be more fine-tuned: the dashboard wouldn’t nudge you to work on a project on Tuesday or Wednesday if you wanted to complete it all Thursday.
- When your calendar changed, as it often does, you would see the impact it had on your overall distribution of time for a week/month, and you’d be better informed to make resulting changes.
But while getting somewhere, I had not finished this part of the implementation. Along the way though, I saw more opportunities for this Dashboard that I did try out.
The “Streaks” Widget
Not everything ought to take a distinguishable number of hours in a weekly plan. A habit can be a small thing, like practicing on Duolingo for a few minutes each day. For these types of commitments, I added a “streaks” widget.
I picked two external services that I wanted to use daily at the time. Both had a “streaks” concept of their own.
- First, there was Vocabulary.com, the object of my Vocabulary.com Enhancer tools. The entry would also link to my last-practiced list, so I could directly jump into the next session.
- Next, there was Readup.com (for which I didn’t work yet at the time). Similarly, it showed my last Starred article.
Neither of these had a public API, however. This sparked some creative web engineering to retrieve arbitrary authenticated web app HTML from these sources. I used a web extension to proxy privileged requests with my cookies/credentials to my “new tab” page, which inconveniently was a regular web page. It needed to be a regular web page, because I relied on the Service Worker’s Cache API to cache requests for quick loads, and that was not supported in extension pages at the time.
The book widget
The last widget I added was the book widget. I didn’t only want to track time spent on my computer, but also time spent learning otherwise: through books, or audio books, and bring it fairly into consideration along with the rest.
Using the same proxy extension, I could parse my progress on audio books with Audible’s web app (see this post on a regex challenge therein). I could then set a time goal to finish my book by a certain date. I also worked on fetching progress from Kindle’s web app, but if I remember correctly, couldn’t sufficiently reverse-engineer the web app to extract my progress.
Conclusion & legacy
I used a development build of this project for some months as my daily-driver new tab, and enjoyed it! It helped me. However, after some time, I got stability problems with some widgets. Building unofficial APIs for personal data through web scraping does not guarantee stability, as HTML structures might change at any point. Other work encroached; I submitted my thesis, became a full-time employee at Columbia Road, and Dash faded out of focus.
I’ve re-pondered this concept sporadically ever since, so I might revisit it at some point.
Potential
About a year after shelving this project, I learned about Potential, a humane tech start-up building a habit forming app aligned well with what I had dreamed of for Dash. I tried out the app, and quickly started enjoying it. Potential also had a (much better designed) widget with automatically-updating streak counts, such as for Duolingo. I contacted their CEO, to present Dash as a reference for a possible expansion of Potential into the web browser. Some discussion ensued.
Not much later, Potential opened a role for a Software Engineer. I got the job! (at least, for a few fun months, until it got cancelled by some complicated times)
Factsheet
Status | Unfinished | |
Created | March 2020 → July 2020 — 4 months | |